Imbrication du serveur Liberty dans vos applications

Vous pouvez utiliser les interfaces de programmation de système (SPI) fournies par Liberty pour configurer, contrôler et surveiller un serveur Liberty dans vos applications.

Pourquoi et quand exécuter cette tâche

Liberty fournit les interfaces de programmation de système (SPI) suivantes pour démarrer ou arrêter un serveur Liberty :
  • com.ibm.wsspi.kernel.embeddable.Server
  • com.ibm.wsspi.kernel.embeddable.ServerBuilder
Utilisez un objet Future pour stocker le résultat de l'opération de démarrage ou d'arrêt. Les codes retour utilisés par les opérations imbriquées sont les mêmes que ceux utilisés par la commande server. Pour plus d'informations sur les codes retour, les options de machine virtuelle (JVM) utilisées par le script de serveur et l'environnement de processus utilisé par ce script, voir Option de commande serveur.

De plus, vous pouvez recevoir des notifications asynchrones lorsque le serveur démarre, a démarré ou s'est arrêté, en créant votre propre classe qui implémente l'interface com.ibm.wsspi.kernel.embeddable.ServerEventListener.

Remarque : Pour créer une instance de serveur imbriqué dans votre application, vous devez procéder comme suit :
  • Incluez le fichier ws-server.jar dans le chemin d'accès aux classes. Le fichier ws-server.jar se trouve dans le répertoire ${rép.install.wlp}/bin/tools de l'installation Liberty.
  • Spécifiez le nom du serveur cible. Ce serveur doit exister.
  • Facultatif : Configurez le fichier ws-javaagent.jar avec l'option JVM -javaagent. Le fichier ws-javaagent.jar se trouve dans le répertoire ${rép.install.wlp}/bin/tools de l'installation Liberty. Il est recommandé de configurer le fichier ws-javaagent.jar, mais ceci n'est pas obligatoire si vous n'utilisez pas de fonctions du serveur qui l'exigent, comme le contrôle ou le traçage. Si vous devez contacter le support IBM®, des informations de trace vous seront peut-être réclamées, auquel cas vous devrez démarrer le serveur avec le fichier ws-javaagent.jar, même si vous ne l'utilisez pas habituellement.
Remarque : Dans un environnement imbriqué :
  • Les variables d'environnement ne sont pas vérifiées et les fichiers jvm.options et server.env ne sont pas lus.
  • La gestion de la machine virtuelle Java et de l'environnement est censée être assurée par l'appelant.

Procédure

  1. Importez les interfaces SPI dans votre classe appelante et définissez les arguments requis pour l'opération du serveur Liberty.
    import com.ibm.wsspi.kernel.embeddable.Server;
    import com.ibm.wsspi.kernel.embeddable.ServerBuilder;
    
    public class MyEmbeddedServer {
        String serverName="defaultServer";
        File userDir = new File("usr");
        File outputDir = new File("usr/servers/");
        ...
    }
    • Le paramètre serverName est requis et doit correspondre au nom d'un serveur créé auparavant.
    • userDir est facultatif et permet de définir le chemin du répertoire utilisateur. Par défaut, le répertoire utilisateur est ${wlp.user.dir}.
    • outputDir est facultatif et permet de définir le chemin du répertoire de sortie. Par défaut, le répertoire de sortie est ${wlp.user.dir}/servers.
  2. Initialisez le serveur en utilisant la classe ServerBuilder.
        ServerBuilder sb = new ServerBuilder();
        Server libertyServer = sb.setName(serverName)
                                 .setUserDir(userDir)
                                 .setOutputDir(outputDir)
                                 .build();
  3. Appelez la méthode Server.start() afin de démarrer le serveur. Appelez get() pour utiliser l'objet Future et bloquer le résultat jusqu'à ce que l'opération de démarrage s'achève. Utilisez l'une des méthodes suivantes pour déterminer si le démarrage du serveur a abouti :
    • Examinez le code de résultat renvoyé.
    • Utilisez la méthode successful().
    • Si le serveur est démarré, la méthode server.isRunning() renvoie 'true'.
        Future<Result> startReturnCode = libertyServer.start();
        Result result = startReturnCode.get(); // block until operation complete, if necessary
        System.out.println("Start returned: success=" + result.successful() + ", rc=" + result.getReturnCode() + ", ex=" + result.getException());
  4. Call the Server.stop() method to stop the server. Call get() on the future to block until the stop operation completes. Use one of the following to determine whether the server stopped successfully:
    • Check the returned result code.
    • Use the successful() method.
    • If the server is stopped, the server.isRunning() method returns false.
        Future<Result> stopReturnCode = libertyServer.stop();
        Result result = stopReturnCode.get(); // block until operation complete, if necessary
        System.out.println("Stop returned: success=" + result.successful() + ", rc=" + result.getReturnCode() + ", ex=" + result.getException());
  5. Implement the ServerEventListener interface. If you implement the ServerEventListener interface, you can receive notifications when the server is started or stopped.
    // update the class declaration to indicate that it implements ServerEventListener
    public class MyEmbeddedServer implements ServerEventListener {
        ...
        MyEmbeddedServer() throws ServerException {
            // set the listener via the server builder
            ServerBuilder sb = new ServerBuilder();
            Server libertyServer = sb.setName(serverName)
                                     .setServerEventListener(this)
                                     .build();
        }
    
        ...
        @Override
        public void serverEvent(ServerEvent event) {
            // provide an implementation of the serverEvent method
            System.out.println("serverEvent: " + event);
        }
    }

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_extend_embed.html