1

我有一个建立在顶级 OSGi 和 Karaf 服务器上的项目。对于依赖注入,我们使用 Aries Blueprint。该项目的主要部分是一个 Apache Camel 路由和集成的东西,但是现在我需要创建一些维护 web 界面。所以我尝试了 JSF - PrimeFaces 的实现。我能够创建一些演示,它可以在 Karaf 下的 OSGi 中运行,没关系。

现在我想知道是否可以在这里使用蓝图,引用我们拥有的一些已经存在的 OSGi 服务并将服务注入 JSF Bean,这样我们就可以从已经编写的代码中受益。

你能帮我吗?

4

1 回答 1

1

我们通过以下方式解决了这个问题:

  • 我们创建了一个监听器:
    • 创建一个 ServiceTracker 来跟踪附加到同一捆绑包的 BlueprintContainer 服务
    • 将 servicetracker 放入 ServletContext 属性中
  • 我们创建了一个使用这个 ServiceTracker 的 ELResolver,如果有一个 BlueprintContainer 可用,它使用它的 getComponentInstance 来获取值
  • 侦听器在应用程序初始化期间打开 servicetracer,并在应用程序销毁期间将其关闭

我们的监听器类:https ://source.everit.biz/svn/everit-util/trunk/core/src/main/java/org/everit/util/core/servlet/ServiceLoaderListener.java

我们的 EL 解析器类:https ://source.everit.biz/svn/everit-util/trunk/core/src/main/java/org/everit/util/core/el/OsgiELResolver.java

用户/通行证:访客/访客

在您注册您的自定义 el-resolver 后,所有 el-expression 将按照在蓝图容器内搜索组件实例的 id-s 的方式进行评估。如果您说您的 faces-config.xml 中有一个值为 #{myComponent} 的 bean-property,它将在 BlueprintContainer 中进行搜索。

于 2013-07-31T11:47:13.630 回答