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