如何在 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){ ... }
}
我的问题是:
我在哪里可以找到 iiop//host:port
连接 EJB 的主机和端口。 WebSphere 管理控制台中的某处?任何配置文件?
因为我有 3 个节点设置。我在每个节点中有 2 个名为 ClusterServlet 和 ClusterEJB 的集群。 IIOP 主机和端口会因节点而异,还是在两个节点之间保持一致?
[编辑 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 期间使用的设置。
管理控制台:
- 见https://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/urun_rendpoint_inst.html
遵循路径 服务器 > 服务器类型 > WebSphere 应用程序服务器 > server_name > 端口
BOOTSTRAP_ADDRESS
端口是 Provider URL 中要使用的端口。
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 作为其他选择。
我正在设置一个访问部署的 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){ ... }
}
我的问题是:
我在哪里可以找到
iiop//host:port
连接 EJB 的主机和端口。 WebSphere 管理控制台中的某处?任何配置文件?因为我有 3 个节点设置。我在每个节点中有 2 个名为 ClusterServlet 和 ClusterEJB 的集群。 IIOP 主机和端口会因节点而异,还是在两个节点之间保持一致?
[编辑 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 期间使用的设置。
管理控制台:
- 见https://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/urun_rendpoint_inst.html
遵循路径 服务器 > 服务器类型 > WebSphere 应用程序服务器 > server_name > 端口
BOOTSTRAP_ADDRESS
端口是 Provider URL 中要使用的端口。
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 作为其他选择。