我正在使用 JBossAS7。
我的应用程序有一些 OSGI 模块和大型非 OSGI 部分。
我尝试通过 JNDI 在非 osgi 子系统中查找 osgi 服务,但它们不存在于 JNDI 上下文中。
我发现类似的问题JBOSS 7 - JNDI 树中不存在 Osgi 捆绑包 https://stackoverflow.com/questions/7513242/jboss-7-osgi-bundles-not-present-in-jndi-tree但我在那里没有找到任何解决方案。如果JBoss团队还没有实现这个功能,我现在该如何解决这个问题呢?
我尝试手动将服务添加到 JNDI 上下文,但出现异常,因为 JNDI 上下文是只读的(根据https://issues.jboss.org/browse/AS7-421 https://issues.jboss.org/browse/AS7-421)
它还没有完全集成(监控JBOSGI-81 https://issues.jboss.org/browse/jbosgi-81检查状态),但是我认为您可以通过使用 Apache Aries JNDI OSGi 包并将它们部署在 JBoss AS7 中来完成这项工作。
为此,请部署并启动
- The Aries JNDI 捆绑包 http://search.maven.org/remotecontent?filepath=org/apache/aries/jndi/org.apache.aries.jndi/0.3.1/org.apache.aries.jndi-0.3.1.jar
- The 白羊座代理包 http://search.maven.org/remotecontent?filepath=org/apache/aries/proxy/org.apache.aries.proxy/0.4/org.apache.aries.proxy-0.4.jar
- The Aries 实用程序包 http://search.maven.org/remotecontent?filepath=org/apache/aries/org.apache.aries.util/0.4/org.apache.aries.util-0.4.jar
JNDI 包会抱怨它无法使用 NamingManager 设置某些静态值,但您可以忽略它,因为 AS7 JNDI 会处理这个问题。
安装上面的捆绑包后,您应该能够执行以下操作
osgi:service/org.foo.SomeInterface
and
osgi:servicelist
类型查找...例如您可以尝试以下操作来查找框架注册的启动级别服务:
osgi:service/org.osgi.service.startlevel.StartLevel
我刚刚用 AS7 7.1.2 尝试过,它对我有用......
需要注意的一件事是,如果您正在查找的实体实现了另一个 AS7/MSC 模块或 OSGi 包中定义的接口,那么如果您希望能够转换到该接口,则需要确保使用者对其具有可见性。在 OSGi 世界中,您只需导入包即可,但在 AS7 模块(例如 war 文件)中,您可以通过添加依赖关系清单标头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)