0

我正在使用 JBoss AS 7。据我了解,它带有 felix 作为 ogsi 容器。我一直将 JBoss 用作普通 Java EE Web 应用程序 (webapp) 的容器。但是,我遇到了很多依赖冲突,我正在重构我的一些代码以成为捆绑包(用于 osgi)。我的问题如下。

  • 我可以从我的 webapp 访问 osgi 服务吗?请注意,webapp 将正常部署,而不是通过 osgi(它不是 webapp 包,也称为 wab)。如果是这样,请向我提供一些有关如何执行此操作的参考链接。我已经看到了相反的例子(从 osgi 包访问 webapp,但我认为 webapp 是作为 wab 部署的)。
  • 是否可以从 webapp 以编程方式控制捆绑包的生命周期(停止、卸载、启动、安装)?

谢谢你的帮助。

4

1 回答 1

1

从您的 Web 应用程序访问 OSGi 服务很容易。

首先,您需要 MANIFEST.MF 中的 Dependencies,它通常会部署
到 webapp/META-INF 文件夹。

要添加的依赖项是 org.osgi.core 和 org.jboss.osgi.framework 以及您部署的 Bundles 作为 deployment.yourbundle:version。

例如你的包被命名为“yourbundle_1.0.0.1.jar”:

Manifest-Version: 1.0
Built-By: me
Build-Jdk: 1.7.0_09
Dependencies: org.osgi.core,org.jboss.osgi.framework,deployment.yourbundle:1.0.0.1

在 Activator 类中将您的捆绑包注册为服务(应该已经完成​​):

public void start(BundleContext bundleContext) throws Exception {

    context.registerService(YourBundleService.class.getName(), new YourBundle(),null);
}

在 JBoss AS 中访问 OSGi BundleContext 需要一个 EJB:

@Stateless
public class OSGiServiceBean {
    @Resource
    BundleContext context;

    public YourBundleService getBundleService() {
        ServiceReference sref = context.getServiceReference(YourBundleService.class.getName());

        return (YourBundleService) context.getService(sref);
    }
}
于 2013-07-04T11:54:21.440 回答