将蓝图OSGi服务注入JSF / PrimeFaces bean

时间:2013-07-31 05:39:32

标签: jsf primefaces osgi blueprint-osgi

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

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

请帮帮我吗?

1 个答案:

答案 0 :(得分:1)

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

  • 我们创建了一个监听器:
    • 创建跟踪附加到同一捆绑包的BlueprintContainer服务的ServiceTracker
    • 将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后,将以在蓝图容器中搜索组件实例的id-s的方式评估所有el-expression。如果你说faces-config.xml中的bean属性值为#{myComponent},它将在BlueprintContainer中搜索。