Container-Server mit Spring starten

Sie können einen Container-Server mit verwalteten Spring-Erweiterungs-Beans und Namespace-Unterstützung starten.

Informationen zu diesem Vorgang

Mit mehreren für Spring konfigurierten XML-Dateien können Sie eXtreme-Scale-Basis-Container-Server starten.

Vorgehensweise

  1. ObjectGrid-XML-Datei:

    Zuerst wird eine sehr einfache ObjectGrid-XML-Datei definiert, die ein einziges ObjectGrid mit dem Namen "Grid" und eine einzige Map mit dem Namen "Test" enthält. Das ObjectGrid hat ein ObjectGridEventListener-Plug-in mit dem Namen "partitionListener" und die Map "Test" ein Evictor-Plug-in mit dem Namen "testLRUEvictor". Beachten Sie, dass sowohl das ObjectGridEventListener-Plug-in als auch das Evictor-Plug-in mit Spring konfiguriert sind, da ihre Namen "{spring}" enthalten:

    <?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. ObjectGrid-XML-Implementierungsdatei:

    Jetzt wird eine einfache ObjectGrid-XML-Implementierungsdatei erstellt. Sie partitioniert das ObjectGrid in 5 Partitionen, und es ist kein Replikat erforderlich.

    <?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. ObjectGrid-Spring-XML-Datei:

    Jetzt werden die ObjectGrid-Spring-verwalteten Erweiterungs-Beans und die Unterstützung für Namespaces verwendet, um die ObjectGrid-Beans zu konfigurieren. Die Spring-XML-Datei hat den Namen Grid_spring.xml. Beachten Sie, dass zwei Schemas in der XML-Datei enthalten sind: spring-beans-2.0.xsd ist für die Verwendung der Spring-verwalteten Beans bestimmt und objectgrid.xsd für die im Namespace "objectgrid" vordefinierten Beans:

    <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>

    Es wurden sechs Beans in dieser Spring-XML-Datei definiert:

    1. objectgrid:register: Diese Bean registriert die Standard-Bean-Factory für das ObjectGrid "Grid".
    2. objectgrid:server: Diese Bean definiert einen ObjectGrid-Server mit dem Namen "server". Dieser Server stellt auch Katalogservices bereit, da er eine verschachtelte Bean "objectgrid:catalog" enthält.
    3. objectgrid:catalog: Diese Bean definiert einen ObjectGrid-Katalogserviceendpunkt, der auf "localhost:2809" gesetzt ist.
    4. objectgrid:container: Diese Bean definiert einen ObjectGrid-Container mit der angegebenen Objectgrid-XML-Datei und der XML-Implementierungsdatei, die zuvor beschrieben wurden. Die Eigenschaft "server" gibt an, in welchem Server dieser Container ausgeführt wird.
    5. objectgrid:LRUEvictor: Diese Bean definiert einen LRUEvictor mit der einer LRU-Warteschlangenanzahl von 31.
    6. partitionListener: Diese Bean definiert ein ShardListener-Plug-in. Sie müssen eine Implementierung für dieses Plug-in bereitstellen. Deshalb kann sie die vordefinierten Beans nicht verwenden. Außerdem hat die Bean den Geltungsbereich "shard", d. h., es gibt nur eine einzige Instanz dieses ShardListeners pro ObejctGrid-Shard.
  4. Server starten:

    Das folgende Snippet startet den ObjectGrid-Server, in dem der Containerservice und der Katalogservice ausgeführt werden. Wie zu sehen, ist die einzige Methode, die zum Starten des Servers aufgerufen werden muss, eine Methode "get", mit der ein Bean-Container von der Bean-Factory abgerufen wird. Dies vereinfacht die Programmierungskomplexität, weil die meiste Logik in die Spring-Konfiguration verschoben wird:

    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();
        }
    }