Exemple : recherche d'une interface home ou métier d'EJB avec JNDI

La plupart des applications qui utilisent Java™ Naming and Directory Interface (JNDI) s'excutent dans un conteneur. Ce n'est pas le cas de toutes les applications utilisant JNDI. Le nom utilisé pour rechercher un objet est différent selon que l'application s'exécute ou non dans un conteneur. Il est parfois préférable qu'une application utilise une URL corbaname comme nom de recherche. Les clients JNDI fondés sur conteneur et les clients partiels Java peuvent utiliser une URL corbaname.

Les exemples suivants montrent comment effectuer des recherches JNDI à partir de différents types d'applications.

Recherche JNDI à partir d'une application s'exécutant dans un conteneur

Les applications qui s'exécutent dans un conteneur peuvent utiliser les noms de recherche java:. Les noms de recherche de cette forme fournissent un niveau d'adressage indirect de telle sorte que le nom de recherche utilisé pour rechercher un objet ne dépende pas du nom d'objet dans la mesure où il est lié à l'espace de nom d'un serveur de noms. Les descripteurs de déploiement pour l'application fournissent le mappage du nom java: et du nom de recherche du serveur de noms. Le conteneur définit l'espace de nom java: en fonction des informations du descripteur de déploiement afin que le nom java: soit correctement mappé à l'objet correspondant.

L'exemple ci-après représente une recherche d'interface métier distante d'EJB 3.0. Le nom réel de la recherche de l'interface home est déterminé par le fichier de liaison ibm-ejb-jar-bnd.xml de l'interface, le cas échéant, ou par le nom par défaut affecté par le conteneur d'EJB en l'absence de fichier de liaison. Pour plus d'informations, voir la rubrique relative aux liaisons par défaut des interfaces home et métier, et la rubrique relative aux liaisons définies par l'utilisateur des interfaces home et métier.
// Get the initial context as shown in a previous example.
...
// Look up the business interface using the JNDI name.
try {
   java.lang.Object ejbBusIntf =
      initialContext.lookup(
         "java:comp/env/com/mycompany/accounting/Account");
   accountIntf =
      (Account)javax.rmi.PortableRemoteObject.narrow(ejbBusIntf, Account.class);
}
   catch (NamingException e) { // Error getting the business interface
   ...
}

L'exemple ci-après représente une recherche d'une interface d'EJB 1.x ou 2.x. Le nom de recherche du foyer est déterminé par les descripteurs de déploiement de l'application. Le bean enterprise (EJB) se trouve dans un conteneur d'EJB qui fournit une interface entre le bean et le serveur d'applications sur lequel il est installé.

// Get the initial context as shown in a previous example
...
// Look up the home interface using the JNDI name
try {
   java.lang.Object ejbHome =
      initialContext.lookup(
         "java:comp/env/com/mycompany/accounting/AccountEJB");
   accountHome = (AccountHome)javax.rmi.PortableRemoteObject.narrow(
      (org.omg.CORBA.Object) ejbHome, AccountHome.class);
}
   catch (NamingException e) { // Error getting the home interface
   ...
}

Recherche JNDI à partir d'une application ne s'exécutant pas dans un conteneur

