Rozdział 126 OSGI Enterprise Release 5 specification wspomina zgodność "Wsparcie tradycyjny model programowania JNDI używane przez klientów Java SE i Java EE"Czy JNDI OSGI pozwala na współistnienie z wywołania JNDI z kodu spoza OSGI?
i wykorzystanie kodu OSGI-nieświadomego:
„Klienci i dostawcy JNDI kontekście, że są nieświadomi OSGi wykorzystać metody statyczne, aby połączyć się z realizacji JRE JNDI Klasa InitialContext zapewnia dostęp do a. Kontekst dostawcy usług i dostawców usługi używają statycznych metod NamingManager do konwersji obiektów i odnajdywania kontekstów adresów URL Ten tradycyjny model nie zna OSGi i dlatego może być używany niezawodnie tylko wtedy, gdy zarządzane są konsekwencje braku świadomości OSGi. "
ale to nie jest dla mnie jasne, czy tekst ten odnosi się tylko do „spuścizna” Kod wykonywany wewnątrz wiązki OSGI, lub też kodować zewnątrz pojemnika OSGI, f ex w scenariuszu, w którym pojemnik OSGI jest osadzony w Aplikacja.
W scenariuszu osadzania może istnieć kod aplikacji zarówno na zewnątrz, jak i wewnątrz kontenera OSGI, który wykonuje wywołania JNDI, a gdy są wykonywane w tej samej maszynie JVM, będą współużytkować implementację JNDI.
Pytanie: Jeżeli uruchomiona jest implementacja JNDI OSGI we wbudowanym pojemnikiem OSGI pozwalają OSGi-nieświadomy kod na zewnątrz pojemnika do wykonywania swoich JNDI wymaga jak zwykle, czy jest jakiś Porting do required „OSGI świadomość”?
Próbuję tego samodzielnie z Apache Karaf 2.3.0 (który używa Apache Aries JNDI 1.0.0) nie wydaje się działać, ponieważ Apache Aries wymaga wywołań klienta JNDI pochodzących z pakietu OSGI.
Częściowa StackTrace:
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)
Pytanie: Czy to poprawne zachowanie, czy jest tam sekcja specyfikacji mogę odnieść się do tego jest naruszona przez to ograniczenie?