我正在使用 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 bundle 并将它们部署在 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 包中定义的接口(interface),如果您希望能够转换为这个界面。在 OSGi 世界中,您可以只导入包,但在 AS7 模块(例如 war 文件)中,您可以通过添加 Dependencies list header 来实现。
关于jboss - 无法通过 JNDI 查找 OSGI 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10483740/