2

我正在设置一个访问已部署 EJB 的 servlet 客户端。EJB 部署在 2 节点设置中WebSphere 8.5。在每台服务器上,我将部署访问 EJB 的 Servlet。人们将连接到内部将连接到 EJB 并返回响应的 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){ ... } 
  }

我的问题是:

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

  • 因为我有 3 个节点设置。我在每个节点中有 2 个名为 ClusterServlet 和 ClusterEJB 的集群。IIOP 主机和端口会因节点而异,还是在两个节点之间是一致的?

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

javax.naming.NameNotFoundException:在上下文“serverlocal:CELLROOT/SERVERROOT”中找不到名称“EjbSample”

4

3 回答 3

1

以下知识中心页面讨论了通过 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可以通过管理控制台或文件找到特定服务器的引导端口信息。这些端口值可能因节点而异,具体取决于安装期间使用的设置或将节点和/或服务器添加到单元中。

管理控制台:

服务器索引.xml:

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

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

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

于 2019-07-29T19:24:09.283 回答
1

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

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

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

@EJB
EjbSample ejb;

并在安装期间/或之后绑定对 JNDI 名称的引用。

于 2019-07-29T20:13:09.333 回答
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 中指定集群中所有服务器的引导地址。如果至少有一个服务器正在运行,则操作成功,消除了单点故障。不保证处理地址列表的任何特定顺序。例如,即使列表中第一个引导地址处的服务器可用,第二个引导地址也可用于获取初始上下文。

还有其他选项可以做到这一点,您可以使用此链接获取其他选项。

于 2019-08-29T08:12:11.420 回答