Zum Inhalt springen

Infos über RMI


backdraft

Empfohlene Beiträge

Hi!

Wer kennt sich hier ein bisschen mit RMI aus?

Ich möchte gern die Kommunikation zwischen einem Applet

und einem Server in unserem Netzwerk mit RMI realisieren.

Ich habe bis jetzt aber nur sehr kurze und komplexe

Besipiele gefunden.

Wer kann mir sagen, wo es mehr Inforamtionen dazu gibt?

Internet, gutes Buch, etc.

Gleich mal ne Frage: Muss ich ein Applet signieren, wenn es

mit dem Server, von dem es geladen wurde, per RMI

kommuniziert?

MfG

Jonas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von backdraft

Wer kennt sich hier ein bisschen mit RMI aus?

Ich möchte gern die Kommunikation zwischen einem Applet

und einem Server in unserem Netzwerk mit RMI realisieren.

Ich habe bis jetzt aber nur sehr kurze und komplexe

Besipiele gefunden.

Wer kann mir sagen, wo es mehr Inforamtionen dazu gibt?

Internet, gutes Buch, etc.

Wenn du konkrete Fragen hast, kann ich gerne helfen. Allerdings solltest du erst einmal ein Beispiel selber nachvollziehen, da das Thema nicht gerade einfach ist.

Wenn auf der Server Seite ein Servlet laufen soll, kann ich das Buch "Java Servlet Programming" von Oreilly empfehlen. (3-89721-282-X) 62 Seiten lang wird da nur die Kommunikation zwischen Servlets und Applets beschrieben. Allerdings nicht nur RMI, sondern auch Socket bzw. reine HTTP Kommunikation. Außerdem werden die 3 Möglichkeiten ausführlich miteinander verglichen.

Original geschrieben von backdraft

Gleich mal ne Frage: Muss ich ein Applet signieren, wenn es

mit dem Server, von dem es geladen wurde, per RMI

kommuniziert?

Solange du nicht auf gesperrte Clientresourcen zugreifen willst, nicht. Bin mir bei dem Punkt aber nicht 100%ig sicher. :D

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

Ich habe jetzt mal ein Beispielprogramm von Sun gemacht.

Beim Kompilieren gibt's aber den Fehler 'cannot resolve

symbol', sobald man im Client das Interface des Server-

Objekts benutzt. Die Dateien liegen alle in einem Ordner.

Finden müsste er sie also.

Woran kann das liegen?

MfG

Jonas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich kann dir wohl mit nem einfachen Beispiel dienen.

Allerdings handelt es sich dabei um 2 Applikation die miteinander kommunizieren. Bei Applets kommen dann noch Punkte wie codebase, Webserver usw. hinzu.

Wenn dir mein Bespiel reicht, kann ich es mal posten oder dir zuschicken. Ist aber im Moment nicht dokumentiert, falls du ICQ hast, kann ich dir aber helfen.

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

Ich habe jetzt nen Server und ein Client.

Ich kriege sie aber nicht zum laufen. Beim Aufruf:

java -Djava.rmi.server.codebase=file:/d:\server\apache\htdocs\tutorial\hello\ -Djava.security.policy=e:\java\rmi.policy HelloImpl

Sagt er immer, dass er die Klasse HelloImpl nicht findet.

Warum findet er die nicht?

MfG

backdraft

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von backdraft

java -Djava.rmi.server.codebase=file:/d:\server\apache\htdocs\tutorial\hello\ -Djava.security.policy=e:\java\rmi.policy HelloImpl

Das Zeichen \ solltest du immer durch / ersetzen, auch unter Windows.

Ich weiss aber nicht ob es daran liegt.

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, ich habe mein Beispiel mal nen bisschen dokumentiert.

Vielleicht hilft es dir ja.

Es handelt sich um nen Server und nen Client mit Callback- Funktionalität, d.h. der Client kann Methoden auf dem Server aufrufen und der Server kann ebenfalls Methoden auf dem Client aufrufen.

Gruß Jaraz


/*
* Datei PzeServer.java
* Server Main Programm:
* -Startet RMI Registry
* -Erzeugt ein Server Objekt und registriert es bei der RMI Registry
*/
import java.rmi.*;
import java.rmi.registry.*;
import java.net.MalformedURLException;

