簡體   English   中英

如何在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),它將遠程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/客戶端/網絡/ 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 ,並且您指定的值似乎是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM