java - 消息驱动 Bean 是否应该部署在 .ear 文件中?

标签 java jakarta-ee cdi message-driven-bean

我有一个构建为 .war 文件的应用程序,我们有读取 JMS 队列的新要求,我尝试添加 ejb-jar.xml 文件并指向消息监听器,但没有消息由已部署的应用程序接收,并且部署日志不显示有关消息驱动 bean 的任何信息。想知道 .ear 结构是否与整个事情有关。

环境:CDI、MyBatis、Wildfly 9.2、Java 1.8

谢谢。

最佳答案

您似乎正在尝试使用 Java EE 7 Web 配置文件,它定义了哪些 EE 7 规范组件必须由支持仅 WAR 部署的容器实现。

此配置文件表示必须实现“Enterprise JavaBeans (EJB) 3.2 Lite”规范的要求。

EJB Lite 规范需要支持:

  • 仅限无状态、有状态和单例 session Bean 组件
    • 仅限本地业务界面和无界面 View
  • 容器管理的事务和 Bean 管理的事务
  • 声明式和编程式安全性
  • 拦截器
  • 本地异步 session Bean 调用
  • 非持久性 EJB 定时器服务
  • 部署描述符支持 (ejb-jar.xml)

目前 WAR 部署中不支持消息驱动 Bean。

因此你有两个选择:

  1. 将您的应用程序迁移到包含 EJB 模块和 WAR 模块的完整 EAR 部署;
  2. 如果您的消息驱动 Bean 与 Web 模块完全解耦,那么您可以将它们部署在独立的 EJB 模块中。如果您需要共享 JPA 实体或其他库,那么 EAR 是一种更简单的方法。

关于java - 消息驱动 Bean 是否应该部署在 .ear 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160306/

相关文章:

Java String - 查看字符串是否仅包含数字而不包含字母

java - onPreviewFrame 未被调用

java - 如何从 JNDI 名称中删除耳朵名称

java - 嵌套事务和 EJBContext 的 setRollbackOnly()

jakarta-ee - 拦截器真的默认禁用了吗?

Java HashMap 自动值复制问题

java - 处理多个 HTTP 连接

java - KeyCloak - 以编程方式创建领域/用户/组?

java - CDI - 在运行时注入(inject)类

jakarta-ee - WELD-001408 在注入(inject)点带有限定符 [@Named] 的类型 [LdapService] 的依赖关系不满足