Iniciando um Servidor de Contêiner com o Spring

É possível iniciar um servidor de contêiner usando beans de extensão gerenciados pelo Spring e o suporte ao namespace.

Sobre Esta Tarefa

Com vários arquivos XML configurados para Spring, é possível iniciar os servidores de contêiner eXtreme Scale básicos.

Procedimento

  1. Arquivo XML do ObjectGrid

    Primeiramente, defina um arquivo XML do ObjectGrid muito simples que contenha um "Grid" do ObjectGrid e uma mapa "Test". O ObjectGrid possui um plug-in ObjectGridEventListener chamado "partitionListener", e o mapa "Test" possui um Evictor conectado chamado "testLRUEvictor". Observe que ambos os plug-ins ObjectGridEventListener e Evictor são configurados usando Spring pois seus nomes contêm "{spring}".

    <?xml version="1.0" encoding="UTF-8"?>
    <objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
     xmlns="http://ibm.com/ws/objectgrid/config">
        <objectGrids>
            <objectGrid name="Grid">
    	    <bean id="ObjectGridEventListener" className="{spring}partitionListener" />
                <backingMap name="Test" pluginCollectionRef="test" />
            </objectGrid>
        </objectGrids>
    
        <backingMapPluginCollections>
            <backingMapPluginCollection id="test">
                <bean id="Evictor" className="{spring}testLRUEvictor"/>
            </backingMapPluginCollection>
        </backingMapPluginCollections>
    </objectGridConfig>
  2. Arquivo XML de implementação do ObjectGrid:

    Agora, crie um arquivo XML de implementação simples do ObjectGrid da forma a seguir. Ele particiona o ObjectGrid em 5 partições, e nenhuma réplica é necessária.

    <?xml version="1.0" encoding="UTF-8"?>
    <deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy ../deploymentPolicy.xsd"
     xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
        <objectgridDeployment objectgridName="Grid">
            <mapSet name="mapSet" numInitialContainers="1" numberOfPartitions="5" minSyncReplicas="0" 
                maxSyncReplicas="1" maxAsyncReplicas="0">
                <map ref="Test"/>
            </mapSet>
        </objectgridDeployment>
    </deploymentPolicy>
  3. Arquivo XML Spring do ObjectGrid

    Agora serão usados tanto beans de extensão gerenciado Spring do ObjectGrid e recursos de suporte a espaço de nomes para configurar os beans ObjectGrid. O nome do arquivo XML Spring é Grid_spring.xml. Observe que estão incluídos dois esquemas no arquivo XML: spring-beans-2.0.xsd é para uso dos beans gerenciados do Spring, e objectgrid.xsd é para uso dos beans predefinidos no namespace do objectgrid.

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:objectgrid="http://www.ibm.com/schema/objectgrid"
           xsi:schemaLocation="
           http://www.ibm.com/schema/objectgrid 
    			http://www.ibm.com/schema/objectgrid/objectgrid.xsd
           http://www.springframework.org/schema/beans 
    			http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    
        <objectgrid:register id="ogregister" gridname="Grid"/>
      
        <objectgrid:server id="server" isCatalog="true" name="server">
            <objectgrid:catalog host="localhost" port="2809"/>
        </objectgrid:server>
      
        <objectgrid:container id="container" 
    			objectgridxml="com/ibm/ws/objectgrid/test/springshard/objectgrid.xml" 
           deploymentxml="com/ibm/ws/objectgrid/test/springshard/deployment.xml" 
    			server="server"/>
      
        <objectgrid:LRUEvictor id="testLRUEvictor" numberOfLRUQueues="31"/>
      
        <bean id="partitionListener" 
    			class="com.ibm.websphere.objectgrid.springshard.ShardListener" scope="shard"/>
    </beans>

    Havia seis beans definidos neste arquivo XML do Spring:

    1. objectgrid:register: Isto registra o bean factory padrão para o "Grid" do ObjectGrid.
    2. objectgrid:server: Isto define um servidor do ObjectGrid com o nome "server". Este servidor também fornece o serviço de catálogo desde que ele possua um bean objectgrid:catalog aninhado nele.
    3. objectgrid:catalog: Isto define um terminal de serviço de catálogo ObjectGrid, que está configurado como "localhost:2809".
    4. objectgrid:container: Isto define um contêiner ObjectGrid com o arquivo XML objectgrid especificado e o arquivo XML de implementação como discutido anteriormente. A propriedade de servidor especifica em qual servidor este contêiner está hospedado.
    5. objectgrid:LRUEvictor: Isto define um LRUEvictor com a quantidade de filas LRU para usar configurada como 31.
    6. bean partitionListener: Isto define um plug-in ShardListener. É necessário fornecer uma implementação para este plug-in, caso contrário, ele não poderá usar os beans predefinidos. Além disso, esse escopo do bean é configurado como "shard", o que significa que existe apenas uma instância desse ShardListener por shard ObjectGrid.
  4. Iniciando o servidor:

    O fragmento a seguir inicia o servidor ObjectGrid, que hospeda tanto o serviço de contêiner e o serviço de catálogo. Como podemos ver, o único método que precisamos chamar para iniciar o servidor é para obter um "contêiner" de bean do bean factory. Isto simplifica a complexidade de programação pela movimentação da maioria da lógica na configuração do Spring.

    public class ShardServer extends TestCase
    {
        Container container;
        org.springframework.beans.factory.BeanFactory bf;
    
        public void startServer(String cep) 
        {
            try
            {
                bf = new org.springframework.context.support.ClassPathXmlApplicationContext(
                    "/com/ibm/ws/objectgrid/test/springshard/Grid_spring.xml", ShardServer.class);
                container = (Container)bf.getBean("container");
            }
            catch(Exception e)
            {
                throw new ObjectGridRuntimeException("Cannot start OG container", e);
            }
        }
    	
        public void stopServer() 
        {
            if(container != null)
                container.teardown();
        }
    }