Hallo zusammen,
Versuche mich gerade an meiner ersten RMI-Anwendung, bekomme allerdings eine Fehlermeldung.
Es soll ein einfaches Pong werden, bei dem ich eine Nachricht an ein anderes Objekt aus einer anderen VM geben möchte.
Mein Interface:
Programm versucht eine Registry zu finden und das Objekt dann dort zu registrieren.
Wenn es keine findet, wird eine neue gestartet und das Objekt dann dort registriert.
Wenn dann 2 Objekte in der Registry sind, soll das letzte Objekt die Funktion vom Objekt pongmaster aufrufen.
Allerdings bekomme ich beim casten dann die Meldung:
java.lang.ClassCastException: $Proxy0 cannot be cast to example.PongInterface
Alle Klassen sind im selben Package und im selben Projekt.
Kann mir das nicht ganz erklären.
Jemand da eine Ahnung?
Versuche mich gerade an meiner ersten RMI-Anwendung, bekomme allerdings eine Fehlermeldung.
Es soll ein einfaches Pong werden, bei dem ich eine Nachricht an ein anderes Objekt aus einer anderen VM geben möchte.
Mein Interface:
Java:
package example;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface PongInterface {
void pong(String message, String sender);
}
Java:
package example;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;
public class RMIServer extends java.rmi.server.UnicastRemoteObject
implements PongInterface
{
int thisPort;
String name;
Registry registry; // rmi registry for lookup the remote objects.
public RMIServer() throws RemoteException
{ name = "Pongmaster";
thisPort=3232;
try{
registry = LocateRegistry.getRegistry(thisPort);
int pongfreunde = registry.list().length;
pongfreunde++;
name += pongfreunde;
registry.rebind(name, this);
System.out.println(name+" is also online");
}
catch(RemoteException e){
try {
registry = LocateRegistry.createRegistry( thisPort );
registry.rebind(name, this);
System.out.println("Pongmaster is online");
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
static public void main(String args[])
{
try{
RMIServer s=new RMIServer();
String[] pongfreunde = s.registry.list();
if(pongfreunde.length>1){
PongInterface pongfriend = (PongInterface) s.registry.lookup("Pongmaster");
pongfriend.pong("Ping", s.name);
}}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
@Override
public void pong(String message, String sender) {
System.out.println("Thanks "+sender +"for "+message);
}
}
Programm versucht eine Registry zu finden und das Objekt dann dort zu registrieren.
Wenn es keine findet, wird eine neue gestartet und das Objekt dann dort registriert.
Wenn dann 2 Objekte in der Registry sind, soll das letzte Objekt die Funktion vom Objekt pongmaster aufrufen.
Allerdings bekomme ich beim casten dann die Meldung:
java.lang.ClassCastException: $Proxy0 cannot be cast to example.PongInterface
Alle Klassen sind im selben Package und im selben Projekt.
Kann mir das nicht ganz erklären.
Jemand da eine Ahnung?