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

How to find InitialContext details in WebSphere?

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

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

我的问题是:

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

javax.naming.NameNotFoundException: Name "EjbSample" not found in context "serverlocal:CELLROOT/SERVERROOT

以下知识中心页面讨论了通过 Provider 获取 InitialContextURL: https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rnam_example_prop2.html

上面写着 "A provider URL contains bootstrap server information that the initial context factory can use to obtain an initial context."

可以通过管理控制台或 serverindex.xml 文件找到特定服务器的 bootstrap 端口信息。这些端口值可能因节点而异,具体取决于在安装或将节点 and/or 服务器添加到 Cell 期间使用的设置。

管理控制台:

serverindex.xml:

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

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

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

如果您的客户端 (servlet) 部署在同一个 server/cluster 上,只需使用默认 InitialContext 构造函数,如下所示。默认情况下,将提供正确的参数。如果您的客户端与 EJB 位于不同的单元格上,您只需要定义这些。

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

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

@EJB
EjbSample ejb;

并在安装后绑定对 JNDI 名称的引用 during/or。

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

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

还有其他选择,您可以使用此 link 作为其他选择。