RMI wie kann ich objekte übergeben?

Status
Nicht offen für weitere Antworten.

Anselmus

Bekanntes Mitglied
hi folks,

wie kann ich denn mit RMI objekte der implementierenden klasse übergeben?

also mal ein beispiel um das problem zu verdeutlichen:

interface:
Code:
package examples.car;


import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface carIFace extends Remote {
	int setCar() throws RemoteException;
	int showCar() throws RemoteException;		
}

implementierende klasse:
Code:
package examples.car;


import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
//import java.rmi.MarshalledObject;
import java.rmi.server.UnicastRemoteObject;
import java.io.*;

public class carImpl extends UnicastRemoteObject implements carIFace{
	
	String carName;
	String topV;
	
	public carImpl() throws RemoteException
	{
		super();
	}
	
	public int setCar()
	{
		System.out.println("Name:");
		try
		{
			BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
			carName = input.readLine();
			System.out.println("Top Speed:");
			topV = input.readLine();
			return 0;
		}
		catch (Exception e)
		{
			System.out.println("Input Error");
			return -1;
		}
	}
	
	public int showCar()
	{
		System.out.println("Name: " + carName);
		System.out.println("Top V: " + topV);
		return 0;
		
	}
	
	public static void main(String[]args)
	{
		if(System.getSecurityManager() == null)
		{
			System.setSecurityManager(new RMISecurityManager());
		}
		try
		{
			carImpl a_object = new carImpl();
			Naming.rebind("//localhost/CarServer", a_object);
			System.out.println("CarServer is now registered");
		}
		catch (Exception e)
		{
				System.out.println("Unable to register CarServer");
		}
	}
}


jetzt will ich aber nicht nur eine methode mit rückgabewert benutzen, sondern will ein ganzes car-objekt zurückhaben, so daß ich auch zb setCar und showCar ausführen kann (die ja eigentlich keinen rückgabewert haben... ich hab denen mal int gegeben, weils halt das iface verlangt hat)...

wie kann ich das machen? habs mal mit marshalledobject probiert aber ich weiß nicht ob das der richtige weg ist...

viele grüße
stephan
 
G

Guest

Gast
Mach' das Ding serialisierbar und gut ist. Es muss sowohl clientseitig wie auch serverseitig bekannt sein (in classpath).
z.B.
Code:
public class Car implements Serializable {
  private static final long serialVersionUID = .....; 
  ...
  public Car() {
    ...
  }
  ...
}
Das Interface aus deinem Code würde ich noch überdenken.
Was soll man damit?
Code:
int setCar() throws RemoteException;
Es müsste schon irgendein Car übergeben werden. Bedenke, dass das ganze auf dem Server läuft und nicht auf dem Client.
Es sei dann, da sitzt einer und gibt ständig was über die Console ein. :lol:
 

zubi

Aktives Mitglied
Mach' das Ding serialisierbar und gut ist. Es muss sowohl clientseitig wie auch serverseitig bekannt sein (in classpath).

Dazu hab' ich eine Frage: Wenn ich eine abstrakte Klasse Test im Client definiere (welche Serializable implementiert), daraus die Klasse TestA ableite und von dieser eine Instanz an ein Remote-Objekt übergeben will, muss dem Server wie du schreibst die Klasse bekannt sein. Wieso genügt es nun nicht, dass ich ihm die abstrakte Klasse in den classpath lege? Die Methodenaufrufe auf dem Server sollen polymorph stattfinden, d.h. er erwartet ein Objekt vom Typ Test.

Ich erhalte folgende Exception:
Exception: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException


Muss ich mit einem Interface arbeiten, da somit sichergestellt wird, dass alle Schnittstellen implementiert werden oder sollte das mit meinem Ansatz funktionieren?

gruss
zubi
 

Bleiglanz

Gesperrter Benutzer
zubi hat gesagt.:
Mach' das Ding serialisierbar und gut ist. Es muss sowohl clientseitig wie auch serverseitig bekannt sein (in classpath).

