【问题标题】:@Stateless and @Stateful @..scoped in Karaf while migrating CDI app to OSGi将 CDI 应用程序迁移到 OSGi 时,@Stateless 和 @Stateful @..scoped 在 Karaf 中
【发布时间】:2018-01-22 14:12:34
【问题描述】:

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

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

  1. blueprint-maven-plugin 如何处理@Stateful@Stateless 注释 和 @ApplicationScoped@SessionScoped@RequestScoped 等在豆子上 在制作蓝图文件时
  2. 另外,假设我要编写一个使用 CDI 的新代码,我希望它也可以部署到 Karaf。那我该怎么写 那一块?我应该避免使用@Stateful、@Stateless 注释吗?
  3. 那些注释(如果它们出于任何原因与我部署到 OSGi 的情况无关)将如何由该 OSGi 解释 容器(Karaf),因为这些注释确实存在于代码中?

【问题讨论】:

  • 我发现这也很有用stackoverflow.com/a/3568041/8305572,因为问题的上下文是关于减少与特定容器/环境的耦合.. 即使我们对 OSGi 与非 OSGi 部署有所怀疑。我相信@ST.Kee 的答案当然会成为答案,因为它们已经不多了。

标签: osgi cdi karaf blueprint-osgi blueprint


【解决方案1】:
  1. 在快速扫描 maven-blueprint-plugin source code 之后。似乎 EJB 注释 Stateless、Stateful 和 *Scope 不是由插件处理的。
  2. @Stateless 和 @Stateful 并不是 CDI 的真正组成部分,而是它的扩展 (EJB)。如果您真的喜欢 EJB 的功能,请考虑使用 karaf 中的 OpenEJB 功能。只要 @Inject 是一个有效的 bean,你应该能够在没有这些注释的情况下执行它。

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

例如您可以使用 new 关键字实例化一个 EJB 并对其执行单元测试(当然使用 setter 完成所有注入)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2019-03-31
    • 2016-10-13
    • 2013-02-14
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多