Рабочий пример MDB в JBoss 7.0.1?
Вот 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 настроен нормально, и я могу опубликовать в месте назначения ОК (из моего основного 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 ответ
Мне наконец удалось решить это самостоятельно. JNDI была красная сельдь. Мне не нужно было обновляться до JBoss 7.1.0alpha, и при этом мне не нужно было менять свой проект для использования развертывания Java EE 6 (перемещения EJB-компонентов в WAR).
В конце концов, все, что мне нужно было сделать, это отключить "облегченный" режим JBoss EJB3 (это было установлено в 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" был удален!