无法通过JNDI查找OSGI服务

Iva*_*van 3 jboss osgi jndi

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

我尝试手动将我的服务添加到JNDI上下文但得到了一个例外,因为JNDI上下文是只读的(根据https://issues.jboss.org/browse/AS7-421)

Dav*_*ert 6

它尚未完全集成(监视JBOSGI-81以检查状态),但是我认为你可以通过使用Apache Aries JNDI OSGi包并在JBoss AS7中部署它们来完成这项工作.

为此,请部署并启动

JNDI包会抱怨它不能用NamingManager设置一些静态,但你可以忽略它,因为AS7 JNDI负责这一点.安装上面的软件包你应该可以做到

osgi:service/org.foo.SomeInterface
Run Code Online (Sandbox Code Playgroud)

osgi:servicelist 
Run Code Online (Sandbox Code Playgroud)

类型查找...例如,您可以尝试以下方法来查找框架注册的Start Level Service:

osgi:service/org.osgi.service.startlevel.StartLevel
Run Code Online (Sandbox Code Playgroud)

我只是尝试使用AS7 7.1.2,它对我有用...

有一点需要注意,如果您正在查找的实体实现了在另一个AS7/MSC模块或OSGi包中定义的接口,那么如果您希望能够转换到此接口,则需要确保消费者可以看到它.在OSGi世界中,您只需导入包,但在AS7模块(例如war文件)中,您可以通过添加Dependencies清单标头来实现此目的.