如何在单个 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 服务规范”的说明。
有人知道这是否可行吗???
我遇到过使用 google Guice 启动应用程序的情况。默认情况下,它使用 org.apache.camel.guice.jndi.GuiceInitialContextFactory
创建一个 InitialContext,它隐藏在 camel-guice 启动逻辑中。
我在 karaf 中 运行 它,它有自己的方式通过
创建 InitialContextjavax.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 服务规范”的说明。