【问题标题】:Injecting blueprint OSGi service into JSF/PrimeFaces bean将蓝图 OSGi 服务注入 JSF/PrimeFaces bean
【发布时间】:2013-07-31 12:10:43
【问题描述】:

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

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

你能帮帮我吗?

【问题讨论】:

    标签: jsf primefaces osgi blueprint-osgi


    【解决方案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-表达式都将按照在蓝图容器内搜索组件实例的 id-s 的方式进行评估。如果您说您的 faces-config.xml 中有一个值为 #{myComponent} 的 bean-property,它将在 BlueprintContainer 中进行搜索。

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 2017-09-22
      • 2016-03-16
      • 1970-01-01
      • 2012-05-12
      • 2012-02-12
      • 2012-08-12
      • 2015-04-15
      • 2013-06-25
      相关资源
      最近更新 更多