Взаимодействие между веб-сервером RMI - PullRequest
0 голосов
/ 10 декабря 2011

У меня есть сервер TCP / RMI для связи с веб-сервером под управлением Apache tomcat, и вся информация, например, о клиентах, хранится на сервере TCP / RMI. Все это делается в Java (сокеты tcp, Java RMI, сервлеты, JavaBeans, JSP, комета).

Связь между двумя серверами осуществляется RMI.

Веб-клиенты отправляют запросы на веб-сервер http, который перенаправляет их на сервер TCP / RMI. Пока все хорошо.

Проблема в обратной связи, сервер TCP / RMI к веб-серверу. Поскольку соединение между серверами выполняется RMI, вы можете отправить обратный вызов веб-сервером, как это происходит для асинхронной связи между клиентом и сервером. Rmi?

С уважением, Андре

1 Ответ

0 голосов
/ 10 декабря 2011

Это возможно для двухсторонней связи, предоставляя объект обратного вызова, который может вызвать сервер.Вы также можете просто запустить 2 сервера RMI.1 на вашем сервере TCP, а другой 1 на вашем Tomcat.Таким образом, также создание двунаправленной линии связи.Вы можете использовать статические методы и контекстный прослушиватель, чтобы запустить сервер RMI на вашем TomCat.

В настоящее время я работаю над аналогичным проектом с Glassfish, двусторонней связью RMI, Comet и другими.Это мой класс RMI-сервера в веб-приложении.Может дать вам вдохновение.

package RMI.WS;

import ILWS.Controller.Comet.CometServlet;
import Logging.DSLogger;
import RMI.DSRMI;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

/**
 *
 * @author roy
 */
public class RMIServer implements Runnable {

    private static final String rmiPath = "ILWServlet";
    private static final String ClientrmiPath = "ILDS";
    private static RemoteInteractor interactor;
    private static DSRMI rmiClient;
    private static RMIServer rmi;
    private static int rmiPort;

    public static void startRMI() {
        rmiPort = 6666;
        try {
            interactor = new RemoteInteractor();
            LocateRegistry.createRegistry(rmiPort).rebind(rmiPath, interactor);
            DSLogger.Debug(RMIServer.class, "creating new RMI Registry");
        } catch (Exception ex) {
            DSLogger.Log(RMIServer.class, ex.getMessage());
        }
    }

    public static void stopRMI() {
        try {
            LocateRegistry.getRegistry("127.0.0.1", rmiPort).unbind("ILWServlet");
            DSLogger.Debug(RMIServer.class, "removing RMI Registry");
        } catch (Exception ex) {
            DSLogger.throwableLog(RMIServer.class, ex);
        }
    }

    public static DSRMI getClientRMI() {
        if (rmiClient == null) {
            try {
                rmiClient = (DSRMI) LocateRegistry.getRegistry("127.0.0.1", 6665).lookup(ClientrmiPath);
            } catch (NotBoundException ex) {
                DSLogger.throwableLog(RMIServer.class, ex);
            } catch (Exception ex) {
                DSLogger.throwableLog(RMIServer.class, ex);
            }
        }
        return rmiClient;
    }  
}
...