[jboss-user] [JBossMQ] - MDB sending messages
MarcusDidiusFalco
do-not-reply at jboss.com
Wed Jul 30 09:18:53 EDT 2008
Hallo I am experimenting with a MDB which should also be able to send back a message.
On JBoss 4.2.2.GA out of the box.
| package mdbean;
|
| import javax.annotation.PostConstruct;
| import javax.annotation.PreDestroy;
| import javax.annotation.Resource;
| import javax.ejb.ActivationConfigProperty;
| import javax.ejb.MessageDriven;
| import javax.jms.JMSException;
| import javax.jms.Message;
| import javax.jms.MessageListener;
| import javax.jms.Queue;
| import javax.jms.QueueConnection;
| import javax.jms.QueueConnectionFactory;
| import javax.jms.QueueSender;
| import javax.jms.QueueSession;
| import javax.jms.Session;
| import javax.jms.TextMessage;
| import javax.naming.Context;
| import javax.naming.InitialContext;
| import javax.naming.NamingException;
|
| import org.apache.log4j.Logger;
| import org.jboss.remoting.transport.coyote.ResponseMap;
|
| @MessageDriven(activationConfig = {
| @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
| @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/BafoegQueue"),
| @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
| public class JobControllerMDB implements MessageListener {
|
| private Logger log;
| @Resource(mappedName="QueueConnectionFactory")
| private QueueConnectionFactory queueConnectionFactory;
| private QueueConnection queueConnection;
| private QueueSession queueSession;
| @Resource(mappedName="BafoegRepsonseQueue")
| private Queue responseQueue;
|
| @PostConstruct
| public void init() {
| this.log = Logger.getLogger(this.getClass());
| try {
| this.queueConnection = queueConnectionFactory
| .createQueueConnection();
| this.queueSession = queueConnection.createQueueSession(false,
| Session.AUTO_ACKNOWLEDGE);
| queueConnection.start();
|
|
| } catch (JMSException e) {
| // TODO Auto-generated catch block
| e.printStackTrace();
| }
| }
|
| public void onMessage(Message message) {
| log.info("Server onMessage");
| if (message instanceof TextMessage) {
| TextMessage textMessage = (TextMessage) message;
| try {
| log.info(textMessage.getText());
| QueueSender queueSender = queueSession.createSender(responseQueue);
| TextMessage responseTextMessage = this.queueSession.createTextMessage("foobar");
| queueSender.send(responseTextMessage);
| } catch (JMSException e) {
| log.error(e);
| }
| }
|
| }
|
| @PreDestroy
| public void destroy() {
|
| }
|
| }
|
When this MDB receives a message following exception is thrown
| 2008-07-30 15:06:15,524 DEBUG [org.jboss.ejb3.InitialContextFactory] Unable to access HA JNDI: javax.management.InstanceNotFoundException: jboss:service=HAJNDI is not registered.
| 2008-07-30 15:06:15,524 ERROR [org.jboss.resource.adapter.jms.inflow.JmsServerSession] Unexpected error delivering message SpyTextMessage {
| Header {
| jmsDestination : QUEUE.BafoegQueue
| jmsDeliveryMode : 2
| jmsExpiration : 0
| jmsPriority : 4
| jmsMessageID : ID:32-12174231755081
| jmsTimeStamp : 1217423175508
| jmsCorrelationID: null
| jmsReplyTo : null
| jmsType : null
| jmsRedelivered : true
| jmsProperties : {JMS_JBOSS_REDELIVERY_COUNT=5}
| jmsPropReadWrite: false
| msgReadOnly : true
| producerClientId: ID:32
| }
| Body {
| text :blubber
| }
| }
| java.lang.NullPointerException
| at org.jboss.ejb3.JndiUtil.lookup(JndiUtil.java:49)
| at org.jboss.injection.JndiPropertyInjector.lookup(JndiPropertyInjector.java:87)
| at org.jboss.injection.JndiPropertyInjector.inject(JndiPropertyInjector.java:112)
| at org.jboss.injection.JndiPropertyInjector.inject(JndiPropertyInjector.java:107)
| at org.jboss.injection.JndiPropertyInjector.inject(JndiPropertyInjector.java:65)
| at org.jboss.ejb3.AbstractPool.create(AbstractPool.java:111)
| at org.jboss.ejb3.StrictMaxPool.get(StrictMaxPool.java:141)
| at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
| at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249)
| at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
| at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
| at $Proxy110.onMessage(Unknown Source)
| at org.jboss.resource.adapter.jms.inflow.JmsServerSession.onMessage(JmsServerSession.java:178)
| at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:891)
| at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:170)
| at org.jboss.mq.SpySession.run(SpySession.java:323)
| at org.jboss.resource.adapter.jms.inflow.JmsServerSession.run(JmsServerSession.java:237)
| 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:595)
| 2008-07-30 15:06:15,540 WARN [org.jboss.resource.adapter.jms.inflow.dlq.AbstractDLQHandler] Message redelivered=6 max=5 sending it to the dlq SpyTextMessage {
| Header {
| jmsDestination : QUEUE.BafoegQueue
| jmsDeliveryMode : 2
| jmsExpiration : 0
| jmsPriority : 4
| jmsMessageID : ID:32-12174231755081
| jmsTimeStamp : 1217423175508
| jmsCorrelationID: null
| jmsReplyTo : null
| jmsType : null
| jmsRedelivered : true
| jmsProperties : {JMS_JBOSS_REDELIVERY_COUNT=6}
| jmsPropReadWrite: false
| msgReadOnly : true
| producerClientId: ID:32
| }
| Body {
| text :blubber
| }
| }
| 2008-07-30 15:06:15,977 DEBUG [org.jboss.mq.il.uil2.ServerSocketManagerHandler] Exiting on IOE
| java.net.SocketException: Connection reset
| at java.net.SocketInputStream.read(SocketInputStream.java:168)
| at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
| at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
| at org.jboss.util.stream.NotifyingBufferedInputStream.read(NotifyingBufferedInputStream.java:79)
| at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2196)
| at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2376)
| at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2443)
| at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2515)
| at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2664)
| at java.io.ObjectInputStream.readByte(ObjectInputStream.java:875)
| at org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:340)
| at java.lang.Thread.run(Thread.java:595)
|
I had also tried looking up the QueueConnectionFactory and the queue.
For the queue I had received a NameNotFoundException. Although the queue is clearly bound.
| +- queue (class: org.jnp.interfaces.NamingContext)
| | +- D (class: org.jboss.mq.SpyQueue)
| .....
| | +- BafoegQueue (class: org.jboss.mq.SpyQueue)
| | +- BafoegRepsonseQueue (class: org.jboss.mq.SpyQueue)
|
I have both tried "queue/BafoegRepsonseQueue"
and "BafoegRepsonseQueue".
Can anybody help me with this?
Thanks,
Hans
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4167617#4167617
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4167617
More information about the jboss-user
mailing list