Frage/Problem mit RMI

Status
Nicht offen für weitere Antworten.

nussi

Mitglied
Hallo,
ich versuche mir gerade selbst RMI beizubringen. Allerdings scheitere ich jedes mal daran, den Server zum laufen zu bringen. Zum Testen benutze ich folgenden Code:

HelloClient:
Java:
package qpackage;

import java.rmi.Naming;

public class HelloClient {

  public static void main(String args[]) {
    try {
      HelloServer server = (HelloServer)Naming.lookup("hello-server");
      String result = server.sayHello();
      System.out.println(result);
    } catch(Exception ex) {
      ex.printStackTrace();
    }
  }

}

HelloServer:
Java:
package qpackage;

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

public interface HelloServer extends Remote {

  public String sayHello() throws RemoteException;

}

und HelloImpl

Java:
package qpackage;

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.rmi.Naming;

import qpackage.HelloServer;

public class HelloImpl extends UnicastRemoteObject implements HelloServer {

  public HelloImpl() throws RemoteException {
  }

  public String sayHello() {
    return "Hello World";
  }

  public static void main(String args[]) {
    try {
      Naming.rebind("hello-server", new HelloImpl());
    } catch(Exception ex) {
      ex.printStackTrace();
    }
  }
  
}

Wenn ich jetzt meinen Server ausführe bekomme ich folgende Fehlermeldung:
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: ...
Kann mir jemand sagen wo mein Fehler liegt?
 
Danke klappt jetzt genau so wie ich es mir vorgestellt habe. Allerdings stehe ich jetzt vor meinem nächsten Problem: Und zwar habe ich auf meinem Server eine Datenbank mit Büchern liegen. Diese will ich nach einem bestimmten Buchtitel durchsuchen. Das gefundene Buch soll an den Client als Objekt zurückgeschickt werden. Hier meine bisherigen Methoden:

auf dem Server:
Java:
	public Buch sucheBuch(String buchname) throws RemoteException {
		Buch gefundenesBuch = null;
		try {
			gefundenesBuch = Read.getBuecher(input);
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		
		return gefundenesBuch;
	}

und der Methodenaufruf durch den Client:
Java:
Buch myBook = service.sucheBuch("Der Schwarm");

Wenn ich die Anfrage so auf dem Client ausführe bekomme ich eine java.rmi.UnmarshalException um die Ohren gehauen. Nehme ich als Rückgabewert statt dem Objekt Buch einen String (z.B. Buchtitel) klappt alles einwandfrei. Liegt es daran, dass ich gar nicht ohne weiteres eigene Objekte vom Server zum Client schicken kann?
 
Standardmässig sind die nicht serialisierbar. Ein "implements Serializable" in deiner Klasse Buch sollte Abhilfe schaffen.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben