在将CDI应用程序迁移到OSGi时,@ Stateless和@Stateful @ ..作用于Karaf

时间:2018-01-22 14:12:35

标签: osgi cdi karaf blueprint-osgi blueprint

我最近对Talend http://coders.talend.com/提出的移民计划着了迷。 (我猜)通过谈话记录here Andrei Shakirin 的演讲presentation。 我看过他的同事 Christian Schneider 制作的很多出版物。

当然,主题的一部分是Christian的blueprint-maven-plugin。 上面链接的演示文稿说明如何可以将相同的代码库连续部署到常见的Java EE容器(如Tomcat)和OSGi容器(如Karaf),这正是我感兴趣的(例如,不是Tomcat,而是Wildfly或Glassfish) 所以,我想知道:

  1. blueprint-maven-plugin如何处理int _a = 1; int a = 2; int a_ = 3; if (_a == 1 && a == 2 && a_ == 3) { System.out.println("Success"); } @Stateful注释 和bean上的@Stateless@ApplicationScoped@SessionScoped等 在制作蓝图文件时
  2. 另外,我说有一个新代码可以使用CDI,我希望它也可以部署到Karaf。那我该怎么写呢 那件?我应该避免@Stateful,@ Stateless注释吗?
  3. 这些注释(如果因为任何原因与我部署到OSGi时的情况无关)将由OSGi解释 容器(Karaf),因为那些注释会出现在代码中吗?

1 个答案:

答案 0 :(得分:0)

  1. 快速扫描maven-blueprint-plugin source code后。看起来像EJB注释无状态,有状态和*范围不由插件处理。
  2. @Stateless和@Stateful实际上不是CDI的一部分,而是它的扩展(EJB)。如果您真的喜欢EJB所做的事情,请考虑在karaf中使用OpenEJB功能。只要这是一个有效的bean,你应该可以在没有这些注释的情况下进行@Inject。

  3. 注释只是源代码的标记(换句话说,它们不做任何事情),除非有一个处理器注册处理它们,否则它不会做任何事情。

  4. E.g。您可以使用new关键字实例化EJB并对其执行单元测试(当然,使用setter完成所有注入)

    声明: 我自己并没有真正使用这个插件,并且可能有更新版本的插件支持这些ejb注释。