2011-01-06 4 views
5

JBoss [EAP] 5.0.0.GA를 사용하고 있으며 사용하는 JMS 대기열의 존재 여부에 따라 일부 MDB가 포함 된 EJB jar가 포함 된 EAR이 있습니다. .../server/all/deploy/messaging/myqueues-service.xml에 대기열을 구성 할 때 아무런 문제가 없었습니다.JBoss 5에서 EJB 및 JMS 대기열 구성 배포를 주문하는 방법은 무엇입니까?

그러나 JBoss 구성을 직접 변경하지 않아도되도록 EAR 파일에 대기열을 구성하려고합니다. 문제 없습니다, 나는 EAR의 루트에 내 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> 

, 나는 보스가 내 귀에 포함 된 EJB 항아리 (로드하도록 할 때. ear)을 먼저 구성한 다음 나중에 JMS 대기열을 구성합니다. MDB를로드 할 때이 오류가 발생합니다

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

을하지만 난 정말 어떤을 피하기 위해 싶습니다

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

그것은으로 나중에 MDB를 성공적으로 JMS에 다시 연결, 큰 문제가되지 않습니다 오류가 발생하고이를 수행하기 위해 EJB jar를로드하기 전에 먼저 JBoss가 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

자, community.jboss.org 포럼의 jaikiran pai이 나를 도와주었습니다. 해결책은 JMS 대기열을 MDB에 대한 종속성으로 추가하는 것입니다. 당신이 주석을 사용하지 않는 경우

@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을 할 수있는 : 내 경우에는 내가 @Depends 주석을 사용했다.

+1

myqueues-service.xml 파일을 .../server/all/deploy/messaging/폴더에 넣지 않으려면 다음과 같이하면됩니다. EAR 중 하나를 선택하면 .../server/all/deploy /에 넣을 수 있습니다 (Eclipse에서 "Deploy Deployable"을 사용하거나 거기에 복사). 따라서 MDB에서 명시 적 종속성을 선언 할 필요가 없으며, 동시에 기본 JBoss 서버 구성을 변경하지 않아도됩니다. – mluisbrown