如何在单个 jvm 运行时创建多个 InitialContext(s)?

How to create multiple InitialContext(s) in a single jvm runtime?

有人知道这是否可行吗???

我遇到过使用 google Guice 启动应用程序的情况。默认情况下,它使用 org.apache.camel.guice.jndi.GuiceInitialContextFactory 创建一个 InitialContext,它隐藏在 camel-guice 启动逻辑中。

我在 karaf 中 运行 它,它有自己的方式通过

创建 InitialContext

javax.naming.spi.NamingManager 调用 org.apache.aries.jndi.OSGiInitialContextFactoryBuilder

发生的事情是,当我从捆绑 Activator 调用 InitialContext = new InitialContext() 时,我得到了对 karaf 上下文的引用,但是 如果我这样做 NOT 这样做,只是创建一个 org.apache.camel.guice.Main 来启动应用程序,只要 org.apache.camel.guice.jndi.GuiceInitialContextFactory 对类加载器可见,它就会正确创建 guice 上下文,启动应用程序,但我不会能够 "see" karaf 的初始上下文来自 "guiced" 类.

所以我需要做的是让 Guice 启动使用它的 GuiceInitialContextFactory 如上所述,而且还能够获得对 kararf 的 InitialContext 的引用...我不太熟悉 API这样做。

这只能在 osgi 中完成。请注意,这在“正常”java 环境中是不可能的,因为 InitialContext 初始化是静态的(每个 JVM 运行时 1 个)

如果您想在您的 osgi 环境中执行此操作,您需要实现 InitialContextFactoryBuilder 接口,使用提供的方法创建和 return 您需要的初始上下文。请参阅 osgi compendium 5 规范,特别是第 126 节“JNDI 服务规范”的说明。