Wieso genügt es nun nicht, dass ich ihm die abstrakte Klasse in den classpath lege? Die Methodenaufrufe auf dem Server sollen polymorph stattfinden, d.h. er erwartet ein Objekt vom Typ Test.

Weil Serialisierung auf Instanzebene arbeitet!

du kannst nicht eine Klasseninstanz x von X, die von der Klasse Y erbt in ein byte[] verwandeln, und dieses byte[] dann in ein Y deserialisieren...

Wenn Y abstrakt ist, dann erst recht -> denn von abstrakten Klassen gibts keine Instanzen
 

Anselmus

Bekanntes Mitglied
hatte das problem schon gelöst. wollt ih rnoch weiterdiskutieren, sonst mach ich ein häkchen dran...?
 
S

stev.glasow

Gast
Wenn das Problem gelöst wurde mach ruhig schon ein Häkchen ran, man kann ja auch mit Hälchen noch weiter posten.
So ist es zumndest gedacht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Eigene Objekte per RMI übergeben Netzwerkprogrammierung 2
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
T JSON-Objekte richtig parsen Netzwerkprogrammierung 8
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
C List Deserialisierung entfernt Objekte Netzwerkprogrammierung 2
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
V Socket Objekte werden nicht aktualisiert Netzwerkprogrammierung 2
S Socket Über UDP Objekte verschicken Netzwerkprogrammierung 9
S Kapselung der Netz-Objekte Netzwerkprogrammierung 3
B verschiedene Serialisierte Objekte identifizieren? Netzwerkprogrammierung 5
T Objekte im NIO unblocking mode versenden Netzwerkprogrammierung 11
C Socket ObjectInputStream liest nur Objekte der jeweiligen Programminstanz Netzwerkprogrammierung 5
G Frage zu Servlets und deren Objekte + Bilder in Servlets anzeigen? Netzwerkprogrammierung 11
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T Laufen Objekte, die vom Cajo-Server geliefert werden, lokal auf dem Client? Netzwerkprogrammierung 4
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
I Objekte über das Netzwerk Netzwerkprogrammierung 5
M Messenger - String oder Objekte Netzwerkprogrammierung 4
S Netzwerk und Objekte Netzwerkprogrammierung 5
S RMI 1.) Entfernte Objekte "Zwischenspeichern" 2.) Threadsicherheit Netzwerkprogrammierung 2
A Konflikt: Blocking und Non-Blocking bei Objekte versenden Netzwerkprogrammierung 4
N RMI und Datenbank Objekte Netzwerkprogrammierung 3
P Objekte über DatagramSocket versenden Netzwerkprogrammierung 12
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
M Objekte senden zwischen Java und PHP mit SOAP Netzwerkprogrammierung 9
A Objekte in übergebenen Objekten mit WebServices? Netzwerkprogrammierung 6
P Serialialiserte Objekte übers Netzwerk verschicken Netzwerkprogrammierung 9
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2
E Bilder übergeben Netzwerkprogrammierung 16
E Socket Werte mit DataInput- und Output- Stream übergeben Netzwerkprogrammierung 1
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
B Daten an Javaprogramm per URI Aufruf übergeben Netzwerkprogrammierung 7
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
L HTTP Daten an Server übergeben Netzwerkprogrammierung 2
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
M String an PHP Script aus Java übergeben Netzwerkprogrammierung 12
L Sockets übergeben Netzwerkprogrammierung 4
O Methoden vom Server zu Client übergeben Netzwerkprogrammierung 2
H Objekt von JSP an Servlet übergeben Netzwerkprogrammierung 4
P Buchstaben übergeben Netzwerkprogrammierung 12
C Webservice, ArrayList übergeben Netzwerkprogrammierung 3
A Streams per RMI übergeben Netzwerkprogrammierung 6
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
D wie kann ich rmic ein .jar file übergeben? Netzwerkprogrammierung 3
E In Webseite einloggen/ GET, POST an PHP-Script übergeben Netzwerkprogrammierung 2
M IP Adressen auslesen und in Windows/Linux übergeben Netzwerkprogrammierung 5

Ähnliche Java Themen


Oben