Hallo,
ich entwickle gerade eine kleine Anwendung mit J2EE, habe jedoch Probleme bei Remoteverbindungen (und auch lokal) zum RMI-Server von jBoss.
Irgendwie komme ich nicht weiter und werde auch aus Tutorials und Dokus nicht schlauer, weshalb ich hier mal frage, ob mir wer Hilfestellung leisten kann ...
Als erstes erstmal mein Plan:
Ich möchte auf Basis von MBeans einen (oder eigentlich zwei) Dienste schreiben, welche es ermöglichen, J2EE-Komponenten automatisch von einem J2EE-Server zu einem anderen J2EE-Server zu übertragen und auf dem Ziel-Server auch automatisch deployen zu lassen.
Dazu habe ich mir erstmal eine MBean geschrieben, welche "lokal" ein oder mehrere Verzeichnisse überwacht, um neue oder aktualisierte Komponenten zu finden und zu cachen und diese zur Übertragung bereit zu stellen.
Nun wollte ich erstmal von einem einfachen Java-Programm, später dann von einer zweiten MBean von Remote auf diese MBean zugreifen, um Informationen von dieser Bean abzufragen und gegebenenfalls auch Komponenten anzufordern ...
Erstmal soweit, allerdings trete ich gerade auf der Stelle, weil es mir nicht gelingen will, eine Verbindung zum RMI-Server des JBoss herzustellen.
Der JBoss (4.0.4) ist gestartet und in der JMX-Console kriege ich auch meine Bean und die JBoss-Beans angezeigt, versuche ich nun aber mit:
auf den Server zuzugreifen, bekomme ich folgende Exception:
Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.NoSuchObjectException: no such object in table]
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:97)
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:103)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at prototyp.livedeployment.clients.JMXClient.main(JMXClient.java:34)
Caused by: java.rmi.NoSuchObjectException: no such object in table
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.lookup(Unknown Source)
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:93)
... 3 more
Kann mir vielleicht irgendwer sagen, was ich anders machen muss, um eine Verbindung hinzubekommen?
Mein System ist wie gesagt ein JBoss 4.0.4, Java 1.5, SuSE 10.1.
Eine weitere Frage noch:
Ist für das beschriebene Problem der Lösungsansatz mit Verbindung über RMI generell günstig, oder gibt es da bessere Ansätze ... ich weiss beispielsweise gar nicht so richtig, wie das mit Authentifizierung und so was ist, am liebsten möchte ich, dass alles komplett ohne User/Passwort abgehandelt werden soll.
Ausserdem würde mich interessieren, ob solch eine Lösung abgesehen von Deploymentdescriptoren um die Beans in der Server zu kriegen, generell Hersteller- (bzw. Applikation-Server) -unabhängig implementierbar ist?
Ich habe beim JBoss schon mitbekommen, dass es viele Erweiterungen gibt, welche das Entwickeln spezieller "JBoss-Komponenten" wesentlich vereinfachen, sie damit jedoch inkompatibel mit anderen J2EE-konformen Servern machen.
Viele viele Fragen ... wäre super, wenn sich jemand die zeit nehmen würde, ein paar (oder alle ;-) ) davon zu beantworten.
Vielen Dank!
Steffen
ich entwickle gerade eine kleine Anwendung mit J2EE, habe jedoch Probleme bei Remoteverbindungen (und auch lokal) zum RMI-Server von jBoss.
Irgendwie komme ich nicht weiter und werde auch aus Tutorials und Dokus nicht schlauer, weshalb ich hier mal frage, ob mir wer Hilfestellung leisten kann ...
Als erstes erstmal mein Plan:
Ich möchte auf Basis von MBeans einen (oder eigentlich zwei) Dienste schreiben, welche es ermöglichen, J2EE-Komponenten automatisch von einem J2EE-Server zu einem anderen J2EE-Server zu übertragen und auf dem Ziel-Server auch automatisch deployen zu lassen.
Dazu habe ich mir erstmal eine MBean geschrieben, welche "lokal" ein oder mehrere Verzeichnisse überwacht, um neue oder aktualisierte Komponenten zu finden und zu cachen und diese zur Übertragung bereit zu stellen.
Nun wollte ich erstmal von einem einfachen Java-Programm, später dann von einer zweiten MBean von Remote auf diese MBean zugreifen, um Informationen von dieser Bean abzufragen und gegebenenfalls auch Komponenten anzufordern ...
Erstmal soweit, allerdings trete ich gerade auf der Stelle, weil es mir nicht gelingen will, eine Verbindung zum RMI-Server des JBoss herzustellen.
Der JBoss (4.0.4) ist gestartet und in der JMX-Console kriege ich auch meine Bean und die JBoss-Beans angezeigt, versuche ich nun aber mit:
Code:
Hashtable<String, String> hashtable = new Hashtable<String, String>(2);
hashtable.put (Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.rmi.registry.RegistryContextFactory");
hashtable.put (Context.PROVIDER_URL,
"rmi://localhost:1098");
InitialContext ictx = new InitialContext(hashtable);
RMIAdaptor server = (RMIAdaptor) ictx.lookup("jmx/invoker/RMIAdaptor");
auf den Server zuzugreifen, bekomme ich folgende Exception:
Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.NoSuchObjectException: no such object in table]
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:97)
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:103)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at prototyp.livedeployment.clients.JMXClient.main(JMXClient.java:34)
Caused by: java.rmi.NoSuchObjectException: no such object in table
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.lookup(Unknown Source)
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:93)
... 3 more
Kann mir vielleicht irgendwer sagen, was ich anders machen muss, um eine Verbindung hinzubekommen?
Mein System ist wie gesagt ein JBoss 4.0.4, Java 1.5, SuSE 10.1.
Eine weitere Frage noch:
Ist für das beschriebene Problem der Lösungsansatz mit Verbindung über RMI generell günstig, oder gibt es da bessere Ansätze ... ich weiss beispielsweise gar nicht so richtig, wie das mit Authentifizierung und so was ist, am liebsten möchte ich, dass alles komplett ohne User/Passwort abgehandelt werden soll.
Ausserdem würde mich interessieren, ob solch eine Lösung abgesehen von Deploymentdescriptoren um die Beans in der Server zu kriegen, generell Hersteller- (bzw. Applikation-Server) -unabhängig implementierbar ist?
Ich habe beim JBoss schon mitbekommen, dass es viele Erweiterungen gibt, welche das Entwickeln spezieller "JBoss-Komponenten" wesentlich vereinfachen, sie damit jedoch inkompatibel mit anderen J2EE-konformen Servern machen.
Viele viele Fragen ... wäre super, wenn sich jemand die zeit nehmen würde, ein paar (oder alle ;-) ) davon zu beantworten.
Vielen Dank!
Steffen