Thorsten Zegger
Grünschnabel
Hallo,
mich plagt folgedes Problem:
Ich habe eine RCP Applikation, die im Backend auf einen IBM WebSphere Applikaitonsserver (Version 6.1) zugreift. Der Zugriff auf eine SessionBean funktioniert einwandfrei.
Nun möchte ich die Anwendung auf einem Topic lauschen lassen. Ich habe mir ein kleines Testprogramm geschrieben, das lokal auf meinem Arbeitsplatz sich an die Topic anhängt und auf Messages lauscht und ein anderes Progrämmchen, das eine Message in das Topic postet. Funktionieren auch beide

Dieses Programm in die RCP Anwendung eingebunden schlägt beim JNDI-Lookup auf die TopicConnectionFactory fehl. (Während vorher schon das Lookup auf das Topic erfolgreich war.)
Der auftretende Fehler sieht wie folgt aus:
Caused by: com.ibm.websphere.naming.CannotInstantiateObjectException: Exception occurred while the JNDI NamingManager was processing a javax.naming.Reference object. [Root exception is java.lang.NoClassDefFoundError: Invalid Implementation Key, com.ibm.ws.transaction.NonRecovWSTxManager]
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:952)
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookup(Helpers.java:701)
at com.ibm.ws.naming.jndicos.CNContextImpl.processResolveResults(CNContextImpl.java:1937)
at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1792)
at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1707)
at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1412)
at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1290)
at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:145)
at javax.naming.InitialContext.lookup(Unknown Source)
at de.cat.lib.serveraccess.jndi.JNDIAccessor.lookup(JNDIAccessor.java:184)
... 2 more
Caused by: java.lang.NoClassDefFoundError: Invalid Implementation Key, com.ibm.ws.transaction.NonRecovWSTxManager
at com.ibm.ws.Transaction.TransactionManagerFactory.getUOWCurrent(TransactionManagerFactory.java:109)
at com.ibm.ws.rsadapter.AdapterUtil.<clinit>(AdapterUtil.java:125)
at com.ibm.ejs.j2c.ConnectionFactoryBuilderImpl.getObjectInstance(ConnectionFactoryBuilderImpl.java:274)
at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:894)
... 11 more
Googeln und Forschen brachte mich soweit, dass ich die "com.ibm.ws.webservices.thinclient_6.1.0.jar" einbinden solle, ist sie aber natürlich schon drin. Zudem sind "sibc.jms.jar", "sibc.jndi.jar" und "sibc.orb.jar" im Klassenpfad mit hinterlegt.
Die Jars sind auch im Falle eines Zzugriffs über die RCP Anwendung im Klassenpfad. (Sonst würde ja die Sessionbean und der Topic-Zugriff auch schon fehl schlagen)
Ich konnte beobachten das der InitalContext, je nachdem ob ich meine Testklasse aus Eclise oder die RCP Anwendung starte eine, leicht abweichende Enviroment-Map hat.
Bei Eclipse-Testklassenstart steht "com.ibm.ws.naming.implementation=WsnIpCos" drin, der Eintrag fehlt im RCP Umfeld.
Hier der Code des InitContext-Erzeugens:
Ich vermute die Ursache im Klassloader, wüsste aber nicht wie ich da wo was einstellen müsste. Im Grunde hätte diese Anfrage eventuell besser ins RCP Unterforum gepasst, dort geht es aber scheinbar ehr um GUI Fragen und weniger um die Tiefen des JNDI, Classloaders, etc. Verzeiht also bitte wenn ich die Frage nicht ganz korrekt eingeordnet habe.
Habt vielen Dank und ... ich freue mich auf Hinweise.
Thorsten
mich plagt folgedes Problem:
Ich habe eine RCP Applikation, die im Backend auf einen IBM WebSphere Applikaitonsserver (Version 6.1) zugreift. Der Zugriff auf eine SessionBean funktioniert einwandfrei.
Nun möchte ich die Anwendung auf einem Topic lauschen lassen. Ich habe mir ein kleines Testprogramm geschrieben, das lokal auf meinem Arbeitsplatz sich an die Topic anhängt und auf Messages lauscht und ein anderes Progrämmchen, das eine Message in das Topic postet. Funktionieren auch beide

Dieses Programm in die RCP Anwendung eingebunden schlägt beim JNDI-Lookup auf die TopicConnectionFactory fehl. (Während vorher schon das Lookup auf das Topic erfolgreich war.)
Der auftretende Fehler sieht wie folgt aus:
Caused by: com.ibm.websphere.naming.CannotInstantiateObjectException: Exception occurred while the JNDI NamingManager was processing a javax.naming.Reference object. [Root exception is java.lang.NoClassDefFoundError: Invalid Implementation Key, com.ibm.ws.transaction.NonRecovWSTxManager]
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:952)
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookup(Helpers.java:701)
at com.ibm.ws.naming.jndicos.CNContextImpl.processResolveResults(CNContextImpl.java:1937)
at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1792)
at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1707)
at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1412)
at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1290)
at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:145)
at javax.naming.InitialContext.lookup(Unknown Source)
at de.cat.lib.serveraccess.jndi.JNDIAccessor.lookup(JNDIAccessor.java:184)
... 2 more
Caused by: java.lang.NoClassDefFoundError: Invalid Implementation Key, com.ibm.ws.transaction.NonRecovWSTxManager
at com.ibm.ws.Transaction.TransactionManagerFactory.getUOWCurrent(TransactionManagerFactory.java:109)
at com.ibm.ws.rsadapter.AdapterUtil.<clinit>(AdapterUtil.java:125)
at com.ibm.ejs.j2c.ConnectionFactoryBuilderImpl.getObjectInstance(ConnectionFactoryBuilderImpl.java:274)
at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:894)
... 11 more
Googeln und Forschen brachte mich soweit, dass ich die "com.ibm.ws.webservices.thinclient_6.1.0.jar" einbinden solle, ist sie aber natürlich schon drin. Zudem sind "sibc.jms.jar", "sibc.jndi.jar" und "sibc.orb.jar" im Klassenpfad mit hinterlegt.
Die Jars sind auch im Falle eines Zzugriffs über die RCP Anwendung im Klassenpfad. (Sonst würde ja die Sessionbean und der Topic-Zugriff auch schon fehl schlagen)
Ich konnte beobachten das der InitalContext, je nachdem ob ich meine Testklasse aus Eclise oder die RCP Anwendung starte eine, leicht abweichende Enviroment-Map hat.
Bei Eclipse-Testklassenstart steht "com.ibm.ws.naming.implementation=WsnIpCos" drin, der Eintrag fehlt im RCP Umfeld.
Hier der Code des InitContext-Erzeugens:
Code:
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
env.put("java.naming.corba.orb", org.omg.CORBA.ORB.init((String[]) null, null));
env.put(Context.PROVIDER_URL, pProviderURL);
InitialContext initialContext = new InitialContext(env);
Ich vermute die Ursache im Klassloader, wüsste aber nicht wie ich da wo was einstellen müsste. Im Grunde hätte diese Anfrage eventuell besser ins RCP Unterforum gepasst, dort geht es aber scheinbar ehr um GUI Fragen und weniger um die Tiefen des JNDI, Classloaders, etc. Verzeiht also bitte wenn ich die Frage nicht ganz korrekt eingeordnet habe.
Habt vielen Dank und ... ich freue mich auf Hinweise.
Thorsten