[英]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。 具體測試可以在這里找到:
每個服務器進程都包括ejbRemote-3.2
功能和iiopEndpoint配置(不同的端口,因為測試運行都在同一主機上運行)。
如果您沒有看到任何錯誤,那么可能在客戶端服務器中未正確配置iiopEndpoint(因為如果沒有它,ORB將無法啟動)。 例如,默認的iiop端口是2809,如果兩個服務器都在同一主機上,則它們不能同時使用該端口。 將兩個服務器設置為同一端口將導致ORB無法在其中一個服務器上正常啟動,並且查找將失敗。
跨服務器的查找將使用corbaname
,並且您指定的值似乎是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.