RMI Problem

Status
Nicht offen für weitere Antworten.

zu1u

Mitglied
Hallo zusammen,
ich habe ein kleineres Problem mit RMI. Ich habe eine ganz einfache beisipelhafte Anwendung siehe Code unten (läuft auch in meiner Entwicklungsumgebung).

Ich würde jetzt gerne den Server in ein ausführbares Server.jar packen, also die IRemoteAdder, RemoteAdder und dazu die IUseAdder.

Außerdem will ich den Client in einem ausführbaren Client.jar haben (IUseAdder und UseAdder)

Soweit ich mich dann noch bezüglich codebase eingelesen habe, kann der Client bei entsprechender Konfiguration des Servers über die codebase das Interface des Servers laden und darüber dann Remote Aufrufe starten. Ist das bis dahin korrekt?

Ich gehe zumindest davon aus, da ich nach langem lesen das so verstehe. Jedenfalls bekomme ich es nicht ganz zum laufen, sonst würde ich ja nicht schreiben. Ich rufe also Server auf mit

java -jar Server.jar -Djava.rmi.server.codebase=file:\\\\C:\\Server.jar -Djava.security.manager -Djava.security.policy=C:\server.policy

und den Client mit
java -Djava.security.manager -jar Client.jar

die server.policy gewährt lediglich vollen Zugriff
Java:
grant {
    permission java.security.AllPermission;
};


Auf dem Client erhalte ich dann eine
Java:
java.security.AccessControlException: access denied (java.net.SocketPermission
27.0.0.1:1099 connect,resolve)
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkConnect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown
ource)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown
ource)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
        at sun.rmi.server.UnicastRef.newCall(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at java.rmi.Naming.lookup(Unknown Source)
        at UseAdder.<init>(UseAdder.java:14)
        at UseAdder.main(UseAdder.java:28)

kann mir jemand sagen was ich falsch mache? habe ich das grundlegende Konzept falsch verstanden? oder irgendwo beim Aufruf einen Fehler? Ich habe schon alle möglichen Sachen probiert.. mit/ohne security manager, verschiedene syntax bei der codebase angabe... ohne Erfolg

Java:
public interface IRemoteAdder extends Remote { 
    public int add (IUseAdder user, int i1, int i2) throws RemoteException; 
    // other methods
}


Java:
public class RemoteAdder extends UnicastRemoteObject implements IRemoteAdder {
    
    public RemoteAdder() throws RemoteException {
    	super();
    }
    
    public int add(IUseAdder user, int i, int j) {
    	return i+j;
    }

    public static void main(String args[]) { 

		// Register port for RMI
		try{
			LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
		}
		catch (RemoteException e){
			System.out.println("Creating registry failed. " + e.getMessage() + ". Rebinding port.");
		}

		IRemoteAdder server = null;
		try{
			// Construct server
			server = new RemoteAdder();
			Naming.rebind("RemoteAdder", server);
		}
		catch (Exception e){
			System.out.println("Binding failed. hier " + e.getMessage());
			e.printStackTrace();
		}
    } 
}

Java:
public interface IUseAdder extends Remote {

}

Java:
public class UseAdder extends UnicastRemoteObject  implements IUseAdder { 

	public UseAdder() throws RemoteException {
	    IRemoteAdder ra;
		try {
			ra = (IRemoteAdder)Naming.lookup("//localhost:1099/RemoteAdder");
		    int a=23, b=45;

		    int result = ra.add(this, a,b);
		    System.out.println(result);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
    public static void main(String argv[]) {
    	try{
    		IUseAdder user = new UseAdder();
    	}catch(Exception e) {
    		e.printStackTrace();
    	}
    }
}
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Der Client braucht Zugriff auf das Remoteinterface des Server. Und falls der Server vom Client ein Callback-Objekt bekommt, braucht der Server zugriff auf das Interface des Clients.

Du hast nur am Server eine Codebase angegeben. Wie soll nun der Client an das Interface des Servers kommen?

Codebase hin oder her: Mir war das immer zu doof mit dem nachladen und übertragen der Interfaces. Ich hab schlicht und einfach alle Remote-Interfaces in ne eigene JAR gepackt und dem Client, bzw. auch dem Server in den Classpath mitgegeben. Damit spart man sich das Codebasegeraffel.

Denke die wenigsten werden das "zur Laufzeit nachladen der Interfaces" wirklich brauchen.

- Alex
 

zu1u

Mitglied
hi tuxedo,
danke für deine antwort. Das ist ein ziemliches geraffel das stimmt. Das es geht wenn ich Client und Server jeweils das Interface der gegenstelle in die jar mitgebe weiss ich.. leider muss ich es aber durch übertragung aus der codebase implementieren und komm ums verecken nicht weiter. :shock:

Nochmal wie es gedacht ist: Der Server hat das Interface des Clients, in diese Richtung dürfte also keine Problem sein. Der Client soll aber das Interface vom Server aus dessen codebase laden.

jemand noch einen tip wo das problem sein könnte?
 
T

tuxedo

Gast
Bist du mal auf die grandiose Idee gekommen dem Client zu sagen "Codebase: Schau mal dort drüben nach"?? Sprich: Codebase beim starten des Clients mitgeben?

Im zweiten Semester hatten wir dafür ne einfache Fileserver-Klasse geschrieben. Der Server hat den Fileserver mitgestartet und via HTTP die Interfaces angeboten. Beim starten des Clients hat man dann als Codebase die HTTP-Url angegeben wo die files zu finden sind und gut war.

Hat deine Vorgabe, dass das über die Codebase funktionieren muss einen akademischen Hintergrund oder gibts dafür wirklich ne plausible Anforderung?

- Alex
 

zu1u

Mitglied
das hat einen akademischen Hintergrund. Ich probier es mal so aus wie du geschrieben hast... macht so wie du sagst schon Sinn. Der Grund warum ich anders vorgegangen bin waren Anleitungen im Netz wie z.B. diese hier RMI examples
(die ich vieleicht aber auch nicht richtig verstanden habe, wenn ich mir den letzten Absatz grade nochmal durchlese)
 
T

tuxedo

Gast
Bin mir auch nicht mehr 100% sicher. Ist einfach zu lange her dass ich RMI so benutzt habe. Aber rein logisch gesehen macht es schon Sinn dem Client zu sagen wo die Codebase ist.

- Alex
 

zu1u

Mitglied
Habe es mal wie unten dargestellt versucht, leider immernoch ne Exception.. diesmal ne andere, die is mir zuvor auch schonmal übern weg gelaufen :lol:

noch ne idee? ... also mich wunderts das er sagt kein security manager.. dabei hab ich ihn doch mit angegeben... im code hatte ich ihn auch schon

Code:
java -jar Client.jar -Djava.rmi.server.codebase=file:/c:\Server.jar -Djava.s
ecurity.manager -Djava.security.policy=c:\server.policy

Code:
java -jar Server.jar -Djava.rmi.server.codebase=file:/c:\Server.jar -Djava.s
ecurity.manager -Djava.security.policy=c:\server.policy

Code:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
        java.lang.ClassNotFoundException: server.Server(n
o security manager: RMI class loader disabled)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at java.rmi.Naming.lookup(Unknown Source)
        at client.Client.connectToServer(Client.j
ava:51)
        at client.view.ConnectionPanel.mouseClicked(ConnectionPanel.java:35)
        at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: server.Server
 (no security manager: RMI class loader disabled)
        at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
        at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source)
        at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source)
        at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source)
        at java.io.ObjectInputStream.readProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
 
