ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
9073
9073
EMPFEHLEN
-
Hallo Leute,
es ist mir bewusst, dass es über das Thema schon einige Beiträge gibt, trotzdessen war es mir leider nicht möglich mein Plug-In zum Laufen zu bewegen. Ich hoffe jemand kann mir einen Tipp geben.
Ich möchte einen RMI Server starten und das ganze als Eclipse Plug-In. Hier ist der (völlig abgespeckte) Code des Servers:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
public class TestServerImpl extends UnicastRemoteObject implements TestServer { private static final long serialVersionUID = -4030374539549388613L; private TestServerImpl() throws RemoteException { super(); } public static void startTestServer() { try { LocateRegistry.createRegistry(1234); } catch (RemoteException e2) { e2.printStackTrace(); } String serverName = null; try { serverName = "rmi://" + InetAddress.getLocalHost().getHostAddress() + ":1234/TestServer"; } catch (UnknownHostException e1) { e1.printStackTrace(); } TestServerImpl server = null; try { server = new TestServerImpl(); } catch (Exception e) { e.printStackTrace(); } try { Naming.rebind(serverName, server); System.out.println (serverName + " bound to rmi registry, at port " + "1234" + "."); } catch (RemoteException e) { System.out.println ("Rebinding " + serverName + " failed."); e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } public void test() throws RemoteException { }
Das gibt mir die folgende Exception:
Code :1 2 3 4
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: servertest.TestServer (no security manager: RMI class loader disabled) ...
Ok. Kein SecurityManager. Also habe ich den SecurityManager hinzugefügt. Hier nochmal der Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
public class TestServerImpl extends UnicastRemoteObject implements TestServer { private static final long serialVersionUID = -4030374539549388613L; private TestServerImpl() throws RemoteException { super(); } public static void startTestServer() { System.setProperty("java.security.policy", "d:/rmi.policy"); System.setProperty("java.rmi.server.ignoreStubClasses","true"); if(System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } try { LocateRegistry.createRegistry(1234); } catch (RemoteException e2) { e2.printStackTrace(); } String serverName = null; try { serverName = "rmi://" + InetAddress.getLocalHost().getHostAddress() + ":1234/TestServer"; } catch (UnknownHostException e1) { e1.printStackTrace(); } TestServerImpl server = null; try { server = new TestServerImpl(); } catch (Exception e) { e.printStackTrace(); } try { Naming.rebind(serverName, server); System.out.println (serverName + " bound to rmi registry, at port " + "1234" + "."); } catch (RemoteException e) { System.out.println ("Rebinding " + serverName + " failed."); e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } public void test() throws RemoteException { } }
Damit gibt es folgende Exception:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: servertest.TestServer at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240) at sun.rmi.transport.Transport$1.run(Transport.java:153) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:149) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707) at java.lang.Thread.run(Thread.java:595) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:343) at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) at java.rmi.Naming.rebind(Naming.java:160) at servertest.TestServerImpl.startTestServer(TestServerImpl.java:59) at servertest.TestView$1.run(TestView.java:108) at org.eclipse.jface.action.Action.runWithEvent(Action.java:499) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:539) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:488) at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:441) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1930) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1894) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:422) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336) at org.eclipse.core.launcher.Main.basicRun(Main.java:280) at org.eclipse.core.launcher.Main.run(Main.java:977) at org.eclipse.core.launcher.Main.main(Main.java:952) Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: servertest.TestServer at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source) at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240) at sun.rmi.transport.Transport$1.run(Transport.java:153) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:149) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707) at java.lang.Thread.run(Thread.java:595) Caused by: java.lang.ClassNotFoundException: servertest.TestServer 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:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:242) at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:707) at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:651) at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:588) 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:1500) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1463) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348) ... 9 more
Das Policy-File liegt natürlich in d:\rmi.policy und gibt alle Permissions.
Ich hoffe jemand hat vielleicht einen guten Hinweis für mich.
Vielen Dank schonmal.
Edit: java5, Eclipse 3.2
Gruß,
DominikGeändert von d-n-r (30.03.07 um 16:07 Uhr)
-
02.04.07 00:05 #2
Hallo d-n-r
.
Sieht so aus, als würden da die Stubs und Skeletons nicht richtig erzeugt werden!
Hast Du denn schonmal ausprobiert, ob das ganze normal lauffähig ist? Sprich nicht gleich als Eclipse Plugin?
Wir können ja morgen nochmal zusammen drüber schauen, hehe
Bis denne,
ZilchingerViele Grüße,
Zilchinger www.zilchinger.de
-
02.04.07 09:45 #3
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
ich glaube das du zum einen den Classpath der RMI Registry nicht richtig gesetzt hast und zum anderen die Stubs nicht richtig genriert hast oder das du die RMI Runtime nicht so konfiguriert hast das diese die Stubs selber generieren soll (Das geht übrigens seit Java 5).
Also Skeletons braucht man schon seit Java 1.3 nicht mehr und die Stubs sind seit Java 5 auch optional.Sieht so aus, als würden da die Stubs und Skeletons nicht richtig erzeugt werden!
schau mal hier:
http://www.tutorials.de/forum/java/2...-java-5-a.html
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
02.04.07 19:10 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
bei mir funktioniert folgendes ohne Probleme:
3 Plugins:
de.tutorials.eclipse.services (Services)
de.tutorials.eclipse.server (Server)
de.tutorials.eclipse.client (Client)
Das Services Plugin enthält die Service Interfaces. Das Server sowie das Client Plugin sind von dem
Services Plugin abhängig. Das Services Plugin exportiert die Service-Interfaces.
Unser ITimeService Interface im Services Plugin:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/** * */ package de.tutorials.eclipse.services.timeservice; import java.rmi.Remote; import java.rmi.RemoteException; import java.util.Date; /** * @author Thomas.Darimont * */ public interface ITimeService extends Remote { Date getSystemTime() throws RemoteException; }
Unser Server Plugin: RMI Registry hoch ziehen / Service Implementierung registrieren:
unsere Service Implementierung:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/** * */ package de.tutorials.eclipse.server.services.timeservice.internal; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.Date; import de.tutorials.eclipse.services.timeservice.ITimeService; /** * @author Thomas.Darimont * */ public class TimeServiceImpl extends UnicastRemoteObject implements ITimeService { public TimeServiceImpl() throws RemoteException { super(); System.out.println("TimeService created"); } public Date getSystemTime() { return new Date(); } }
Der Activator des Servers:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
package de.tutorials.eclipse.server; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.RemoteStub; import java.rmi.server.UnicastRemoteObject; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import de.tutorials.eclipse.server.services.timeservice.internal.TimeServiceImpl; import de.tutorials.eclipse.services.timeservice.ITimeService; public class Activator implements BundleActivator { private Registry registry; private int port = 1099; public void start(BundleContext context) throws Exception { this.registry = LocateRegistry.createRegistry(this.port); this.registry.rebind(ITimeService.class.getName(), new TimeServiceImpl()); System.out.println("Started RMI Registry on Port: " + port); } public void stop(BundleContext context) throws Exception { System.out.println("Shutting down RMI Registry"); } }
Der Client Activator:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
package de.tutorials.eclipse.client; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.util.concurrent.TimeUnit; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import de.tutorials.eclipse.services.timeservice.ITimeService; public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { Registry registry = LocateRegistry.getRegistry(); ITimeService timeService = (ITimeService)registry.lookup(ITimeService.class.getName()); System.out.println("Client: " + timeService.getSystemTime()); } public void stop(BundleContext context) throws Exception { //noop } }
Startet man nun Server und Services Plugins mit dem Equinox Framework Launcher, so bekommt man folgende Ausgabe:
[Server]
Code :1 2
TimeService created Started RMI Registry on Port: 1099
Anschließend startet man das Client plugin mit einem separaten Equinox Launcher. Hier sieht man dann eine ähnliche Ausgabe:
[Client]
Code :1
Client: Mon Apr 02 19:06:38 CEST 2007
Nur nebenbei Angemerkt... mit dem Springframework (http://www.springframework.org/) kann man einen Service wunderbar einfach per RMI Expotieren: http://static.springframework.org/sp...l#remoting-rmi
Das schöne dabei ist dann u.a, dass man seine Service-interfaces nicht von java.rmi.Remote ableiten muss, dass die Service Methoden keine RemoteException deklarieren müssen, das man den Serviice nicht von Hand über ein UnicastRemoteObject exportieren muss.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo Thomas,
also mal vielen Dank für die Vorschläge und Deine Mühe.
Ich habe Deine Plugins gerade ausprobiert und sie laufen bei mir auch mit dem Equinox Launcher. Allerdings habe ich leider keine Erfahrung mit reinen Equinox Anwendungen und kann daher die Unterschiede zu Eclipse-Plugins nicht richtig überschauen. Wenn ich das beim Drüberlesen richtig verstanden habe, ist Equinox ja die Platform plus das OSGI Framework
Wie dem auch sei, nach einiger Arbeit haben wir (Zilchinger und ich) das Ding doch noch zum Laufen bekommen und hier ist meine Lösung für alle die das gleiche Problem haben:
Das Problem ist in der Tat, das der Plugin-Classloader die Interfaces nicht finden kann. Lösen lässt sich das Problem durch Setzen desProperty, gerne auch programmatisch:Code :1
java.rmi.server.codebase
Code :1
System.setProperty("java.rmi.server.codebase", path);
Tricky an der ganzen Sache ist, dass Leerzeichen nicht erlaubt sind. Andererseits haut eine URL-Codierung mitauch nicht hin. Ersetzt man allerdings alle " " mit %20 findet der Classloader auf wundersame Weise alle Interfaces und der Server fährt hoch.Code :1
URLEncoder.encode
Um das Verzeichnis des Plugins rauszufinden bin ich überundCode :1
Activator.getDefault().getBundle()
gegangen. Damit bekommt man den Pfad, den man dann mit dem codebase Property setzen kann.Code :1
URL url = FileLocator.find(bundle, new Path("/bin/"), null);
Vielen Dank auch für den Hinweis auf das Spring Framework. Ich werde es mit in der Tat demnächst mal anschauen, doch da ich etwas unter Zeitdruck stehe, begnüge ich mich für den Moment mit der funktionierenden RMI Variante.
Vielen Dank nochmal,
Gruß,
Dominik
-
02.04.07 22:05 #6
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
hier mal noch eine alternative Implementierung, bei der unser Service nicht von UnicastRemoteObject abgeleitet sein muss:
Unsere neue Service Implementierung / Interface wie oben:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/** * */ package de.tutorials.eclipse.server.services.timeservice.internal; import java.util.Date; import de.tutorials.eclipse.services.timeservice.ITimeService; /** * @author Thomas.Darimont */ public class TimeServiceImpl implements ITimeService { public TimeServiceImpl() { System.out.println("TimeService created"); } public Date getSystemTime() { return new Date(); } }
Unser Server Activator:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
package de.tutorials.eclipse.server; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import de.tutorials.eclipse.server.services.timeservice.internal.TimeServiceImpl; import de.tutorials.eclipse.services.timeservice.ITimeService; public class Activator implements BundleActivator { private Registry registry; private int port = 10099; public void start(BundleContext context) throws Exception { System.setProperty("java.rmi.server.ignoreStubClasses", "true"); this.registry = LocateRegistry.createRegistry(this.port); try { this.registry.rebind(ITimeService.class.getName(), UnicastRemoteObject.exportObject(new TimeServiceImpl(), 9999)); } catch (Throwable throwable) { throwable.printStackTrace(); } System.out.println("Started RMI Registry on Port: " + port); } public void stop(BundleContext context) throws Exception { System.out.println("Shutting down RMI Registry"); } }
Unser Client Activator:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
package de.tutorials.eclipse.client; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import de.tutorials.eclipse.services.timeservice.ITimeService; public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System.setProperty("java.rmi.server.ignoreStubClasses", "true"); Registry registry = LocateRegistry.getRegistry("srv01", 10099); ITimeService timeService; try { timeService = (ITimeService) registry.lookup(ITimeService.class.getName()); System.out.println("Client: " + timeService.getSystemTime()); } catch (Throwable t) { t.printStackTrace(); } } public void stop(BundleContext context) throws Exception { // noop } }
Auch hier werden die beiden Plugins über separate Equinox-Launcher gestartet...
Über das JVM System Property java.rmi.server.ignoreStubClasses Teilen wir der RMI Runtime mit, dass anstatt etwaig vorhandener Stubs Dynamic Proxies verwendet werden sollen.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo, Thomas.
Habe den Thread entdeckt, weil ich auch Probleme mit RMI in der OSG-Umgebung habe.
Dein Beispiel funktioniert einwandfrei. Aber ich ging einen Schritt weiter und versuchte das Remoting über Springframework zu realisieren.
Dafür habe ich die Spring-Bundles eingestzt:
http://www.springsource.com/reposito...hQuery=context
Es ist mir gelungen (mit ClassLoader-Krücken) den Service auf der Server-Seite einzubinden (org.springframework.remoting.rmi.RmiServiceExporter) und auf der Client-Seite zu connecten (org.springframework.remoting.rmi.RmiProxyFactoryBean).
Bei Aufrufen ohne Parameter gibt es auch keine Probleme. Nur wenn man eine Funktion mit Parameter auf der Client-Seite aufruft, wird die Parameter-Klasse auf der Server-Seite nicht gefunden:
osgi> TimeService created
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub (no security manager: RMI class loader disabled)
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:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
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 org.springframework.remoting.rmi.RmiServiceExporter.prepare(RmiServiceExporter.java:286)
at org.springframework.remoting.rmi.RmiServiceExporter.afterPropertiesSet(RmiServiceExporter.java:227)
at de.tutorials.eclipse.server.Activator.start(Activator.java:57)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:999)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993 )
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:350)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1118)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:634)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:508)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:28 2)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:468)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:297)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub (no security manager: RMI class loader disabled)
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:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:375)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
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
org.springframework.remoting.RemoteLookupFailureException: Could not find RMI service [rmi://localhost:2445/ITimeService2] in RMI registry; nested exception is java.rmi.NotBoundException: ITimeService2
at org.springframework.remoting.rmi.RmiClientInterceptor.lookupStub(RmiClientInterceptor.java:210)
at org.springframework.remoting.rmi.RmiClientInterceptor.prepare(RmiClientInterceptor.java:146)
at org.springframework.remoting.rmi.RmiClientInterceptor.afterPropertiesSet(RmiClientInterceptor.java:1 34)
at org.springframework.remoting.rmi.RmiProxyFactoryBean.afterPropertiesSet(RmiProxyFactoryBean.java:67)
at de.tutorials.eclipse.client.Activator.start(Activator.java:34)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:999)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993 )
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:350)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1118)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:634)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:508)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:28 2)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:468)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:297)
Caused by: java.rmi.NotBoundException: ITimeService2
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:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
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 org.springframework.remoting.rmi.RmiClientInterceptor.lookupStub(RmiClientInterceptor.java:199)
... 17 more
Wäre Dir dankbar, wenn du etwas Licht in das Thema reinbringen würdest.
Gruss, Alex
-
16.06.08 17:04 #8
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
wenn du Spring in einer OSGi basierten Anwendung verwenden willst solltest du dir Spring Dynamic Modules anschauen:
http://springframework.org/osgi
http://springframework.org/download
Spring Dynamic Modules 1.0.2 is the current stable release
schau mal hier:
http://www.tutorials.de/forum/java/3...d-aspectj.html
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo, Tom.
Bin heute endlich dazu gekommen meine OSGI-RMI-Tests fortzusetzen.
Der Einsatz von Spring-DM hat mich aber nicht wirklich weiter gebracht.
Also, alles nacheinandern
.
Habe Deinen TimeSrvice-Server so angepasst, dass er mit Spring-DM aktiviert wird. Dazu den Activator rausgenommen und die Spring-Conf-Dateien unter META-INF/spring eingestellt. Der Start des OSGI-Frameworks erfolgt ohne Probleme:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Framework is launched. id State Bundle 0 ACTIVE system.bundle_3.2.2.R32x_v20070118 1 ACTIVE org.springframework.osgi.aopalliance.osgi_1.0.0.SNAPSHOT 2 ACTIVE de.tutorials.eclipse.server_1.0.0 3 ACTIVE org.springframework.osgi.log4j.osgi_1.2.15.SNAPSHOT Fragments=17 4 ACTIVE org.springframework.bundle.spring.context.support_2.5.4 5 ACTIVE org.springframework.bundle.spring.core_2.5.4 6 ACTIVE org.springframework.bundle.osgi.core_1.1.0.m2 7 ACTIVE jcl104.over.slf4j_1.4.3 8 ACTIVE org.springframework.bundle.spring.beans_2.5.4 9 ACTIVE org.springframework.bundle.spring.aop_2.5.4 10 ACTIVE slf4j.log4j12_1.4.3 11 ACTIVE org.springframework.osgi.cglib-nodep.osgi_2.1.3.SNAPSHOT 12 ACTIVE org.springframework.bundle.spring.context_2.5.4 13 ACTIVE org.springframework.bundle.osgi.extender_1.1.0.m2 14 ACTIVE de.tutorials.eclipse.services_1.0.0 15 ACTIVE org.springframework.bundle.osgi.io_1.1.0.m2 16 ACTIVE slf4j.api_1.4.3 17 RESOLVED log4j_config_1.0.0 Master=3
Der Time-Service wird im OSGI registriert und als RMI-Service exportiert.
Den OSGI-Client habe ich nicht gestartet. Dafür habe ich eine einfache Main-Klasse im Service-Projekt für den RMI-Test eingesetzt.
Das Ergebnis unterscheidet sich nicht von dem ohne Spring-DM: Die Parameter-Klasse wird im Server nicht gefunden.
Hätte mich auch gewundert, wenn es anders wäre. Ich meine, wenn ich mit einem Schaltgetriebe nicht durchkomme, komme ich mit einer Automatik erst recht nicht durch
Gruß Alex
Ähnliche Themen
-
Eclipse Plug-In -- Tag Cloud
Von PlugDes im Forum JavaAntworten: 6Letzter Beitrag: 16.11.10, 11:19 -
Eclipse RCP: Plug-in finden und einbinden?
Von Ahuga im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 29.08.10, 13:10 -
Eclipse PDE - Unsinnige Anzeige bei Plug-In Hierarchie
Von justincaseof im Forum JavaAntworten: 0Letzter Beitrag: 23.04.09, 10:30 -
Eclipse Plug-in mit Datenbankanbindung
Von Halodrie im Forum JavaAntworten: 0Letzter Beitrag: 04.09.08, 14:20 -
Brauche Plug-in für Eclipse, Programmierung von Struts
Von swem im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 02.05.05, 19:09





Zitieren


Login





