Рабочий пример MDB в JBoss 7.0.1? - PullRequest
1 голос
/ 25 сентября 2011

Вот EJB3 MDB, который работал для меня в JBoss 5.1:

@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 начиная с 7.0.0 и прочитал десятки JIRA, не говоря уже о руководстве по миграции, документах EJB3 и т. Д., Но я 'Я в замешательстве.Я знаю, что MDB должны работать в 7.0.1, но можно ли это сделать?Я думаю, что это довольно простой случай, поэтому у кого-нибудь есть простой рабочий пример, один документ, в котором точно указано, что работает / не работает в 7.0.1, или руководство по миграции?

Редактировать: простоЯ хотел бы добавить, что это мой единственный EJB, так что это, вероятно, такая же проблема EJB, как и проблема JMS / MDB.

Обновления:

Я могуразверните манекен @Stateless без проблем, но никакая комбинация @MessageDriven / @ActivationConfigProperty не оказала никакого влияния (передача destinationType в javax.jms.XXX не дает ошибок!).Я попытался установить для свойства назначения все возможные комбинации 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"), как я видел в другом месте.

1 Ответ

1 голос
/ 28 сентября 2011

Мне наконец удалось решить это самому.JNDI была красная сельдь.Мне не нужно было обновляться до JBoss 7.1.0alpha, и при этом мне не нужно было менять свой проект для использования развертывания Java EE 6 (перемещения моих EJB в WAR).

В конце концов, все, что мне нужноdo выключил "облегченный" режим EJB3 JBoss (для true был установлен true в standalone-preview.xml, из которого я скопировал).Предположительно 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 удален !

...