Zuletzt bearbeitet:
T

tuxedo

Gast
java.lang.ClassNotFoundException: server.Server(n
o security manager: RMI class loader disabled)

Hmm, hört sich doch ganz danach an als ob in der security-policy etwas nicht stimmt.

- Alex
 
T

tuxedo

Gast
Was mir gerade auffällt
Code:
-Djava.security.manager

Mit
Code:
-D
setzt man Java Properties. Du versuchst hier offenbar eine Property namens "java.security.manager" zu setzen, gibst aber keinen Wert dafür an.

Ergo scheint mir die Fehlermeldung
Code:
no security manager: RMI class loader disabled
berechtigt zu sein?!

- Alex
 
T

tuxedo

Gast
Hmm,

If no security manager is specified, the built-in default security manager is utilized (unless the application installs a different security manager). All of the following are equivalent and result in usage of the default security manager:

java -Djava.security.manager SomeApp
java -Djava.security.manager="" SomeApp
java -Djava.security.manager=default SomeApp

Das passt nur irgendwie nicht zur Fehlermeldung?!

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6
0din SMTP Client - readline problem Netzwerkprogrammierung 4
C komisches Problem / ObjectInputStream erstellt sich nicht Netzwerkprogrammierung 5
W vista / win server 2003 netzlaufwerk problem Netzwerkprogrammierung 4
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6
E Problem: netbeans 6.5 und webanwendung Netzwerkprogrammierung 6
C Problem mit Übertragung einer Klasse in RMI Netzwerkprogrammierung 10
B UDP Problem Netzwerkprogrammierung 25

Ähnliche Java Themen

Neue Themen


Oben