jboss - 如何在 JBoss 5 中订购 EJB 和 JMS 队列配置的部署?

标签 jboss jms ejb ear jboss-messaging

我正在使用 JBoss [EAP] 5.0.0.GA 并且我有一个 EAR,其中包含一个 EJB jar,其中包含一些 MDB,这些 MDB 取决于它们使用的 JMS 队列的存在。当我在 .../server/all/deploy/messaging/myqueues-service.xml 中配置队列时没有问题。

但是,我想在 EAR 文件中配置队列以避免必须直接更改 JBoss 配置。没问题,我把我的myqueues-service.xml文件到 EAR 的根目录并添加对我的 jboss-app.xml 的引用如下:

<jboss-app>
    <module-order>strict</module-order>
    <loader-repository>
        seam.jboss.org:loader=my-ear.ear
    </loader-repository>
    <module>
        <service>myqueues-service.xml</service>
    </module>
</jboss-app>

但是,当我这样做时,JBoss 首先加载 EJB jar(包含在 my-ear.ear 中),然后再配置 JMS 队列。这会在加载 MDB 时导致错误:
12:16:02,714 WARN  [JmsActivation] Failure in jms activation org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@13a59e .....
javax.naming.NameNotFoundException: MyQueue not bound

这不是一个大问题,因为稍后 MDB 成功地重新连接到 JMS:
12:16:12,698 INFO  [JmsActivation] Attempting to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@f91ad5
12:16:12,823 INFO  [JmsActivation] Reconnected with messaging provider.

但我真的很想避免出现任何错误,为了做到这一点,我需要一种方法来强制 JBoss 在加载 EJB jar 之前先配置 JMS 队列。有没有办法做到这一点?作为引用,这里是 application.xml对于 EAR:
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
  <display-name>my-ear</display-name>
  <module>
    <ejb>my-ejb.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>my.war</web-uri>
      <context-root>myroot</context-root>
    </web>
  </module>
</application>

任何建议表示赞赏。

最佳答案

好的,jaikiran pai在 community.jboss.org 论坛上帮助了我。解决方案是添加 JMS 队列作为对 MDB 的依赖项。就我而言,我使用了 @Depends 注释:

@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/MyQueue") })
@Depends("jboss.messaging.destination:service=Queue,name=MyQueue")
public class MyMessageListener implements MessageListener {
    ...
}

如果你不使用注解,你可以使用 jboss.xml 做同样的事情。

关于jboss - 如何在 JBoss 5 中订购 EJB 和 JMS 队列配置的部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4616078/

相关文章:

spring - IBM MQ 与 JMS - Spring 实现

java - 我需要担心此 JBoss Wildfly EJB 调试消息吗?

jboss 集群 session 复制不起作用(多个 jsessionid cookie)

jboss - JBoss的默认密码

java - JMS队列怎么画?

java - 设置HornetQ Embedded-Remote示例

java - 无法调用注释处理器 - 在 Weblogic 12.2.1.2.0 中部署时

session - 在远程调用期间管理无状态 EJB 的 "session"或调用上下文的技术是什么?

jpa - 通过使用 Vaadin-CDI-Integration Addon 启用 EJB 注入(inject) Vaadin 7 UI

java - 使用 PrimePush 时出现 NullPointerException