Pregunta

Estoy tratando de construir una aplicación RMI-IIOP (chat muy simple). Necesito servidor para poder comunicarme con el cliente, por lo que mi pensamiento fue crear una interfaz de usuario conectado:

public interface UserInterface extends Remote { 
    public void receiveMessage(String message) throws RemoteException;
}

Luego, en el lado del cliente, cree la clase de usuario con métodos que el servidor puede ejecutar ('ReceptiveMessage'):

public class User extends PortableRemoteObject implements UserInterface {

    protected User() throws RemoteException {
        super();
    }

    @Override
    public void receiveMessage(String message) throws RemoteException {
        client.addMessageToGUI();
    }
}

yo suelo rmic -iiop Chat User que genera _Chat_Tie.class _ChatInterface_Stub.class _User_Tie.class _UserInterface_Stub.class

Después de colocar todos los archivos en el lado del servidor y el lado del cliente y ejecutar la aplicación, recibo el siguiente error:java.rmi.StubNotFoundException: Stub class not found: User_Stub; nested exception is:

Supongo que la diferencia aquí es que la clase de chat se crea en el servidor y luego el cliente lo usa usando la interfaz (que funciona bien), pero la clase de usuario debe crearse en el lado del cliente, por lo que el cliente funciona en parte como un servidor.

Mi pregunta es similar a Java RMI: hacer del cliente un servidorpero para la implementación de RMI-IOOP.

Entonces, en palabras: ¿cómo puedo enviar referencia de objetos locales al servidor para que pueda realizar operaciones en él?

¡Gracias! Leontado

¿Fue útil?

Solución 2

Lo que me faltaba es la clase de "atar" en el lado del cliente (_user_tie.class). Por lo general, no es necesario, pero en caso de que el objeto se cree en el lado del cliente, también necesitaba suministrarlo.

Espero que ahorre algo de tiempo para alguien más en un futuro :)

Otros consejos

crea una interfaz de servidor como:

public interface ChatServer extends Remote {
  public void registerUser(UserInterface user) throws RemoteException;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top