Construindo Plug-ins Dinâmicos do eXtreme Scale

O WebSphere eXtreme Scale inclui plug-ins ObjectGrid e BackingMap. Estes plug-ins são implementados em Java e são configurados usando o arquivo XML do descritor do ObjectGrid. Para criar um plug-in dinâmico que pode ser dinamicamente atualizado, eles precisam estar cientes dos eventos de ciclo de vida de ObjectGrid e BackingMap porque eles podem precisar concluir algumas ações durante uma atualização. Aprimorar um pacote configurável de plug-in com métodos de retorno de chamada, listeners de eventos, ou ambos, do ciclo de vida permite que o plug-in conclua essas ações em momentos apropriados.

Antes de Iniciar

Este tópico supõe que você construiu o plug-in apropriado. Para obter informações adicionais sobre como desenvolver plug-ins do eXtreme Scale, consulte o tópico APIs e Plug-ins do Sistema.

Sobre Esta Tarefa

Todos os plug-ins do eXtreme Scale se aplicam a uma instância de BackingMap ou de ObjectGrid. Muitos plug-ins também interagem com outros plug-ins. Por exemplo, um plug-in Loader e TransactionCallback trabalham juntos para interagir corretamente com uma transação do banco de dados e as várias chamadas de banco de dados JDBC. Alguns plug-ins também pode precisar armazenar em cache dados de configuração a partir de outros plug-ins para melhorar o desempenho.

Os plug-ins BackingMapLifecycleListener e ObjectGridLifecycleListener fornecem operações de ciclo de vida para as respectivas instâncias de BackingMap e ObjectGrid. Este processo permite que plug-ins sejam notificados quando o BackingMap ou ObjectGrid pai e seus respectivos plug-ins podem ser alterados. Os plug-ins BackingMap implementam a interface de BackingMapLifecyleListener e os plug-ins ObjectGrid implementam a interface de ObjectGridLifecycleListener. Estes plug-ins são chamados automaticamente quando o ciclo de vida do BackingMap ou ObjectGrid pai é alterado. Para obter mais informações sobre os plug-ins de ciclo de vida, consulte o tópico Gerenciando Ciclos de Vida de Plug-in.

É possível aprimorar os pacotes configuráveis usando os métodos ou os listeners de evento do ciclo de vida nas seguintes tarefas comuns:
  • Iniciar e parar recursos, como encadeamentos ou assinantes de sistema de mensagens.
  • Especificar que uma notificação ocorra quando os plug-ins equivalentes forem atualizados, permitindo o acesso direto ao plug-in e a detecção de quaisquer mudanças.

Sempre que outro plug-in for acessado diretamente, acesse esse plug-in por meio do contêiner OSGi para assegurar que todas as partes do sistema referenciem o plug-in correto. Se, por exemplo, algum componente no aplicativo referenciar diretamente, ou armazenar em cache, uma instância de um plug-in, ele manterá sua referência para essa versão do plug-in, mesmo depois que o plug-in tiver sido atualizado dinamicamente. Esse comportamento pode causar problemas relacionados ao aplicativo, bem como fugas de memória. Portanto, grave o código que depende dos plug-ins dinâmicos que obtêm sua referência usando semânticas getService() do OSGi. Se o aplicativo precisar armazenar em cache um ou mais plug-ins, ele atenderá eventos de ciclo de vida usando interfaces ObjectGridLifecycleListener e BackingMapLifecycleListener. O aplicativo também deve poder atualizar seu cache quando necessário, de modo thread safe.

Todos os plug-ins do eXtreme Scale usados com o OSGi também devem implementar as respectivas interfaces BackingMapPlugin ou ObjectGridPlugin. Novos plug-ins, tal como a interface MapSerializerPlugin impingem essa prática. Essas interfaces fornecem ao ambiente de tempo de execução do eXtreme Scale e ao OSGi uma interface consistente para injeção de estado no plug-in e controle de seu ciclo de vida.

Ao usar esta tarefa para especificar que uma notificação ocorre quando os plug-ins equivalentes são atualizados, é possível criar um factory de listener que produz uma instância do listener.

Procedimento

Resultados

Implementando a interface ObjectGridPlugin ou BackingMapPlugin, o eXtreme Scale pode controlar o ciclo de vida de seu plug-in nos momentos certos.

Implementando a interface ObjectGridLifecycleListener ou BackingMapLifecycleListener, o plug-in é automaticamente registrado como um listener dos eventos de ciclo de vida do ObjectGrid ou do BackingMap associados. O evento INITIALIZING é usado para sinalizar que todos os plug-ins do ObjectGrid e do BackingMap foram inicializados e estão disponíveis para consultar e usar. O evento ONLINE é usado para sinalizar que o ObjectGrid está on-line e pronto para iniciar eventos de processamento.