在JBoss7.0.1中使用MDB示例?

在JBoss7.0.1中使用MDB示例?,jboss,ejb-3.0,jboss7.x,message-driven-bean,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 = {

下面是一个在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
{
    [...]
}
尽管我可能会尝试,但我无法将其迁移到JBoss7.0.1。JMS设置得很好,我可以发布到目的地(从我的主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
,这表明只有在
org.jboss.vfs.util.SuffixMatchFilter
看到MDB类时才会提到我的MDB类,这不太好

我一直在关注的问题,并已阅读了几十个JIRA,更不用说迁移指南、EJB3文档等,但我感到困惑。我知道MDB应该在7.0.1中工作,但是上面的方法可行吗?我认为我的例子很简单,那么有没有人有一个简单的工作示例,一个明确说明7.0.1中哪些是有效的/哪些不是有效的文档,或者一个迁移指南

编辑:我只是想补充一点,这是我唯一的EJB,所以这可能和JMS/MDB一样是EJB问题

更新:

我可以毫无问题地部署一个虚拟的
@Stateless
,但是
@MessageDriven
/
@ActivationConfigProperty
组合没有任何效果(将
destinationType
绑定到
javax.jms.XXX
不会产生错误!)。我已经尝试将destination属性设置为所有可能的JNDI组合

我已经将我的
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]

这可能是个问题吗?我通过添加
@ResourceAdapter(value=“hornetq ra.rar”)
得到了这个结果,正如我在其他地方看到的那样。

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

最后,我所需要做的就是关闭JBoss的EJB3“lite”模式(在我复制的standalone-preview.xml中设置为true)。这种模式可能不支持MDB。当我这么做的时候,我的MDB就变得可见了

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


“EJBLite”模式

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

最后,我所需要做的就是关闭JBoss的EJB3“lite”模式(在我复制的standalone-preview.xml中设置为true)。这种模式可能不支持MDB。当我这么做的时候,我的MDB就变得可见了

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


“EJBLite”模式

不确定,但我觉得
propertyValue=“java:/topic/incomingarticletnotificationsdest”
有点可疑。你确定那是对的吗?EJB3.1可移植JNDI名称看起来像
java:/topic/…
,其中xyz可能是(全局、应用、模块)之一,谢谢您的建议。我现在在MDB中指定了
java:/global/topic/incomingarticleonotificationsdest
,但是JBoss总是在
java:///code>下部署主题(在我所看到的每个示例中,
standalone.xml
中需要的输入格式是“
topic/XYZ
”)。最终的结果是我的MDB仍然没有被调用。(顺便说一句,我创建了一个虚拟的
@Stateless
bean,它部署得很好。)看起来AS-7.0.1需要一些。我不认为是这样,我已经在我的
standalone.xml
中获得了
urn:jboss:domain:messaging:1.0
部分,但我将尝试从头开始运行这个示例,看看会发生什么。我不明白的是,即使我在
@MessageDriven
中指定了错误的JNDI名称,我的MDB也会被完全忽略。没有部署错误,什么都没有…不确定,但是
propertyValue=“java:/topic/incomingarticleNotificationsTest”
看起来有点可疑。你确定那是对的吗?EJB3.1可移植JNDI名称看起来像
java:/topic/…
,其中xyz可能是(全局、应用、模块)之一,谢谢您的建议。我现在在MDB中指定了
java:/global/topic/incomingarticleonotificationsdest
,但是JBoss总是在
java:///code>下部署主题(在我所看到的每个示例中,
standalone.xml
中需要的输入格式是“
topic/XYZ
”)。最终的结果是我的MDB仍然没有被调用。(顺便说一句,我创建了一个虚拟的
@Stateless
bean,它部署得很好。)看起来AS-7.0.1需要一些。我不认为是这样,我已经在我的
standalone.xml
中获得了
urn:jboss:domain:messaging:1.0
部分,但我将尝试从头开始运行这个示例,看看会发生什么。我不明白的是,即使我在
@MessageDriven
中指定了错误的JNDI名称,我的MDB也会被完全忽略。没有部署错误,什么都没有…嗨。谢谢你的最后一篇文章。但是,即使我设置lite=“false”,JBoss 7.0.2.Final仍然存在这个问题。要使MDB正常工作,必须使用哪个JBoss版本??ThksI建议完全删除您的“lite”属性,因为默认值为false,而且无论如何它都不受支持。我还建议您仔细检查standalone.xml和standalone-full.xml,以确保没有任何可能导致EJB/EJB3/JMS无法工作的差异。谢谢你的最后一篇文章。但是,即使我设置lite=“false”,JBoss 7.0.2.Final仍然存在这个问题。要使MDB正常工作,必须使用哪个JBoss版本??我建议删除你的“lite”属性