我正在使用JBossAS7。
我的应用程序包含一些OSGI模块和很大的非OSGI部分。
我通过JNDI尝试在非osgi子系统中查找osgi服务,但它们不在JNDI上下文中。
我在JBOSS 7 - Osgi Bundles not present in JNDI TREE中发现了类似的问题,但在此未找到任何解决方案。如果JBoss团队尚未实现此功能,我现在如何解决此问题?

我尝试将服务手动添加到JNDI上下文中,但是由于JNDI上下文是只读(根据https://issues.jboss.org/browse/AS7-421)而出现异常

最佳答案

它尚未完全集成(可以监视JBOSGI-81来检查状态),但是我认为您可以通过采用Apache Aries JNDI OSGi软件包并将其部署在JBoss AS7中来使其工作。

为此,请部署并启动

  • Aries JNDI bundle
  • Aries Proxy bundle
  • Aries Util bundle

  • JNDI捆绑软件会抱怨说它无法使用NamingManager设置某些静态变量,但是您可以忽略它,因为AS7 JNDI会处理这些问题。
    安装上述捆绑包后,您应该可以
    osgi:service/org.foo.SomeInterface
    


    osgi:servicelist
    

    输入查询...您可以尝试以下方法来查找框架注册的启动级别服务:
    osgi:service/org.osgi.service.startlevel.StartLevel
    

    我刚刚在AS7 7.1.2上尝试过,它对我有用...

    需要注意的一件事是,如果您要查找的实体实现了在另一个AS7 / MSC模块或OSGi捆绑包中定义的接口,那么如果您希望能够转换为该接口,则需要确保使用者对其具有可见性。在OSGi世界中,您只能导入软件包,但是在AS7模块(例如war文件)中,您可以通过添加Dependencies清单标头来实现。

    10-06 12:35
    查看更多