2011-09-25 2 views
1

여기 보스 5.1에서 나를 위해 작동하는 데 사용되는 EJB3의 MDB이다 : 나는 수도로JBoss 7.0.1에서 MDB 예제를 사용하고 있습니까?

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
@org.jboss.ejb3.annotation.Depends("jboss.messaging.destination:service=Topic,name=IncomingArticleNotifications") 
@MessageDriven(
    activationConfig = { 
     @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"), 
     @ActivationConfigProperty(propertyName="destination", propertyValue="topic/IncomingArticleNotificationsDest"), 
     @ActivationConfigProperty(propertyName="subscriptionDurability", propertyValue="Durable"), 
     @ActivationConfigProperty(propertyName="messageSelector", propertyValue ="type='IncomingArticleNotification'") 
    } 
) 
public class IncomingArticleHandler implements MessageListener 
{ 
    [...] 
} 

보십시오, 나는 보스 7.0.1이를 마이그레이션 할 수 없습니다. JMS가 설정되었고, OK (메인 JAR의) OK (대기 행 아웃)에 퍼블리시 할 수 있지만, EJB 리스너는 그냥 듣지 않습니다. 그래서 여기 내가 지금 가지고있는 무엇,

01:02:40,600 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) Starting deployment of "product-ear-1.0-SNAPSHOT.ear" 
01:02:41,752 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "product-ejb-1.0-SNAPSHOT.jar" 
01:02:41,753 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "product.war" 

가 나는 또한 지침에 따라 같이 JNDI 이름을 고정했습니다 : 내 EJB/WAR/EAR에 대한 배포 또는 런타임 오류를얻을

// Ignore for now: @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
@ResourceAdapter("ejb3-rar.rar") // ??? As per docs. No idea what this should be, an attempt to get something working. 
@MessageDriven(
    activationConfig = { 
     @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"), 
     @ActivationConfigProperty(propertyName="destination", propertyValue="java:/topic/IncomingArticleNotificationsDest"), // updated 
     @ActivationConfigProperty(propertyName="subscriptionDurability", propertyValue="Durable") 
     // Ignore for now: @ActivationConfigProperty(propertyName="messageSelector", propertyValue ="type='IncomingArticleNotification'") 
    } 
) 
public class IncomingArticleHandler implements MessageListener 
{ 
    [...] 
} 

배포하기 전에 모든 로거를 으로 설정하면 내 MDB 클래스가 언급 된 유일한 시간은 org.jboss.vfs.util.SuffixMatchFilter에 표시되는 것으로 나타납니다. 이는 좋지 않습니다.

저는 MDB support since 7.0.0 호의 문제를 겪어 왔으며 수십 개의 JIRA를 읽었습니다. 마이그레이션 가이드, EJB3 문서 등은 물론이고 혼란 스럽습니다. MDB 이 7.0.1에서 작동해야하나요? 제 생각에는 제가 생각하기에 아주 간단한 사건입니다. 그렇다면 누구나 간단한 예제가 있습니다. 7.0.1에서 작동하지 않는 것이 정확히 무엇인지 설명하는 단일 문서 또는 마이그레이션 가이드입니까?

편집 : 단지 이것이 내 유일한 EJB라는 점을 추가 했으므로 아마도 JMS/MDB만큼 EJB 문제 일 것입니다.

업데이트 :

나는 아무런 문제 더미 @Stateless을 배포 할 수 있지만, @MessageDriven/@ActivationConfigProperty의 어떤 조합이 전혀 영향이 없었습니다 (javax.jms.XXXdestinationType가 오류를 생성하지 bodging를!). 모든 가능한 JNDI 조합에 대상 속성을 설정해 보았습니다.

에 대해 standalone.xml을 확인했으며 큰 차이는 없습니다.

