【问题标题】:JavaEE 7: CDI+OSGI - one real exampleJavaEE 7:CDI+OSGI——一个真实的例子
【发布时间】:2014-08-01 02:32:40
【问题描述】:

有两种很棒的技术 OSGI 和 CDI,我是这两种技术的新手。我使用 glassfish 4,当我开始使用它时,我希望如此出色的服务器能够提供我所学到的一切。现在我需要同时使用这两种技术。所以我在实践中所拥有的:

Bundle1 - servlet 作为前端控制器 + jsp
Bundle2 - 服务 提供控制器、命令、[模型]
Bundle3 - EJB。

我可以将 EJB 注入到 servlet - 没关系。我可以向 servlet 注入服务——没关系。但我不能做最必要的事情——我不能将 EJB 注入我的控制器/命令/模型等——在这里我必须手动查找 EJB,但我想使用 CDI!

我的想法:问题是我不能在没有 new 的情况下从 bundle2 创建这些对象!!!因为 osgi bundle 中的入口点是 osgi 服务。其他捆绑包通过其服务与此捆绑包一起使用。所以,我必须将我的对象注入到服务中——但这不起作用。以下是两个可能的原因:

  1. 我做错了什么
  2. weld\fighterfish 不支持它。

如果有人在我的想法中看到我的错误,请纠正我。所以问题是——我可以在控制器/命令中注入 EJB,由 bundle 2 的服务提供还是不可能?

【问题讨论】:

    标签: java jakarta-ee dependency-injection osgi cdi


    【解决方案1】:

    只需对 bundle 2 中的服务使用无状态会话 bean。这样您就可以轻松地注入 EJB。

    【讨论】:

    • 谢谢。您认为在 bundle 2 中使用无状态 EJB 作为服务是唯一的方法吗?
    • 这不是唯一的方法,而是最简单的方法。如果您使用 CDI 启动服务,则注入 CDI 资源很容易。如果您使用捆绑激活器启动它们,则 CDI 注释将不起作用。
    • 请解释一下 - “如果您使用 CDI 启动服务,那么注入 CDI 资源很容易。”如何启动我的服务以便在其中注入控制器?我的意思是在 bundle2 中不使用 EJB 作为服务。
    • 您当然可以使用激活器,但您没有 CDI 注释。顺便提一句。您可以使用 CDI 注入其他 OSGi 服务。
    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多