Kapitel 126 der OSGI Enterprise Release 5 specification erwähnt Kompatibilität:Ermöglicht OSGI JNDI die Koexistenz mit JNDI-Aufrufen aus Nicht-OSGI-Code?
"Unterstützen Sie das Modell traditionelle JNDI Programmierung von Java SE und Java EE-Clients verwendet."
und die Verwendung von OSGi-nicht bewusst Code:
„Clients und JNDI Context-Provider, die keine Kenntnis von OSGi sind verwenden statische Methoden zur JRE JNDI Implementierung verbinden Die Initial Klasse ermöglicht den Zugriff auf ein. Kontext von einem Provider und Provider verwenden die statischen NamingManager-Methoden, um Objektkonvertierung und URL-Kontexte zu finden Dieses traditionelle Modell ist OSGi nicht bekannt und kann daher nur zuverlässig verwendet werden, wenn die Folgen dieser fehlenden OSGi-Awareness verwaltet werden. "
aber es ist mir nicht klar, ob dieser Text nur auf „Legacy“ Code gilt innerhalb eines OSGi-Bundle ausgeführt wird, oder auch außerhalb der OSGi-Container zu codieren, f ex in einem Szenario, in dem die OSGi-Container in eingebettet ist eine Bewerbung.
In einem Einbettungsszenario kann sowohl außerhalb als auch innerhalb des OSGI-Containers Anwendungscode vorhanden sein, der JNDI-Aufrufe ausführt. Wenn sie in derselben JVM ausgeführt werden, teilen sie sich die JNDI-Implementierung.
Frage: Sollte ein OSGi JNDI Implementierung läuft in einem eingebetteten OSGi-Container OSGi-Code nicht bewusst außerhalb des Behälters erlauben auszuführen seine JNDI wie gewohnt Anrufe oder einige Portierung auf „OSGi-Bewusstsein“ erforderlich?
Probieren Sie dies mit Apache Karaf 2.3.0 (die Apache Aries JNDI 1.0.0 verwendet) dies scheint nicht zu funktionieren, wie Apache Wides erfordert JNDI-Client-Aufrufe aus einem OSGI-Bundle stammen.
Teilstacktrace:
javax.naming.NoInitialContextException: The calling code's BundleContext could not be determined.
at org.apache.aries.jndi.OSGiInitialContextFactoryBuilder.getInitialContext(OSGiInitialContextFactoryBuilder.java:46)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.init(InitialContext.java:242)
at javax.naming.InitialContext.<init>(InitialContext.java:192)
Frage: Ist das richtige Verhalten, oder gibt es einen Abschnitt der Beschreibung ich darauf verweisen kann durch diese Einschränkung verletzt wird?