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:
[code=Java]package example;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface PongInterface {
void pong(String message, String sender);
}
[/code]
[code=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);
}
}[/code]
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?