无法通过JNDI查找OSGI服务

时间:2012-05-07 14:19:27

标签: jboss osgi jndi

我正在使用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

1 个答案:

答案 0 :(得分:6)

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

要执行此操作,请部署并启动

JNDI包会抱怨它不能用NamingManager设置一些静态,但你可以忽略它,因为AS7 JNDI会处理这个问题。 安装上面的软件包后,您应该可以

osgi:service/org.foo.SomeInterface

osgi:servicelist 

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

osgi:service/org.osgi.service.startlevel.StartLevel

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

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