public class PzeServer {
private static Server server;
public static void main(String [] av) {
System.out.println("start sequenz of the PZE Server");
try {
System.setSecurityManager(new RMISecurityManager());
server = new Server();
LocateRegistry.createRegistry(1099);
Naming.rebind("rmi://localhost:1099/Server",server);
System.out.println("\nPZE Server ready!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("\nPZE Server failed!");
}
}
}
[/php]

[php]
/*
* Datei PzeClient.java
* Client Main Programm:
* -Erzeugt ein Client Objekt und registriert es beim Server
*/
import java.rmi.*;

class PzeClient {
private static Client client;
static public void main( String args[] ) {
System.out.println("start sequenz of the PZE Client");
try {
System.setSecurityManager(new RMISecurityManager());
client = new Client();
client.getServer().registerClient(client);
System.out.println("\nPZE Client ready!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("\nPZE Client failed!");
}
}
}


/*
* Datei ServerInterface.java
* Das ServerInterface definiert die Methoden, die der Client auf dem
* Server aufruft.
*/
import java.rmi.*;

interface ServerInterface extends Remote {
// Beispiel, empfangen eines String Objects
String getServerString() throws RemoteException;
// Diese Methode registriert den Client beim Server
void registerClient(ClientInterface cl) throws RemoteException;
}
[/php]

[php]
/*
* Datei Server.java
* Die Klasse Server implementiert die Methoden aus dem
* ServerInterface
*/
import java.rmi.*;
import java.rmi.server.*;

class Server extends UnicastRemoteObject implements ServerInterface {

public Server () throws RemoteException, Exception {
super();
}

public String getServerString() throws RemoteException {
return "Hurra, der Aufruf von Client zum Server hat geklappt...";
}

public void registerClient(ClientInterface clientInterface)
throws RemoteException {
// Hier wird vom Server eine Methode auf dem Client aufgerufen
System.out.println(clientInterface.getClientString());
}
}


/*
* Datei ClientInterface.java
* Das ClientInterface definiert die Methoden, die der Server auf dem
* Client aufruft.
*/
import java.rmi.*;

interface ClientInterface extends Remote {
// Beispiel, empfangen eines String Objects
String getClientString() throws RemoteException;
}
[/php]

[php]
/*
* Datei Client.java
* Die Klasse Client implementiert die Methoden aus dem
* ClientInterface und holt sich ServerInterface Object
* aus der RMIRegistry
*/
import java.rmi.*;
import java.rmi.server.*;

class Client extends UnicastRemoteObject implements ClientInterface{

private ServerInterface serverInterface;

public Client () throws RemoteException, Exception {
super();
try {
serverInterface =
(ServerInterface)Naming.lookup("rmi://localhost:1099/Server");

// Hier wird vom Client eine Methode auf dem Server aufgerufen
System.out.println(serverInterface.getServerString());
}
catch (Exception ex) {
ex.printStackTrace();
}
}

public String getClientString() throws RemoteException {
return "Hurra, der Aufruf von Server zum Client hat geklappt...";
}

public ServerInterface getServer(){
return serverInterface;
}
}


Datei java.policy
----[snipp]----------------------------------------
grant
{ permission java.net.SocketPermission
"*:1024-65535", "connect,accept,resolve";

permission java.security.AllPermission
"","";
};
----[/snipp]---------------------------------------
[/php]

Ablauf:

1.) Alle Dateien in einem Verzeichnis erstellen

2.) Dos Box öffnen und in das Verzeichnis gehen

3.) javac *.java //eingeben

4.) rmic Server //eingeben

5.) rmic Client //eingeben

6.) java -Djava.security.policy=java.policy PzeServer //eingeben

7.) Eine 2.te Dos Box öffnen und in das Verzeichnis gehen

8.) java -Djava.security.policy=java.policy PzeClient //eingeben

Viel Spass!!! :D

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Cool! Vielen, vielen Dank schon mal! :)

Wenn du mir jetzt noch sagen kannst, wann in einem

Applet eine java.lang.NullPointerException: name

ausgelößt wird, ist alles wunderbar! ;)

Ich hab den Server jetzt am laufen und er meldet das Objekt

auch in der rmiregistry an. Nur das Applet macht noch

Probleme (s.o.).

MfG

backdraft

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist der Sourcecode vom Applet:

package tutorial.hello;

import java.applet.Applet;
import java.awt.Graphics;
import java.rmi.Naming;
import java.rmi.RemoteException;

public class HelloApplet extends Applet {

String message = "blank";

Hello obj = null;

public void init() {
try {
obj = (Hello)Naming.lookup("//" + getCodeBase().getHost() + "/HelloServer");
message = obj.sayHello();
} catch (Exception e) {
System.out.println("HelloApplet exception: " + e.getMessage());
e.printStackTrace();
}
}

public void paint(Graphics g) {
g.drawString(message, 25, 50);
}
}[/PHP]

Wo steckt der Fehler?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...