【问题标题】:How to create multiple InitialContext(s) in a single jvm runtime?如何在单个 jvm 运行时创建多个 InitialContext(s)?
【发布时间】:2020-07-31 09:19:30
【问题描述】:

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

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

我在 karaf 中运行它,它有自己的方式来创建 InitialContext

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

发生的情况是,当我从 bundle Activator 调用 InitialContext = new InitialContext() 时,我得到对 karaf 上下文的引用,但是 如果我这样做 这样做并且只需创建一个org.apache.camel.guice.Main 来启动应用程序,只要org.apache.camel.guice.jndi.GuiceInitialContextFactory 对类加载器可见,它将正确创建 guice 上下文,启动应用程序,但我将无法从“guiced”中“看到”karaf 的初始上下文" 类。

所以我需要做的是让 Guice 使用上面描述的 GuiceInitialContextFactory 启动,但也能够获得对 kararf 的 InitialContext 的引用...我不太熟悉执行此操作的 API .

【问题讨论】:

    标签: java apache-camel osgi guice jndi


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多