Configurando os Plug-ins do eXtreme Scale com o OSGi Blueprint

Todos os plug-ins do ObjectGrid e do BackingMap do eXtreme Scale podem ser definidos como beans e serviços OSGi usando o Serviço OSGi Blueprint disponível com o Eclipse Gemini ou o Aries Apache.

Antes de Iniciar

Antes de poder configurar seus plug-ins como serviços OSGi, você deve primeiro empacotar seus plug-ins em um pacote configurável OSGi e entender os princípios fundamentais dos plug-ins necessários. O pacote configurável deve importar os pacotes do cliente ou servidor do WebSphere eXtreme Scale e outros pacotes dependentes requeridos pelos plug-ins ou criar uma dependência do pacote configurável nos pacotes configuráveis do servidor ou cliente doeXtreme Scale. Este tópico descreve como configurar o XML Blueprint para criar beans de plug-in e expô-los como serviços OSGi para o eXtreme Scale usar.

Sobre Esta Tarefa

Beans e serviços são definidos em um arquivo XML do Blueprint e o contêiner do Blueprint descobre, cria e liga os beans juntos e os expõe como serviços. O processo torna os beans disponíveis para outros pacotes configuráveis OSGi, incluindo os pacotes configuráveis de servidor e cliente do eXtreme Scale.

Ao criar serviços de plug-in customizados para uso com o eXtreme Scale, o pacote configurável que deve hospedar os plug-ins deve ser configurado para usar Blueprint. Além disso, um arquivo XML do Blueprint deve ser criado e armazenado dentro do pacote configurável. Leia sobre construção de aplicativos OSGi com a especificação do Contêiner do Blueprint para obter um entendimento geral da especificação.

Procedimento

  1. Crie um arquivo XML do Blueprint. É possível nomear o arquivo de qualquer jeito. No entanto, você deve incluir o namespace do projeto:
    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
    ...
    </blueprint>
  2. Crie definições de bean no arquivo XML do Blueprint para cada plug-in do eXtreme Scale.
    Beans são definidos usando o elemento <bean> e podem ser ligados a outras referências de bean e podem incluir parâmetros de inicialização.
    Importante: Ao definir um bean, você deve usar o escopo correto. O Blueprint suporta os escopos singleton e de protótipo. O eXtreme Scale também suporta um escopo de shard customizado.

    Defina a maioria dos plug-ins do eXtreme Scale como protótipo ou beans com escopo definido em shard, uma vez que todos os beans devem ser exclusivos para cada shard do ObjectGrid ou instância do BackingMap à qual eles estão associados. Beans com escopo definido em shard podem ser úteis ao usar os beans em outros contextos para permitir a recuperação da instância correta.

    Para definir um bean com escopo definido em protótipo, use o atributo scope="prototype" no bean:
    <bean id="myPluginBean" class="com.mycompany.MyBean" scope="prototype">
    ...
    </bean>
    Para definir um bean com escopo definido em shard, você deve incluir o namespace objectgrid no esquema XML e usar o atributo scope="objectgrid:shard" no bean:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
               xmlns:objectgrid="http://www.ibm.com/schema/objectgrid"
               
    	   xsi:schemaLocation="http://www.ibm.com/schema/objectgrid
                    http://www.ibm.com/schema/objectgrid/objectgrid.xsd">
        
        <bean id="myPluginBean" class="com.mycompany.MyBean" 
    			scope="objectgrid:shard">
        ...
        </bean>
    
    ...
  3. Crie definições de bean PluginServiceFactory para cada bean de plug-in. Todos os beans do eXtreme Scale devem ter um bean do PluginServiceFactory definido para que o escopo do bean correto possa ser aplicado. O eXtreme Scale inclui um BlueprintServiceFactory que você pode usar. Ele inclui duas propriedades que devem ser configuradas. Você deve configurar a propriedade blueprintContainer com a referência blueprintContainer e a propriedade beanId deve ser configurada com o nome do identificador de bean. Quando o eXtreme Scale consulta o serviço para instanciar os beans apropriados, o servidor procura a instância do componente do bean usando o contêiner Blueprint.
    bean id="myPluginBeanFactory"
        class="com.ibm.websphere.objectgrid.plugins.osgi.BluePrintServiceFactory">
        <property name="blueprintContainer" ref="blueprintContainer"/>
        <property name="beanId" value="myPluginBean" />
    </bean>
  4. Crie um gerenciador de serviços para cada bean PluginServiceFactory. Cada gerenciador de serviços expõe o bean PluginServiceFactory, usando o elemento <service>. O elemento de serviço identifica o nome a ser exposto para o OSGi, a referência para o bean PluginServiceFactory, a interface a ser exposta e a classificação do serviço. O eXtreme Scale usa a classificação do gerenciador de serviços para executar upgrades de serviço quando a grade do eXtreme Scale está ativa. Se a classificação não for especificada, a estrutura do OSGi assumirá uma classificação igual a 0. Leia sobre como atualizar as classificações de serviço para obter mais informações.
    Blueprint inclui várias opções para configurar gerenciadores de serviços. Para definir um gerenciador de serviços simples para um bean PluginServiceFactory, crie um elemento <service> para cada bean PluginServiceFactory:
    <service ref="myPluginBeanFactory"
        interface="com.ibm.websphere.objectgrid.plugins.osgi.PluginServiceFactory"
        ranking="1">
    </service> 
  5. Armazene o arquivo XML do Blueprint no pacote configurável de plug-ins. O arquivo XML do Blueprint deve ser armazenado no diretório OSGI-INF/blueprint para o contêiner do Blueprint a ser descoberto.
    Para armazenar o arquivo XML do Blueprint em um diretório diferente, você deve especificar o seguinte cabeçalho de manifesto Bundle-Blueprint:
    Bundle-Blueprint: OSGI-INF/blueprint.xml

Resultados

Os plug-ins do eXtreme Scale agora são configurados para serem expostos em um contêiner OSGi Blueprint, além disso, o arquivo XML do descritor do ObjectGrid é configurado para referenciar os plug-ins usando o serviço OSGi Blueprint.