Per Button einen RMI Server starten bzw. beenden

Status
Nicht offen für weitere Antworten.

Prengepower

Aktives Mitglied
Hi!

Ich stehe vor einem GROßEN Problem...
Nachdem ich mich hier im Forum stark über RMI informiert hab und nun auch schon selbst erfolgreich ein paar Tests abgeschlossen hab, entstand hier schon wieder ein ziemlich großes problem!

Über einen Button in einer View wollte ich den Server starten. Das Problem dabei ist, dass auf den Button nichts reagiert. Absolut garnichts! Wenn ich den Server in einem extra Projekt starte funktioniert alles bestens. Ich kann in den Button auch einfach nur einen System.out.Println-Befehl schreiben und nichts erscheint auf der Konsole o_O

Begreife das nicht!

Wollte jetzt den Server und den Client halt jeweils in einem Thread starten lassen mit

Code:
server.start();
server.join();
client.start();
client.join();

Hier mal der Server-Thread:

Code:
import java.net.MalformedURLException;
import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Server implements Runnable{
	@Override
	public void run() {
		try {
		LocateRegistry.createRegistry(Registry.REGISTRY_PORT); //RMI-Port 1099
		Registry registry = LocateRegistry.getRegistry();
	  
		Remote remote = new ManagerImpl();
		
			Naming.rebind("server", remote);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("Server gestartet ...");
	}
      
}

Hier der "Inhalt" der View wo der Server aufgerufen werden soll (Client ist noch nicht implementiert):

Code:
import java.io.File;
import java.io.IOException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;

import de.hwrberlin.jemm.Datei;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import com.swtdesigner.SWTResourceManager;

public class Browser extends ViewPart {
	public static final String ID = "de.hwrberlin.jemm.views.Browser";
	private Text text;
	private static Tree tree;
	private static TreeItem treeItem;
	private Text text_1;
	public static Label lblStatus;
	public Thread server = new Thread(new de.hwrberlin.jemm.net.Server());


	public Browser() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void createPartControl(Composite parent) {
		parent.setLayout(null);
		{
			tree = new Tree(parent, SWT.BORDER);
			tree.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseDoubleClick(MouseEvent e) {
					String aktiv = tree.getSelection()[0].getText();
					Integer position = de.hwrberlin.jemm.views.editor.position(aktiv);
					Datei dateien = de.hwrberlin.jemm.views.editor.dateioeffnen(position);
					File datei = dateien.datei;
					try {
						de.hwrberlin.jemm.views.editor.oeffnen(datei);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			});
			tree.setBounds(0, 0, 194, 547);
		}
		{
			Composite composite = new Composite(parent, SWT.NONE);
			composite.setBounds(0, 548, 194, 121);
			composite.setLayout(null);
			{
				Label lblVerbindenZu = new Label(composite, SWT.NONE);
				lblVerbindenZu.setBounds(10, 10, 100, 13);
				lblVerbindenZu.setText("Verbinden zu...");
			}
			{
				text = new Text(composite, SWT.BORDER);
				text.setBounds(10, 29, 100, 19);
			}
			{
				Button btnConnect = new Button(composite, SWT.NONE);
				btnConnect.setBounds(116, 54, 68, 23);
				btnConnect.setText("Verbinden");
			}
			{
				Button btnHostSein = new Button(composite, SWT.NONE);
				btnHostSein.addSelectionListener(new SelectionAdapter() {
					@Override
					public void widgetSelected(SelectionEvent e) {
						server.start();
						try {
							server.join();
						} catch (InterruptedException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					}
				});
				btnHostSein.setBounds(10, 54, 68, 23);
				btnHostSein.setText("Hosten");
			}
			{
				text_1 = new Text(composite, SWT.BORDER);
				text_1.setBounds(116, 29, 68, 19);
			}
			{
				Label lblPort = new Label(composite, SWT.NONE);
				lblPort.setText("Port");
				lblPort.setBounds(116, 10, 68, 13);
			}
			{
				lblStatus = new Label(composite, SWT.NONE);
				lblStatus.setFont(SWTResourceManager.getFont("Tahoma", 11, SWT.NORMAL));
				lblStatus.setBounds(10, 82, 174, 29);
			}
		}
		{
			Label label = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
			label.setBounds(10, 567, 174, 2);
		}
	}


	@Override
	public void setFocus() {
		// TODO Auto-generated method stub

	}
	
	public static void hinzufuegen(String name){
		treeItem = new TreeItem(tree, SWT.NONE);
		treeItem.setText(name);
	}
}

vielen dank für eure hilfe :)

mfg
 
Zuletzt bearbeitet:

Prengepower

Aktives Mitglied
Welcher Button funktioniert nicht?

Es handelt sich dabei um den button btnHostsein...
Hab es jetzt mal ein wenig umgeändert und er startet jetzt den Server:

Code:
Button btnHostSein = new Button(composite, SWT.NONE);
				btnHostSein.addSelectionListener(new SelectionAdapter() {
					@Override
					public void widgetSelected(SelectionEvent e) {
						try {
							LocateRegistry.createRegistry(Registry.REGISTRY_PORT); //RMI-Port 1099
							Registry registry = LocateRegistry.getRegistry();
						} catch (RemoteException e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						}
						server.start();
						try {
							server.join();
						} catch (InterruptedException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					}
				});
				btnHostSein.setBounds(10, 54, 68, 23);
				btnHostSein.setText("Hosten");

Das Problem ist, dass jetzt folgende Fehlermeldung komm...
Code:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager (no security manager: RMI class loader disabled)
	at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
	at sun.rmi.transport.Transport$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
	at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
	at java.rmi.Naming.rebind(Unknown Source)
	at de.hwrberlin.jemm.net.Server.run(Server.java:14)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager (no security manager: RMI class loader disabled)
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
	at sun.rmi.transport.Transport$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)Server gestartet ...

	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	... 1 more
Caused by: java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager (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)
	... 12 more

Der Server Thread sieht wie folgt aus:
Code:
import java.net.MalformedURLException;
import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Server implements Runnable{
	@Override
	public void run() {
		try { 
			Remote remote = new ManagerImpl();
		
			Naming.rebind("server", remote);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("Server gestartet ...");
	}
}

Keine Ahnung was falsch läuft? Weiß auch nicht so wirklich wo ich mit dem Security Manager hinpacken soll -.-

Mfg
 

Wildcard

Top Contributor
Hier steht doch das Problem:
Code:
Caused by: java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager
 

Prengepower

Aktives Mitglied
Hier steht doch das Problem:
Code:
Caused by: java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager

ja das hab ich ja auch gesehen aber das problem ist halt das es so ja normal funktioniert - ich habes nur an so angepasst, dass es von den neuen paketen her hinhaut aber es klappt nicht - begreif ich net!
 

Wildcard

Top Contributor
Deine Angaben sind zu unspezifisch. Die Klasse ist offensichtlich nicht im Kontext deiner Anwendung erreichbar, also was bringt dich dazu zu glauben das sie erreichbar sein sollte? Niemand hier kennt dein Projektsetup, da kann man nur spekulieren, und Code hilft in diesem Fall nicht, da es sich um ein Problem der Environment handelt.
 

Prengepower

Aktives Mitglied
Deine Angaben sind zu unspezifisch. Die Klasse ist offensichtlich nicht im Kontext deiner Anwendung erreichbar, also was bringt dich dazu zu glauben das sie erreichbar sein sollte? Niemand hier kennt dein Projektsetup, da kann man nur spekulieren, und Code hilft in diesem Fall nicht, da es sich um ein Problem der Environment handelt.

naja ich habe es jetzt sein lassen, nachdem ich gestern noch zahlreiche andere Seiten zu diesem Thema durchgelesen habe und herausgefunden habe, dass es ziemlich schwierig ist RMI in einem Plug-In Project zum laufen zu bringen...

Habe mich jetzt wieder für Sockets entschieden und da läuft der Server und die Kommunikation klappt auch ;)

Falls jemand doch noch eine Lösung (auch wenn nur allgemein und vll mit einem beispiel) für die Herangehensweise bei RCP und RMI findet, wäre es denke ich für viele andere auch interessant, diese hier zu finden!

Mfg
 

Wildcard

Top Contributor
naja ich habe es jetzt sein lassen, nachdem ich gestern noch zahlreiche andere Seiten zu diesem Thema durchgelesen habe und herausgefunden habe, dass es ziemlich schwierig ist RMI in einem Plug-In Project zum laufen zu bringen...
Sagt wer? Ich verwende auch RMI schnittstellen in Eclipse. Ich würde dir helfen, allerdings lieferst du nicht genug Informationen, da kann ich leider nichts machen
 

Prengepower

Aktives Mitglied
Sagt wer? Ich verwende auch RMI schnittstellen in Eclipse. Ich würde dir helfen, allerdings lieferst du nicht genug Informationen, da kann ich leider nichts machen

welche informationen brauchst du denn? ich habe grad eben nochmal den fehler der geliefert wird kopiert...

Java:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
	at java.rmi.Naming.rebind(Naming.java:160)
	at de.hwrberlin.jemm.net.Server.run(Server.java:22)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	... 1 more
Caused by: java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:711)
	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:655)
	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:592)
	at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
	at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
	at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
	at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1531)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	... 12 more
java.rmi.NotBoundException: multiserver
	at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:106)
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
	at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
	at java.rmi.Naming.lookup(Naming.java:84)
	at de.hwrberlin.jemm.net.Client.run(Client.java:16)
	at java.lang.Thread.run(Thread.java:619)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben