2
votes

Comment trouver les détails d'InitialContext dans WebSphere?

Je travaille sur la configuration d'un client de servlet qui accède aux EJB déployés. Les EJB sont déployés dans une configuration à 2 nœuds sur WebSphere 8.5 . Sur chaque serveur, je déploierai des servlets qui accèdent aux EJB. Les gens se connecteront au Servlet dont l'interne se connectera à l'EJB et renverra la réponse.

Pour accéder à l'EJB, je dois initialiser le contexte. Je crois que le code ressemble à quelque chose autour des lignes.

 private void doSomething()  {      
      Hashtable env = new Hashtable(); 
      env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"); 
      env.put(Context.PROVIDER_URL,"iiop//host:port"); 
      Object obj;      
      try{ 
            InitialContext ctx = new InitialContext(env); 
            obj =  ctx.lookup("EjbSample");       
      } catch(Exception ne){ ... } 
  }

Mes questions ici sont:

  • où puis-je trouver l'hôte et le port iiop // hôte: port pour connecter EJB. Quelque part dans WebSphere Admin Console? Un fichier de configuration?

  • Comme j'ai une configuration à 3 nœuds. J'ai 2 clusters avec le nom ClusterServlet et ClusterEJB dans chaque nœud. L'hôte et le port IIOP varieront-ils d'un nœud à l'autre ou sont-ils cohérents sur les deux nœuds?

[Edit 1]: Lorsque j'essaie d'accéder à EJB à partir du même hôte sur lequel WAS est en cours d'exécution, j'obtiens l'erreur suivante

javax.naming.NameNotFoundException: Nom "EjbSample" introuvable dans le contexte "serverlocal: CELLROOT / SERVERROOT


1 commentaires

Si l'une des réponses données suffit à votre besoin, vous pouvez l'accepter comme réponse.


3 Réponses :


1
votes

La page KnowledgeCenter suivante traite de l'obtention d'un InitialContext via une ProviderURL: https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rnam_example_prop2.html

Il indique "Une URL de fournisseur contient des informations sur le serveur d'amorçage que la fabrique de contexte initial peut utiliser pour obtenir un contexte initial."

On peut trouver les informations de port d'amorçage pour un serveur particulier via la console d'administration ou le fichier serverindex.xml . Ces valeurs de port peuvent varier d'un nœud à l'autre en fonction des paramètres utilisés lors de l'installation ou de l'ajout de nœuds et / ou de serveurs dans la cellule.

Console d'administration:

< serverindex.xml:

  • trouvé sur chaque nœud de serveur à WAS_HOME / profiles / serverProfile / config / cells / cellName / nodes / nodeName

  • Contient une liste de chaque serveur sur le nœud et leurs ports de serveur.

  • endPointName = "BOOTSTRAP_ADDRESS" contient le port souhaité


5 commentaires

Merci. Je vais essayer aujourd'hui.


J'ai essayé d'utiliser le port de serverindex.xml mais j'obtiens une exception d'hôte ou de port incorrecte.


Pouvez-vous envoyer une requête ping à l'adresse IP: port de la machine à laquelle vous essayez de vous connecter? Quel est le texte d'exception exact / le haut de la pile? S'il s'agit d'une nouvelle installation / test, les ports du serveur ont-ils été ouverts sur le pare-feu (s'il y a un pare-feu)?


la machine est accessible à distance.


pouvez-vous donner l'exception complète et les informations de pile de l'exception telle qu'elle se présente actuellement?



1
votes

Si votre client (servlet) est déployé sur le même serveur / cluster, utilisez simplement le constructeur InitialContext par défaut, comme ci-dessous. Par défaut, les paramètres corrects seront fournis. Vous n'avez besoin de les définir que si votre client est sur une cellule différente des EJB.

@EJB
EjbSample ejb;

De plus, si vous utilisez JavaEE 6,7,8, vous pouvez simplement injecter votre EJB comme:

InitialContext ctx = new InitialContext(); 
obj =  ctx.lookup("EjbSample");    

et lie la référence au nom JNDI pendant / ou après l'installation.


0 commentaires

0
votes

Il existe différentes manières d'obtenir l'InitialContext dans Websphere et l'une d'entre elles est détaillée ci-dessous.

Vous pouvez le faire en utilisant Cobra Object Link comme indiqué ci-dessous.

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
     "com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, "corbaloc:iiop:myhost.mycompany.com:2809");
Context initialContext = new InitialContext(env);

Les URL d'objets CORBA peuvent contenir plusieurs adresses d'amorçage. Vous pouvez utiliser cette fonctionnalité lorsque vous tentez d'obtenir un contexte initial à partir d'un cluster de serveurs. Vous pouvez spécifier les adresses d'amorçage pour tous les serveurs du cluster dans l'URL. L'opération réussit si au moins un des serveurs est en cours d'exécution, éliminant ainsi un point de défaillance unique. Il n'y a aucune garantie d'un ordre particulier dans lequel la liste d'adresses sera traitée. Par exemple, la deuxième adresse d'amorçage peut être utilisée pour obtenir le contexte initial même si le serveur à la première adresse d'amorçage de la liste est disponible.

Il existe également d'autres options pour le faire et vous pouvez utiliser ce lien pour d'autres options.


0 commentaires