Eigene Objekte per RMI übergeben

Bud

Aktives Mitglied
Hallo Leute! 😉

Ich habe eine kleine RMI-Anwendung programmiert. Jetzt möchte ich eigene Klassen definieren und Objekte dieser Klasse als Rückgabewerte übergeben.

Sowohl auf dem Server als auch auf dem Client habe ich einfach die Klasse definiert. Ich kann Innerhalb des Servers auf die Objekte und die die zugehörigen Methoden problemlos zugreifen.

Wenn ich aber auf dem Client auf die Methode "WERT.AUTO" des Servers zugreifen will, gibt es als Rückgabewert nur ein "NULL".

Server:

Java:
import java.rmi.*;

public interface SampleServer extends Remote 
{
 public mv WERT (int zeile) throws RemoteException;
}

Java:
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;

public class SampleServerImpl extends UnicastRemoteObject implements SampleServer
{
  SampleServerImpl() throws RemoteException{ super(); }

public mv WERT (int zeile) throws RemoteException{
	mv rueckgabe = null;
	rueckgabe.AUTO="22";
	System.out.println(rueckgabe.AUTO); // Ausgabe ist ok : 22			
	return rueckgabe;
 }			

  public static void main(String args[]) {
    //set the security manager
    try {
      //  System.setSecurityManager(new RMISecurityManager());
        SampleServerImpl Server = new SampleServerImpl();
        LocateRegistry.createRegistry(1080);
        Naming.rebind("SAMPLE-SERVER" , Server);
        System.out.println("Server waiting.....");
      }
    catch (java.net.MalformedURLException me){System.out.println("Malformed URL: " + me.toString());}
    catch (RemoteException re){ System.out.println("Remote exception: " + re.toString()); }
  }
}

Client:

Java:
import java.rmi.*;

public interface SampleServer extends Remote 
{
 public mv WERT (int zeile) throws RemoteException;
}

Java:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.rmi.Naming;
import java.rmi.RemoteException;


public class Client extends Applet {
  public void main () {

	      try  
	        {  
	          System.out.println("Security Manager loaded");  
	          String url = "//192.168.1.191/SAMPLE-SERVER";  
	          SampleServer remoteObject = (SampleServer)Naming.lookup(url);  
	          System.out.println("Got remote object");  
	          System.out.println(remoteObject.WERT(0).AUTO); // VERFLIXT: HIER WIRD NUR "NULL" AUSGEGEBEN.
	          
	        }  
	      catch (RemoteException exc)   { System.out.println("Error in lookup: " + exc.toString());   }  
	      catch (java.net.MalformedURLException exc)  {  System.out.println("Malformed URL: " + exc.toString());  }  
	      catch (java.rmi.NotBoundException exc)  { System.out.println("NotBound: " + exc.toString());  }  
    } //main

}



Sowohl Client als auch Server haben die folgende Klasse im Ordner /src

Java:
class mv
{
 static String AUTO; 
 static String FAHRER; 
}

Was mache ich falsch?
 
Warum sind "AUTO" und "FAHRER" deiner mv-Klasse static? (Von den Conding Conventions mal abgesehen).
Die mv-Objekte haben Daten, da es keine Member-Attribute gibt. Lass also das static weg. Außerdem muss die Klasse serializable sein.
 
Hey tfa,

vielen Dank für die Hinweise. Genau das war es. Die Klasse muss "serializable" sein - dann kann sie auch übertragen werden. Und static ist natürlich nicht nötig!

1000Dank! 🙂
 

Zurück
Oben