2011-01-06 27 views
5

我正在使用JBoss [EAP] 5.0.0.GA,並且我有一個EAR,它包含一個EJB jar,其中包含一些MDB,這些MDB依賴於它們使用的JMS隊列的存在。當我在.../server/all/deploy/messaging/myqueues-service.xml中配置隊列時,沒有問題。如何訂購JBoss 5中EJB和JMS隊列配置的部署?

但是,我想配置EAR文件中的隊列以避免直接更改JBoss配置。沒問題,我把我的myqueues-service.xml文件到耳根,並添加引用我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(包含在我的耳朵。耳朵),然後配置JMS隊列。這將導致錯誤的MDB被加載時:

12:16:02,714 WARN [JmsActivation] Failure in jms activation [email protected] ..... 
javax.naming.NameNotFoundException: MyQueue not bound 

這不是一個巨大的問題,因爲後來的多邊開發銀行成功地重新連接到JMS:

12:16:12,698 INFO [JmsActivation] Attempting to reconnect [email protected] 
12:16:12,823 INFO [JmsActivation] Reconnected with messaging provider. 

但我真的很想避免任何錯誤,爲了做到這一點,我需要一種方法來強制JBoss在加載EJB jar之前先配置JMS隊列。有沒有辦法做到這一點?作爲參考,這裏是EAR的application.xml

<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> 

任何建議表示讚賞。

回答

6

好的,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相同。

+1

只是更有用一點:如果您不想將myqueues-service.xml文件放入.../server/all/deploy/messaging /文件夾中,並且不想將其包含在EAR,那麼你可以把它放在.../server/all/deploy /中(使用Eclipse中的「Make Deployable」,或者只是在那裏複製它)。這消除了在MDB中聲明顯式依賴關係的需要,同時又不會更改默認的JBoss服務器配置。 – mluisbrown 2011-01-10 12:20:13