Les applications qui ne s'exécutent pas dans un conteneur ne peuvent pas utiliser les noms de recherche java: car c'est le conteneur qui définit l'espace de nom java: pour l'application. Une application de ce type doit donc rechercher l'objet directement à partir du serveur de noms. Chaque serveur d'application contient un serveur de noms. Les objets système tels que les interfaces home d'EJB sont liés au contexte racine de serveur dans ce serveur de noms. Les différents serveurs de noms sont fédérés au moyen d'une structure d'espace de nom système. L'approche recommandée pour rechercher des objets sur différents serveurs consiste à qualifier le nom afin que celui-ci soit résolu à partir d'un contexte initial dans la cellule. Si un nom relatif est utilisé, le contexte initial doit être le même contexte racine de serveur que celui sous lequel l'objet est lié. La forme du nom qualifié varie selon qu'il est basé sur la topologie ou fixe. Des exemples de chacune de ces formes de nom qualifié sont fournis ci-après.

  • Noms qualifiés basés sur la topologie

    Un nom qualifié basé sur la topologie parcourt l'espace de nom du système en direction du contexte racine du serveur sous lequel l'objet cible est lié. Un nom qualifié basé sur la topologie est résolu à partir de n'importe quel contexte initial de la cellule.

    Le nom qualifié basé sur la topologie varie selon que l'objet réside dans un seul serveur ou dans un cluster de serveurs. Des exemples de chacune de ces recherches sont fournis ci-après.

    Serveur unique
    L'exemple ci-après représente une recherche d'une interface métier d'EJB exécutée sur le serveur, MyServer, configuré dans le noeud Node1.
    // Get the initial context as shown in a previous example.
    // Using the form of lookup name below, it does not matter which
    // server in the cell is used to obtain the initial context.
    ...
    // Look up the business interface using the JNDI name
    try {
       java.lang.Object ejbBusIntf = initialContext.lookup(
          "cell/nodes/Node1/servers/MyServer/com/mycompany/accounting/Account");
       accountIntf =
         (Account)javax.rmi.PortableRemoteObject.narrow(ejbBusIntf, Account.class);
    }
    catch (NamingException e) { // Error getting the business interface
       ...
    }

    L'exemple suivant porte sur la recherche d'une interface home d'EJB exécutée dans un seul serveur, MyServer, configuré dans le noeud Node1.

    // Get the initial context as shown in a previous example
    // Using the form of lookup name below, it doesn't matter which
    // server in the cell is used to obtain the initial context.
    ...
    // Look up the home interface using the JNDI name
    try {
       java.lang.Object ejbHome = initialContext.lookup(
          "cell/nodes/Node1/servers/MyServer/com/mycompany/accounting/AccountEJB");
       accountHome = (AccountHome)javax.rmi.PortableRemoteObject.narrow(
          (org.omg.CORBA.Object) ejbHome, AccountHome.class);
    }
    catch (NamingException e) { // Error getting the home interface
       ...
    }
    Cluster de serveurs
    L'exemple suivant illustre la recherche d'une interface métier d'EJB exécutée dans le cluster MyCluster. Le nom ne peut être résolu que si l'un des membres du cluster est en cours de fonctionnement.
    // Get the initial context as shown in a previous example.
    // Using the form of lookup name below, it does not matter which
    // server in the cell is used to obtain the initial context.
    ...
       // Look up the business interface using the JNDI name
    try {
       java.lang.Object ejbBusIntf = initialContext.lookup(
          "cell/clusters/MyCluster/com/mycompany/accounting/Account");
       accountIntf =
         (Account)javax.rmi.PortableRemoteObject.narrow(ejbBusIntf, Account.class);
    }
    catch (NamingException e) { // Error getting the business interface
       ...
    }

    L'exemple suivant illustre la recherche d'une interface home d'EJB exécutée dans le cluster MyCluster. Le nom ne peut être résolu que si l'un des membres du cluster est en cours de fonctionnement.

    // Get the initial context as shown in a previous example
    // Using the form of lookup name below, it does not matter which
    // server in the cell is used to obtain the initial context.
    ...
       // Look up the home interface using the JNDI name
    try {
       java.lang.Object ejbHome = initialContext.lookup(
          "cell/clusters/MyCluster/com/mycompany/accounting/AccountEJB");
       accountHome = (AccountHome)javax.rmi.PortableRemoteObject.narrow(
          (org.omg.CORBA.Object) ejbHome, AccountHome.class);
    }
    catch (NamingException e) { // Error getting the home interface
       ...
    }
  • Noms qualifiés fixes

    Si un nom fixé au niveau de la cellule a été défini pour l'objet cible, vous pouvez utiliser sa forme qualifiée au lieu du nom qualifié basé sur la topologie. Même si ce dernier fonctionne, le nom fixe, lui, ne change pas avec la topologie de la cellule ou avec le déplacement de l'objet cible vers un serveur différent.

    L'exemple ci-après illustre la recherche d'une interface métier d'EJB avec un nom fixe qualifié.
    // Get the initial context as shown in a previous example.
    // Using the form of lookup name below, it does not matter which
    // server in the cell is used to obtain the initial context.
    ...
    // Look up the business interface using the JNDI name
    try {
       java.lang.Object ejbBusIntf = initialContext.lookup(
         "cell/persistent/com/mycompany/accounting/Account");
       accountIntf =
         (Account)javax.rmi.PortableRemoteObject.narrow(ejbBusIntf, Account.class);
       }
    catch (NamingException e) { // Error getting the business interface
    ... 
    
    }

    Voici un exemple de recherche avec un nom qualifié fixe :

    // Get the initial context as shown in a previous example
    // Using the form of lookup name below, it doesn't matter which
    // server in the cell is used to obtain the initial context.
    ...
    // Look up the home interface using the JNDI name
    try {
       java.lang.Object ejbHome = initialContext.lookup(
         "cell/persistent/com/mycompany/accounting/AccountEJB");
       accountHome = (AccountHome)javax.rmi.PortableRemoteObject.narrow(
          (org.omg.CORBA.Object) ejbHome, AccountHome.class);
       }
    catch (NamingException e) { // Error getting the home interface
    ...
    }

Recherche JNDI avec une URL corbaname

Une corbaname peut parfois être utile en tant que nom de recherche. Si, par exemple, l'objet cible n'est pas membre de l'espace de nom fédéré et ne peut être localisé avec un nom qualifié, une URL corbaname peut être utile pour rechercher l'objet.

L'exemple ci-après illustre la recherche d'une interface métier d'EJB avec une URL corbaname.
// Get the initial context as shown in a previous example. 
... 
// Look up the business interface using a corbaname URL. 
try { 
   java.lang.Object ejbBusIntf = initialContext.lookup(
      "corbaname:iiop:someHost:2809#com/mycompany/accounting/Account"); 
   accountIntf =
     (Account)javax.rmi.PortableRemoteObject.narrow(ejbBusIntf, Account.class); 
} 
catch (NamingException e) { // Error getting the business interface 
   ... 
} 

Voici une recherche effectuée à l'aide d'une URL corbaname.

// Get the initial context as shown in a previous example 
... 
// Look up the home interface using a corbaname URL 
try { 
   java.lang.Object ejbHome = initialContext.lookup(
      "corbaname:iiop:someHost:2809#com/mycompany/accounting/AccountEJB"); 
   accountHome = (AccountHome)javax.rmi.PortableRemoteObject.narrow( 
      (org.omg.CORBA.Object) ejbHome, AccountHome.class); 
} 
catch (NamingException e) { // Error getting the home interface 
   ... 
} 

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rnam_example_prop3
Nom du fichier : rnam_example_prop3.html