Это возможно для двухсторонней связи, предоставляя объект обратного вызова, который может вызвать сервер.Вы также можете просто запустить 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;
}
}