Avec WebSphere eXtreme Scale, vous pouvez utiliser une interface de programmation d'application pour gérer le cycle de vie des conteneurs et serveurs imbriqués. Vous pouvez configurer le serveur à l'aide d'un programme avec les options que vous pouvez également configurer avec la ligne de commande ou les propriétés de serveur incluses dans un fichier. Vous pouvez configurer le serveur imbriqué pour en faire un serveur de conteneur et/ou un service de catalogue.
Vous pouvez effectuer de nombreuses tâches d'administration à l'aide de l'API d'administration. L'API est couramment utilisée comme serveur interne pour stocker l'état d'une application Web. Le serveur Web peut démarrer un serveur WebSphere eXtreme Scale imbriqué et signaler le serveur de conteneur au service de catalogue. Le serveur est ensuite ajouté comme membre d'une grille répartie plus importante. Cette utilisation peut offrir des possibilité d'évolution et une haute disponibilité à un fichier de données qui reste sinon volatile.
Vous pouvez contrôler à l'aide d'un programme le cycle de vie complet d'un serveur eXtreme Scale imbriqué. Les exemples sont aussi génériques que possible et n'illustrent que des exemples de code spécifiques aux étapes présentées.ServerProperties props = ServerFactory.getServerProperties();
props.setCatalogServiceBootstrap("host:port"); // requis pour se connecter à un service de catalogue spécifique
props.setServerName("ServerOne"); // nommez le serveur
props.setTraceSpecification("com.ibm.ws.objectgrid=all=enabled"); // Définit la spécification de trace
Pour plus d'informations sur l'interface CatalogServerProperties, voir Interface ServerProperties .
CatalogServerProperties catalogProps = ServerFactory.getCatalogProperties();
catalogProps.setCatalogServer(true); // false par défaut ; doit être défini comme service de catalogue
catalogProps.setQuorum(true); // active/désactive le quorum
Pour plus d'informations sur l'interface Server, voir Interface Server. Pour plus d'informations sur la classe ServerFactory, voir Classe ServerFactory.
L'exemple suivant montre comment créer l'instance Server : Server server = ServerFactory.getInstance();
Si
nous considérons l'exemple précédent, la classe ServerFactory
fournit une méthode statique qui renvoie une instance Server.
La classe ServerFactory est prévue pour être la seule
interface permettant d'obtenir une instance Server. Par
conséquent la classe garantit que l'instance est un singleton ou une instance
pour chaque machine virtuelle Java ou chargeur de classe isolé. La
méthode getInstance initialise l'instance
Server. Vous devez configurer toutes les propriétés du
serveur avant d'initialiser l'instance. La classe Server
est chargée de créer des instances Container.
Vous pouvez utiliser à la fois la classe ServerFactory et la classe Server pour
gérer le cycle de vie de l'instance Server imbriquée.
Pour plus d'informations sur l'interface Container, voir Interface Container.
DeploymentPolicy policy = DeploymentPolicyFactory.createDeploymentPolicy(new
URL("file://urltodeployment.xml"),
new URL("file://urltoobjectgrid.xml"));
Container container = server.createContainer(policy);
Vous pouvez supprimer et nettoyer un serveur de conteneur en exécutant la méthode teardown sur l'instance Container obtenue. L'exécution de la méthode teardown sur un conteneur nettoie ce dernier de manière appropriée et supprime le conteneur du serveur imbriqué.
container.teardown();
ServerFactory.stopServer(); // Utilise la fabrique pour arrêter le singleton du serveur
// ou
server.stopServer(); // Utilise directement l'instance Server
server.waitFor(); // Est renvoyé une fois que le serveur a correctement terminé ses procédures d'arrêt
Exemple
de code complet : import java.net.MalformedURLException;
import java.net.URL;
import com.ibm.websphere.objectgrid.ObjectGridException;
import com.ibm.websphere.objectgrid.deployment.DeploymentPolicy;
import com.ibm.websphere.objectgrid.deployment.DeploymentPolicyFactory;
import com.ibm.websphere.objectgrid.server.Container;
import com.ibm.websphere.objectgrid.server.Server;
import com.ibm.websphere.objectgrid.server.ServerFactory;
import com.ibm.websphere.objectgrid.server.ServerProperties;
public class ServerFactoryTest {
public static void main(String[] args) {
try {
ServerProperties props = ServerFactory.getServerProperties();
props.setCatalogServiceBootstrap("catalogservice-hostname:catalogservice-port");
props.setServerName("ServerOne"); // name server
props.setTraceSpecification("com.ibm.ws.objectgrid=all=enabled"); // TraceSpec
/*
* Dans la plupart des cas, le serveur ne sert que de serveur de conteneur
* et se connecte à un service de catalogue externe. Cette utilisation
* favorise davantage la haute disponibilité. L'extrait de code commenté
* ci-après permet à ce serveur de devenir un service de catalogue.
*
*
* CatalogServerProperties catalogProps =
* ServerFactory.getCatalogProperties();
* catalogProps.setCatalogServer(true); // activez le service de catalogue
* catalogProps.setQuorum(true); // activez le quorum
*/
Server server = ServerFactory.getInstance();
DeploymentPolicy policy = DeploymentPolicyFactory.createDeploymentPolicy
(new URL("url to deployment xml"), new URL("url to objectgrid xml file"));
Container container = server.createContainer(policy);
/*
* Le fragment est maintenant positionné sur ce conteneur si les exigences
* de déploiement sont satisfaites.
* Cela englobe la création du serveur et du conteneur imbriqués.
*
* Les lignes ci-après illustrent simplement l'appel des méthodes de nettoyage
*/
container.teardown();
server.stopServer();
int success = server.waitFor();
} catch (ObjectGridException e) {
// Container failed to initialize
} catch (MalformedURLException e2) {
// invalid url to xml file(s)
}
}
}