我正在设置一个访问已部署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”
答案 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
文件找到特定服务器的引导程序端口信息。这些端口值在节点之间可能会有所不同,具体取决于在将节点和/或服务器添加到单元中或在单元中添加节点和/或服务器时使用的设置。
管理控制台:
遵循路径服务器>服务器类型> WebSphere应用程序服务器> 服务器名称>端口
BOOTSTRAP_ADDRESS
端口是提供程序URL中要使用的端口。
serverindex.xml:
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用于其他选择。