我正在使用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)
答案 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 清单标头来实现此目的。