2011-09-25 61 views
1

這裏有一個EJB3 MDB是爲我所用JBoss中5.1的工作:在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 
{ 
    [...] 
} 

嘗試,因爲我可能,我不能把這遷移到JBoss 7.0.1 。 JMS設置正常,我可以發佈到目的地OK(從我的主JAR),但是我的EJB偵聽器只是不聽。我得到我EJB/WAR/EAR沒有部署或運行​​時錯誤

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名稱按照指示,所以這是我現在有:

// 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 
{ 
    [...] 
} 

在部署之前將所有記錄器設置爲ALL表明我提到的唯一一次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相結合,就沒有任何影響(bodging的destinationTypejavax.jms.XXX產生沒有錯誤!)。我試着將目標屬性設置爲所有可能的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可能是其中一個(全局,應用程序,模塊) – stratwine

+0

感謝您的建議。我現在在MDB中指定了'java:/ global/topic/IncomingArticleNotificationsDest',但JBoss總是在'java:/'下面部署這些主題(在我看到的每個示例中,它都是'standalone .xml'是「topic/XYZ'」)。最終的結果是我的MDB仍然沒有被調用。 (順便說一句,我創建了一個虛擬的'@ Stateless' bean,部署良好。) –

+0

看起來像一些[啓動配置像這樣](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「精簡」模式(在從我複製的standalone-preview.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

嗨。感謝您的最後一篇文章。 但我仍然有JBoss 7.0.2.Final的這個問題,即使我設置lite =「false」。 必須使用哪些JBoss版本才能使MDB工作? Thks – kiki

+0

我建議完全刪除您的「lite」屬性,因爲默認值爲false,並且無論如何都會被取消支持。我還建議對standalone-full.xml仔細檢查standalone.xml,以確保沒有任何可能導致EJB/EJB3/JMS無法使用的差異。 –