在JBoss 7.0.1中使用MDB示例?

时间:2011-09-25 13:53:13

标签: jboss ejb-3.0 jboss7.x message-driven-bean

这是一个曾经在JBoss 5.1中为我工作的EJB3 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的任何组合都没有任何影响(将destinationType提升为{{1}没有产生错误!)。我已经尝试将目标属性设置为所有可能的JNDI组合。

我已针对javax.jms.XXX检查了standalone.xml,但没有实质性差异。

离我最近的任何错误是:

standalone-preview.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] 得到了,正如我在其他地方看到的那样。

1 个答案:

答案 0 :(得分:1)

我终于设法解决了这个问题。 JNDI是一只红鲱鱼。我不需要升级到JBoss 7.1.0alpha,也不需要更改我的项目以使用Java EE 6部署(将我的EJB移动到WAR中)。

最后,我需要做的就是将关闭 JBoss的EJB3“lite”模式(在我复制的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
{
    [...]
}

<强>更新

“EJB lite”模式has been removed

相关问题