Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Eine Frage zum Verständnis von RMI

Empfohlene Antworten

Veröffentlicht

Hallo,

ich versuche mich zur Zeit in das Thema RMI einzuarbeiten und habe folgenden Quellcode erstellt.

Einen Testserver:

package de.TestServer.main;


import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

import java.rmi.server.RemoteServer;

import java.rmi.server.UnicastRemoteObject;


import de.TestServer.main.Interfaces.TestServerObjektInterface;

import de.TestServer.main.Objekte.TestServerObjekt;


public class TestServer

{


	public static void main( String[] args ) throws RemoteException

	{

		LocateRegistry.createRegistry( Registry.REGISTRY_PORT );

		TestServerObjekt tsoTest = new TestServerObjekt("RMI KLAPPT");

		TestServerObjektInterface TSOIStub = (TestServerObjektInterface) UnicastRemoteObject.exportObject(tsoTest, 0);

		RemoteServer.setLog( System.out );

		Registry registry = LocateRegistry.getRegistry();

		registry.rebind("TestServerObjektInterface", TSOIStub);

		System.out.println("TestServerObjektInterface angemeldet");

  }

}
Ein Objekt:
package de.TestServer.main.Objekte;


import java.rmi.server.RemoteServer;


import de.TestServer.main.Interfaces.TestServerObjektInterface;


public class TestServerObjekt extends RemoteServer implements TestServerObjektInterface

{

	private String strData;


	public String get_Data()

	{

		return this.strData;

	}


	public TestServerObjekt(String strDataExt)

	{

		this.strData = strDataExt;

	}

}

Ein Interface:
package de.TestServer.main.Interfaces;


import java.rmi.Remote;

import java.rmi.RemoteException;


public interface TestServerObjektInterface extends Remote

{

	String get_Data() throws RemoteException;

}

Und schlussendlich einen Client:
package de.TestClient.main;


import java.rmi.NotBoundException;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;


public class TestClient

{

	public static void main( String[] args ) throws  RemoteException, NotBoundException

	{

		Registry registry = LocateRegistry.getRegistry();

		TestServerObjektInterface TSOITest = (TestServerObjektInterface) registry.lookup("TestServerObjektInterface");

		System.out.println(TSOITest.get_data());

	}

}

Server und Client sind zwei verschiedene Eclipseprojekte. Die Kompilierung der Serverklassen/-interfaces hat geklappt, der Server ist gestartet, nur beim Client meckert er, dass er "TestServerObjektInterface " nicht kennt. Logisch - ist ja auch ein ServerInterface. Wo liegt da der Fehler?

Naja, den Fehler hast Du ja schon erkannt: Dein Client muss natürlich wissen, wo das Interface ist. Deshalb reicht es nicht, wenn nur der Server das kennt. In der Regel hat man solche auf unterschiedlichen Systemen benötigten Schnittstellen in einem eigenen Archiv (JAR) und damit in einem eigenen Eclipse- oder Maven-Projekt. Wenn Dir das zu viel Akt ist, kannst Du natürlich einfach alle Server-Klassen mit in den Client-Classpath packen, aber außer dem Interface geht den Client ja nichts aus dem Server etwas an (Geheimhaltungs- und Kapselungsprinzip).

Peter

Ich habe den "Interfaces" Ordner des Servers über "Add Class Folder..." eingebunden, kompiliert und es läuft.

Danke. :)

Bearbeitet von ElizaD

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.