我正在使用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中来使其工作。
为此,请部署并启动
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清单标头来实现。