如何在Websphere Liberty中修复远程ejb查找?

问题描述 投票:0回答:1

我正在尝试访问部署在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);
         }
    }

}

控制台中也没有抛出任何错误。可能是什么问题呢?

ejb ejb-3.0 websphere-liberty ejb-3.1
1个回答
0
投票

在open-liberty中有一个功能验收测试(FAT),它将远程EJB从一个自由服务器查找到第二个自由服务器上的EJB。具体测试可以在这里找到:

https://github.com/OpenLiberty/open-liberty/blob/master/dev/com.ibm.ws.ejbcontainer.remote_fat/test-applications/RemoteClientWeb.war/src/com/ibm/ws/ejbcontainer/remote/client/web/RemoteTxAttrServlet.java

每个服务器进程都包括ejbRemote-3.2功能和iiopEndpoint配置(不同的端口,因为测试运行都在同一主机上运行)。

https://github.com/OpenLiberty/open-liberty/blob/master/dev/com.ibm.ws.ejbcontainer.remote_fat/publish/servers/com.ibm.ws.ejbcontainer.remote.fat.RemoteServerClient/server.xml

如果您没有看到任何错误,那么可能在客户端服务器中未正确配置iiopEndpoint(因为如果没有它,ORB将无法启动)。例如,默认的iiop端口是2809,如果两个服务器都在同一主机上,则它们不能同时使用该端口。将两个服务器设置为同一端口将导致ORB无法在其中一个服务器上正常启动,并且查找将失败。

跨服务器的查找将使用corbaname,并且您指定的值似乎是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.