00:53:25,886 DEBUG [org.hornetq.ra.Util] (MSC service thread 1-4) org.jboss.as.messaging.jms.TransactionManagerLocator from [Module "org.hornetq.ra:main" from local module loader @15a62c31 (roots: /Users/andrewregan/Desktop/jboss-as-7.0.1.Final/modules)]: java.lang.ClassNotFoundException: org.jboss.as.messaging.jms.TransactionManagerLocator from [Module "org.hornetq.ra:main" from local module loader @15a62c31 (roots: /Users/andrewregan/Desktop/jboss-as-7.0.1.Final/modules)] 
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:358) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:307) 
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:101) 
at org.hornetq.ra.Util.locateTM(Util.java:261) [hornetq-ra-2.2.7.Final.jar:] 
at org.hornetq.ra.HornetQResourceAdapter.locateTM(HornetQResourceAdapter.java:1555) [hornetq-ra-2.2.7.Final.jar:] 
at org.hornetq.ra.HornetQResourceAdapter.start(HornetQResourceAdapter.java:210) [hornetq-ra-2.2.7.Final.jar:] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_26] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_26] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_26] 
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_26] 
at org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer.startContext(AbstractResourceAdapterDeployer.java:339) [ironjacamar-deployers-common-1.0.3.Final.jar:1.0.3.Final] 
at org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer.createObjectsAndInjectValue(AbstractResourceAdapterDeployer.java:1883) [ironjacamar-deployers-common-1.0.3.Final.jar:1.0.3.Final] 
at org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer.createObjectsAndInjectValue(AbstractResourceAdapterDeployer.java:825) [ironjacamar-deployers-common-1.0.3.Final.jar:1.0.3.Final] 
at org.jboss.as.connector.services.ResourceAdapterActivatorService$ResourceAdapterActivator.doDeploy(ResourceAdapterActivatorService.java:140) [jboss-as-connector-7.0.1.Final.jar:7.0.1.Final] 
at org.jboss.as.connector.services.ResourceAdapterActivatorService.start(ResourceAdapterActivatorService.java:93) [jboss-as-connector-7.0.1.Final.jar:7.0.1.Final] 
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765) [jboss-msc-1.0.0.GA.jar:1.0.0.GA] 
at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291) [jboss-msc-1.0.0.GA.jar:1.0.0.GA] 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26] 
at java.lang.Thread.run(Thread.java:680) [:1.6.0_26] 

가 문제 될 수 있습니다

내가 오류의 종류에 도착 가장 가까운이 무엇입니까? 내가 다른 곳에서 제안한 것처럼 보았을 때 @ResourceAdapter(value="hornetq-ra.rar")을 추가하여 얻는다.

+0

잘 모르겠지만,'propertyValue = "java :/topic/IncomingArticleNotificationsDest"' 조금 의심 스럽습니다. 그게 틀림 없습니까? EJB 3.1 이식 가능한 JNDI 이름은'java : /topic/...'과 같이 보일 것입니다. 여기서 xyz는 (global, app, module) 중 하나 일 수 있습니다. – stratwine

+0

제안 해 주셔서 감사합니다. MDB에서'java :/global/topic/IncomingArticleNotificationsDest'를 지정하고 있습니다 만, JBoss는'java : /'아래에 항상 주제를 배치합니다 (내가 본 모든 예제에서'standalone .xml'은 "topic/XYZ'"입니다). 최종 결과는 내 MDB가 여전히 호출되지 않는다는 것입니다. (BTW, 나는 더미 @ @ Stateless' 빈을 만들고 괜찮게 배포합니다.) –

+0

일부 [startup config like this] (http://www.mastertheboss.com/jboss-application-server/327-developing-mdb)처럼 보입니다. -with-jboss-as-7.html)은 AS-7.0.1에서 필요합니다. – stratwine

답변

1

나는 마침내이 문제를 해결할 수있었습니다. JNDI는 붉은 청어였습니다. JBoss 7.1.0alpha로 업그레이드 할 필요가 없으며 Java EE 6 배치 (EJB를 WAR로 이동)를 사용하기 위해 프로젝트를 변경해야 할 필요도 없었습니다.

결국, 내가해야 할 일은 JBoss의 EJB3 "라이트"모드로 설정하는 것입니다 (이것은 내가 복사 한 독립 실행 형 -prefix.xml에서 true로 설정되었습니다). 아마도 MDB는 해당 모드에서 지원되지 않습니다. 이렇게하면 MDB가 보입니다.

<subsystem xmlns="urn:jboss:domain:ejb3:1.1" lite="false"> 
    [...] 
</subsystem> 

내 작업 MDB는 이제 다음과 같습니다

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
@MessageDriven(
    activationConfig = { 
     @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"), 
     @ActivationConfigProperty(propertyName="destination", propertyValue="java:/topic/IncomingArticleNotificationsDest"), 
     @ActivationConfigProperty(propertyName="subscriptionDurability", propertyValue="Durable"), 
     @ActivationConfigProperty(propertyName="messageSelector", propertyValue ="type='IncomingArticleNotification'"), 
     @ActivationConfigProperty(propertyName="clientID", propertyValue="myValue") // See: http://jgurukulam.blogspot.com/2011/09/jboss-7.html 
    } 
) 
public class IncomingArticleHandler implements MessageListener 
{ 
    [...] 
} 

UPDATE :

"EJB 라이트"모드 has been removed!

+0

안녕하세요. 마지막 게시물 주셔서 감사. 하지만 lite = "false"로 설정 한 경우에도 여전히 JBoss 7.0.2.Final에서이 문제가 발생합니다. MDB를 사용하려면 어떤 JBoss 버전을 사용해야합니까 ?? Thks – kiki

+0

"lite"속성을 모두 삭제하는 것이 좋습니다. 기본값은 false이며 어쨌든 지원되지 않습니다. 또한 standalone.xml을 standalone-full.xml과 비교하여 EJB/EJB3/JMS가 작동하지 않을 수있는 불일치가 없는지주의 깊게 확인하는 것이 좋습니다. –

관련 문제