Own DLQ for EJB3-MDB via ActivationConfigProperty doesn't wo
camunda Feb 20, 2009 7:12 AMHi!
currently I have a problem with an EJB3-MDB which should have an own DLQ configured. As far as I found this can be done via ActivationConfigProperties in EJB3.
So I added these Annotations to my MDB:
@MessageDriven(name="CommandMessageDrivenBean", activationConfig = { @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue") ,@ActivationConfigProperty(propertyName="destination", propertyValue="queue/CommandQueue") ,@ActivationConfigProperty(propertyName="user",propertyValue="root") ,@ActivationConfigProperty(propertyName="password",propertyValue="xxx") ,@ActivationConfigProperty(propertyName="DLQJNDIName", propertyValue="queue/CommandDLQ") ,@ActivationConfigProperty(propertyName="DLQUser", propertyValue="root") ,@ActivationConfigProperty(propertyName="DLQPassword",propertyValue="xxx") ,@ActivationConfigProperty(propertyName="DLQMaxResent",propertyValue="0") }) public class CommandMDB implements MessageListener {
But still the default DLQ (queue/DLQ) is used if an exception is thrown in the MDB. This puzzles me.
If I configure a non existent queue in the ActivationConfigProperty "DLQJNDIName", I get an exception that the queue is not available:
2009-02-20 13:11:10,517 WARN WARN [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2)-11:) Failure in jms activation org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@716b8f(ra=org.jboss.resource.adapter.jms.JmsResourceAdapter@db19d3 destination=queue/CommandQueue isTopic=false tx=true durable=false reconnect=10 provider=java:/DefaultJMSProvider user=root pass=<not shown> maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/InvalidDLQ DLQUser=null DLQMaxResent=5) javax.naming.NameNotFoundException: queue/InvalidDLQ at org.jboss.ha.jndi.TreeHead.lookup(TreeHead.java:242) at org.jboss.ha.jndi.HAJNDI.lookup(HAJNDI.java:155) at sun.reflect.GeneratedMethodAccessor92.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.ha.framework.interfaces.HARMIClient.invoke(HARMIClient.java:312) at $Proxy255.lookup(Unknown Source) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:667) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627) at javax.naming.InitialContext.lookup(InitialContext.java:392) at org.jboss.util.naming.Util.lookup(Util.java:215) at org.jboss.resource.adapter.jms.inflow.dlq.AbstractDLQHandler.setupDLQDestination(AbstractDLQHandler.java:106) at org.jboss.resource.adapter.jms.inflow.dlq.AbstractDLQHandler.setup(AbstractDLQHandler.java:82) at org.jboss.resource.adapter.jms.inflow.dlq.JBossMQDLQHandler.setup(JBossMQDLQHandler.java:48) at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDLQ(JmsActivation.java:369) at org.jboss.resource.adapter.jms.inflow.JmsActivation.setup(JmsActivation.java:315) at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java:635) at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204) at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275) at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756) at java.lang.Thread.run(Thread.java:619)
So I think the property is read correctly...
Any ideas?
Thanks
Bernd