Exemple : Recherche d'une interface home d'EJB avec CosNaming
Vous pouvez rechercher un objet EJB home ou CORBA à partir d'un serveur de nom WebSphere Application Server via l'interface CORBA CosNaming.
Vous pouvez appeler la méthode resolve ou resolve_str sur le contexte initial, ou bien la méthode string_to_object sur l'ORB. Vous pouvez utiliser un nom qualifié afin que ce nom soit résolu quel que soit le serveur de noms sur lequel la recherche est exécutée, ou un nom non qualifié qui sera uniquement résolu à partir du contexte racine du serveur sur le serveur de noms contenant réellement la liaison objet. (Le nom qualifié parcourt l'espace de nom système fédéré en direction du contexte racine du serveur spécifié.)
Noms qualifiés et non qualifiés
Chaque serveur d'application contient un serveur de noms. Le objets système tels que les foyers EJB sont liés à 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 à utiliser un nom qualifié.
Un nom qualifié peut être basé sur la topologie, dépendre du nom du cluster ou d'un serveur unique ou d'un noeud contenant l'objet.
Vous pouvez définir les noms qualifiés fixes pour les objets. Avec des noms qualifiés, les objets résidant sur différents serveurs peuvent être recherchés à partir du même contexte initial en parcourant la structure de l'espace de nom système. Il est également possible d'utiliser un nom non qualifié, mais celui-ci sera uniquement résolu sur le serveur de noms associé au serveur d'applications de l'objet.
CosNaming.resolve (resolve_str) et ORB.string_to_object
Avec le contexte initial de l'un des serveurs de noms d'une cellule WebSphere Application Server, vous pouvez rechercher un objet CORBA à l'aide d'un nom qualifié. Vous n'avez pas besoin d'autres informations d'hôte et de port pour le serveur de noms de l'objet cible.
Un objet peut également être recherché par appel de la méthode string_to_object sur l'ORB, en transmettant une URL corbaname. Généralement, une URL de type IIOP est spécifiée pour que les informations concernant l'adresse d'amorce requises pour un contexte initial soient contenues dans l'URL. Vous pouvez utiliser un nom qualifié ou non qualifié, converti en chaîne, mais un nom non qualifié sera uniquement résolu si le contexte initial est celui du serveur de noms auquel l'objet est lié.
Les exemples suivants montrent des opérations de résolution CosNaming utilisant des noms de recherche qualifiés basés sur la topologie et un nom de recherche non qualifié.
Opération de résolution CosNaming utilisant un nom qualifié
Le nom qualifié basé sur la topologie d'un objet varie selon que l'objet est lié à un seul serveur ou à un cluster de serveurs. Des exemples sont fournis ci-après pour chacun des cas.
Serveur unique
L'exemple suivant porte sur la recherche d'une interface home d'EJB exécutée dans un seul serveur. Le bean enterprise recherché s'exécute sur le serveur MyServer du noeud Node1.
// Obtenir le contexte initial comme illustré dans l'exemple précédent
// En utilisant la forme du nom de recherche ci-dessous, peu importe le
// serveur de la cellule utilisé pour obtenir le contexte initial.
...
// Recherche de l'interface de foyer avec le nom sous lequel le foyer EJB est lié
org.omg.CORBA.Object ejbHome = initialContext.resolve_str(
"cell/nodes/Node1/servers/MyServer/mycompany/accounting/AccountEJB");
accountHome =
(AccountHome)javax.rmi.PortableRemoteObject.narrow(ejbHome, AccountHome.class);
Cluster de serveurs
L'exemple suivant porte sur la recherche d'une interface home d'EJB exécutée dans un cluster. Le bean enterprise recherché s'exécute dans le cluster Cluster1. Le nom ne peut être résolu que si l'un des membres du cluster est en cours de fonctionnement.
// Obtenir le contexte initial comme illustré dans l'exemple précédent
// En utilisant la forme du nom de recherche ci-dessous, peu importe le
// serveur de la cellule utilisé pour obtenir le contexte initial.
...
// Recherche de l'interface de foyer avec le nom sous lequel le foyer EJB est lié
org.omg.CORBA.Object ejbHome = initialContext.resolve_str(
"cell/clusters/Cluster1/mycompany/accounting/AccountEJB");
accountHome =
(AccountHome)javax.rmi.PortableRemoteObject.narrow(ejbHome, AccountHome.class);
Opération ORB string_to_object avec un nom non qualifié converti en chaîne
Si l'opération de résolution est exécutée sur le serveur de noms contenant l'objet, l'espace de nom système n'a pas à être traversé et vous pouvez utiliser un nom de recherche non qualifié. Notez que ce nom ne peut pas être résolu sur d'autres serveurs de noms. Si un nom non qualifié est utilisé, la clé d'objet doit être NameServiceServerRoot afin que le contexte initial correct soit sélectionné. Si un nom qualifié est fourni, la clé par défaut NameService peut être utilisée.
L'exemple ci-dessous illustre la recherche d'une interface home d'EJB. Le bean enterprise recherché est lié au serveur de noms exécuté sur l'hôte myHost et dont le port est 2809. Notez la clé d'objet NameServiceServerRoot.
// Supposons que l'orb est une instance d'orb existant
...
// Recherche de l'interface de foyer avec le nom sous lequel le foyer EJB est lié
org.omg.CORBA.Object ejbHome =
orb.string_to_object(
"corbaname:iiop:myHost:2809/NameServiceServerRoot#mycompany/accounting");
accountHome =
(AccountHome)javax.rmi.PortableRemoteObject.narrow(ejbHome, AccountHome.class);