Как исправить удаленный поиск ejb в Websphere Liberty? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь получить доступ к ejb, развернутому на Websphere Liberty 18.0.0.3

Место привязки: java: global / ITSORemote / ITSORemoteEJB / HelloRemoteEJB! Com.ibm.itso.ejbRemote.view.HelloRemoteEJBRemote

Моя конфигурация ORB в файле server.xml:

 <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 / глобальный / 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);
         }
    }

}

В консоль также не выдается ошибка. В чем может быть проблема?

1 Ответ

0 голосов
/ 27 апреля 2019

В открытом доступе существует функциональный приемочный тест (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, и указанное вами значение будет отображаться какбудь прав.

...