如何修复 Websphere Liberty 中的远程 ejb 查找?
How to fix remote ejb lookup in Websphere Liberty?
我正在尝试访问部署在 websphere liberty 18.0.0.3 上的 ejb
绑定位置为:java:global/ITSORemote/ITSORemoteEJB/HelloRemoteEJB!com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote
我在 server.xml 中的 ORB 配置是:
<orb nameService="corbaname::<ipaddress>:2809" iiopEndpointRef="defaultIiopEndpoint">
<iiopEndpoint host= id="defaultIiopEndpoint" iiopPort="2809">
</iiopEndpoint>
</orb>
我还在功能管理器中添加了 ejbRemote-3.2
我有两种情况:
1。从同一台服务器上的客户端代码 运行 访问 ejb - 这可以使用 url java:global/ITSORemote/ITSORemoteEJB/HelloRemoteEJB!com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote
2。从不同服务器上的客户端代码 运行 访问 ejb - 使用 url 这不起作用
corbaname::(ipaddress):2809#ejb/global/ITSORemote/ITSORemoteEJB/HelloRemoteEJB!com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote
我正在使用以下代码进行查找:
package com.ibm.remoteaccess;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Hashtable;
import javax.ejb.EJB;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote;
/**
* Servlet implementation class RemoteAccess
*/
@WebServlet("/RemoteAccess")
public class RemoteAccess extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
out.println("Hi");
Context ctx = new InitialContext();
Object ejbBusIntf = ctx.lookup("java:global/ITSORemote/ITSORemoteEJB/HelloRemoteEJB!com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote");
HelloRemoteEJBRemote bean = (HelloRemoteEJBRemote)PortableRemoteObject.narrow(ejbBusIntf, HelloRemoteEJBRemote.class);
out.println(bean.hello());
}
catch (NamingException e) { // Error getting the business interface
out.println(e);
}
}
}
控制台中也没有抛出错误。可能是什么问题?
open-liberty 中有一个功能验收测试 (FAT),它从一个 liberty 服务器上查找远程 EJB 到第二个 liberty 服务器上的 EJB。具体测试可以看这里:
每个服务器进程都包含 ejbRemote-3.2
功能和一个 iiopEndpoint 配置(不同的端口,因为测试运行都服务于同一主机)。
如果您没有看到任何错误,则可能是客户端服务器中的 iiopEndpoint 配置不正确(因为没有它 ORB 将无法启动)。例如,默认的 iiop 端口是 2809,如果两个服务器都在同一台主机上,那么它们就不能同时使用该端口。将两台服务器设置为同一端口会导致 ORB 在其中一台服务器上无法正常启动,并且查找会失败。
跨服务器查找将使用 corbaname
,您指定的值似乎是正确的。
我正在尝试访问部署在 websphere liberty 18.0.0.3 上的 ejb
绑定位置为:java:global/ITSORemote/ITSORemoteEJB/HelloRemoteEJB!com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote
我在 server.xml 中的 ORB 配置是:
<orb nameService="corbaname::<ipaddress>:2809" iiopEndpointRef="defaultIiopEndpoint">
<iiopEndpoint host= id="defaultIiopEndpoint" iiopPort="2809">
</iiopEndpoint>
</orb>
我还在功能管理器中添加了 ejbRemote-3.2
我有两种情况: 1。从同一台服务器上的客户端代码 运行 访问 ejb - 这可以使用 url java:global/ITSORemote/ITSORemoteEJB/HelloRemoteEJB!com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote 2。从不同服务器上的客户端代码 运行 访问 ejb - 使用 url 这不起作用 corbaname::(ipaddress):2809#ejb/global/ITSORemote/ITSORemoteEJB/HelloRemoteEJB!com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote
我正在使用以下代码进行查找:
package com.ibm.remoteaccess;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Hashtable;
import javax.ejb.EJB;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote;
/**
* Servlet implementation class RemoteAccess
*/
@WebServlet("/RemoteAccess")
public class RemoteAccess extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
out.println("Hi");
Context ctx = new InitialContext();
Object ejbBusIntf = ctx.lookup("java:global/ITSORemote/ITSORemoteEJB/HelloRemoteEJB!com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote");
HelloRemoteEJBRemote bean = (HelloRemoteEJBRemote)PortableRemoteObject.narrow(ejbBusIntf, HelloRemoteEJBRemote.class);
out.println(bean.hello());
}
catch (NamingException e) { // Error getting the business interface
out.println(e);
}
}
}
控制台中也没有抛出错误。可能是什么问题?
open-liberty 中有一个功能验收测试 (FAT),它从一个 liberty 服务器上查找远程 EJB 到第二个 liberty 服务器上的 EJB。具体测试可以看这里:
每个服务器进程都包含 ejbRemote-3.2
功能和一个 iiopEndpoint 配置(不同的端口,因为测试运行都服务于同一主机)。
如果您没有看到任何错误,则可能是客户端服务器中的 iiopEndpoint 配置不正确(因为没有它 ORB 将无法启动)。例如,默认的 iiop 端口是 2809,如果两个服务器都在同一台主机上,那么它们就不能同时使用该端口。将两台服务器设置为同一端口会导致 ORB 在其中一台服务器上无法正常启动,并且查找会失败。
跨服务器查找将使用 corbaname
,您指定的值似乎是正确的。