如何在WebSphere中查找InitialContext详细信息?

时间:2019-07-29 17:31:18

标签: ejb websphere websphere-8 iiop

我正在设置一个访问已部署EJB的servlet客户端。在WebSphere 8.5上的2节点设置中部署了EJB。在每台服务器上,我将部署访问EJB的Servlet。人们将连接到Servlet,内部将连接到EJB并返回响应。

要访问EJB,我需要初始化上下文。我相信代码看起来像是下面几行。

 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){ ... } 
  }

我的问题是:

  • 在哪里可以找到iiop//host:port主机和端口以连接EJB。 WebSphere管理控制台中的某个地方?任何配置文件?

  • 因为我有3个节点设置。我在每个节点中都有两个名称分别为ClusterServlet和ClusterEJB的集群。 IIOP主机和端口会在节点之间变化还是在两个节点之间保持一致?

[编辑1]:当我尝试从运行WAS的同一主机访问EJB时,出现以下错误

  

javax.naming.NameNotFoundException:在上下文“ serverlocal:CELLROOT / SERVERROOT

”中找不到名称“ EjbSample”

3 个答案:

答案 0 :(得分:1)

下面的KnowledgeCenter页面讨论了如何通过ProviderURL获取InitialContext: https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rnam_example_prop2.html

它说明“提供者URL包含引导服务器信息,初始上下文工厂可以使用该信息来获取初始上下文。”

人们可以通过管理控制台或serverindex.xml文件找到特定服务器的引导程序端口信息。这些端口值在节点之间可能会有所不同,具体取决于在将节点和/或服务器添加到单元中或在单元中添加节点和/或服务器时使用的设置。

管理控制台:

serverindex.xml:

    WAS_HOME / profiles / serverProfile / config / cells / cellName / nodes / 的每个服务器节点上找到
  • nodeName

  • 包含节点上每个服务器及其服务器端口的列表。

  • endPointName="BOOTSTRAP_ADDRESS"包含所需的端口

答案 1 :(得分:1)

如果您的客户端(servlet)部署在同一服务器/群集上,则只需使用默认的InitialContext构造函数,如下所示。默认情况下,将提供正确的参数。如果您的客户端与EJB位于不同的单元上,则仅需要定义它们。

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

此外,如果您使用的是JavaEE 6,7,8,则可以像这样注入EJB:

@EJB
EjbSample ejb;

并在安装过程中/之后将引用绑定到JNDI名称。

答案 2 :(得分:0)

有多种方法可以在Websphere中获取InitialContext,下面将详细介绍其中一种。

您可以使用如下所示的Cobra Object Link进行操作。

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);

CORBA对象URL可以包含多个引导地址。尝试从服务器群集获取初始上下文时,可以使用此功能。您可以在URL中为群集中的所有服务器指定引导地址。如果至少有一台服务器正在运行,则该操作成功,从而消除了单点故障。不保证将以任何特定顺序处理地址列表。例如,即使列表中第一个引导程序地址处的服务器可用,第二个引导程序地址也可用于获取初始上下文。

还有其他选择,您可以将此link用于其他选择。