capitolo 126 del OSGI Enterprise Release 5 specification menziona compatibilità:OSGI JNDI consente la coesistenza con chiamate JNDI dal codice non OSGI?
"Sostenere il modello di programmazione JNDI tradizionale utilizzato dai client Java SE e Java EE."
e l'uso del codice di OSGi-inconsapevoli:
"I clienti ei fornitori JNDI contesto che non sono a conoscenza di OSGi usano metodi statici per la connessione alla realizzazione JRE JNDI La classe InitialContext fornisce l'accesso a una. Contesto da un provider e i provider utilizzano i metodi statici NamingManager per eseguire la conversione dell'oggetto e individuare i contesti URL. Questo modello tradizionale non è a conoscenza di OSGi e può quindi essere utilizzato in modo affidabile solo se vengono gestite le conseguenze di questa mancanza di consapevolezza OSGi. "
ma non mi è chiaro se questo testo si applica solo ai "legacy" codice eseguito all'interno di un fascio di OSGi, o anche al codice di fuori del contenitore OSGi, ex f in uno scenario in cui il contenitore OSGi è incorporato nel un applicazione.
In uno scenario di incorporamento, è possibile che ci sia un codice di applicazione sia all'esterno che all'interno del contenitore OSGI che esegue chiamate JNDI e poiché eseguono nella stessa JVM condivideranno l'implementazione JNDI.
Domanda: caso un OSGI JNDI implementazione in esecuzione in un contenitore OSGi incorporato consentire codice OSGi-ignari di fuori del contenitore di svolgere la sua JNDI chiamate come al solito, o qualche porting a "OSGi-consapevolezza" richiesta?
Provando questo con Apache Karaf 2.3.0 (che utilizza Apache Aries JNDI 1.0.0), questo non sembra funzionare, poiché Apache Aries richiede che le chiamate client JNDI provengano da un bundle OSGI.
stacktrace parziale:
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)
Domanda: È questo il comportamento corretto, o c'è una sezione della specifica posso fare riferimento a che viene violato da questa limitazione?