Démarrage d'un serveur de conteneur avec Spring

Vous pouvez démarrer un serveur de conteneur à l'aide de beans d'extension gérés Spring et la prise en charge d'espace de nom.

Pourquoi et quand exécuter cette tâche

Avec plusieurs fichiers XML configurés pour Spring, vous pouvez démarrer des serveurs de conteneur eXtreme Scale de base.

Procédure

  1. Fichier XML ObjectGrid :

    Tout d'abord, définissez un fichier ObjectGrid XML très simple qui contient un ObjectGrid "Grid" et une mappe "Test". Le fichier ObjectGrid est doté d'un plug-in ObjectGridEventListener appelé "partitionListener" et la mappe "Test" est dotée d'un expulseur appelé "testLRUEvictor". Notez que les plug-in ObjectGridEventListener et de l'expulseur sont configurés à l'aide de Spring, car leurs noms contiennent "{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. Fichier XML de déploiement ObjectGrid :

    Maintenant, créez un fichier de déploiement XML ObjectGrid simple, comme suit. Le fichier ObjectGrid est divisé en 5 partitions et aucune réplique n'est requise.

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

    Maintenant, nous allons utiliser les beans d'extension gérés pas ObjectGrid Spring et les fonctions de prise en charge d'espaces de noms pour configurer les beans ObjectGrid. Le fichier XML Spring s'appelle Grid_spring.xml. Notez que deux schémas sont inclus dans le fichier XML : spring-beans-2.0.xsd permet d'utiliser les beans gérés Spring, et objectgrid.xsd permet d'utiliser les beans prédéfinis dans l'espace de noms 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>

    Ce fichier XML Spring contient six beans définis :

    1. objectgrid:register : enregistre la classe de bean par défaut pour l'ObjectGrid "Grid".
    2. objectgrid:server : définit un serveur ObjectGrid nommé "server". Ce serveur fournit également un service de catalogue, car un bean objectgrid:catalog y est imbriqué.
    3. objectgrid:catalog : définit un point de contact de service de catalogue ObjectGrid, qui est défini sur "localhost:2809".
    4. objectgrid:container : définit un conteneur ObjectGrid avec le fichier objectgrid XML et le fichier de déploiement XML spécifiés que nous avons évoqués précédemment. La propriété de serveur spécifie dans quel serveur ce conteneur est hébergé.
    5. objectgrid:LRUEvictor : définit un expulseur LRUEvictor avec le nombre de files d'attente LRU à utiliser pour le définir sur 31.
    6. bean partitionListener : définit un plug-in ShardListener. Vous devez fournir une implémentation pour ce plug-in de manière à ce qu'il ne puisse pas utiliser les beans prédéfinis. De plus, la portée du bean est définie pour "shard", ce qui signifie qu'il y a une seule instance de ShardListener par fragment ObjectGrid.
  4. Démarrage du serveur :

    Le fragment ci-dessous démarre le serveur ObjectGrid, lequel héberge à la fois les services de conteneur et de catalogue. Comme nous pouvons le voir, la seule méthode à appeler pour démarrer le serveur est d'obtenir un "conteneur" de bean de la fabrique de beans. Cela simplifie la complexité de la programmation en déplaçant la plupart de la logique dans la configuration de 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();
        }
    }