You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Eugene Prokopiev <pr...@stc.donpac.ru> on 2006/09/19 14:25:52 UTC
Exception on sending message in XA environment
Hi,
I need to get exception on send message in XA environment to rollback
transaction. In production I use Spring 2.0 with Message-Driven POJO,
Jencks (as XA-enabled connection pool only) and JOTM. Production
configuration is complex, so I write very simple sending message example
in standalone XA environment:
public class Producer {
public static void main(String[] args) throws Exception {
// start transaction manager
TMService jotm = new Jotm(true, false);
UserTransaction transaction = jotm.getUserTransaction();
TransactionManager transactionManager = jotm.getTransactionManager();
// start connection
ActiveMQXAConnectionFactory connectionFactory =
new ActiveMQXAConnectionFactory("tcp://localhost:5000");
XAConnection connection = connectionFactory.createXAConnection();
XASession session = connection.createXASession();
Destination destination = session.createQueue("error");
MessageProducer producer = session.createProducer(destination);
// send message
TextMessage message = session.createTextMessage("Test Message
String");
transaction.begin();
transactionManager.getTransaction().enlistResource(session.getXAResource());
System.out.println(transactionManager.getTransaction());
try {
producer.send(message);
} catch (Exception e) {
System.out.println("EXCEPTION!!! : "+e);
}
transaction.commit();
System.out.println("sent message : "+message.getJMSMessageID());
// close connection
session.close();
connection.close();
}
}
I can run ActiveMQ with authorization, so user can connect but can't
send message or nobody can't send message to destination
"queue://error". In this case I got:
INFO jotm - JOTM started with a local transaction factory which is not
bound.
INFO jotm - CAROL initialization
INFO ConfigurationRepository - No protocols were defined for property
'carol.protocols', trying with default protocol = 'jrmp'.
INFO jta - JOTM 2.0.10
bb14:38:0:010f2192685af71b2c...f0a801:
WARN ActiveMQConnection - Async exception with no exception listener:
java.lang.Exception: Error destination
java.lang.Exception: Error destination
at simple.RestrictPlugin.send(RestrictPlugin.java:14)
at
org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:131)
at
org.apache.activemq.broker.AbstractConnection.processMessage(AbstractConnection.java:377)
at
org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:603)
at
org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:226)
at
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:62)
at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:91)
at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
at
org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:117)
at
org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:122)
at
org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:87)
at
org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:127)
at java.lang.Thread.run(Thread.java:595)
sent message : ID:prokopiev.stc.donpac.ru-51742-1158666713794-1:0:1:1:1
but I can't see EXCEPTION!!! row.
In more simple case without XA I see this exception:
public class Producer {
public static void main(String[] args) throws Exception {
ActiveMQConnection connection =
ActiveMQConnection.makeConnection("tcp://localhost:5000");
connection.start();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("error");
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("Test Message String");
try {
producer.send(message);
} catch (Exception e) {
System.out.println("EXCEPTION!!! : "+e);
}
session.close();
connection.close();
}
In this case I see:
EXCEPTION!!! : javax.jms.JMSException: Error destination
Is it possible to get exception on send message in XA environment?
--
Thanks,
Eugene Prokopiev
Re: Exception on sending message in XA environment
Posted by Eugene Prokopiev <pr...@stc.donpac.ru>.
> Is it possible to get exception on send message in XA environment?
I know about ExceptionListener interface but this is not option because
I must implement ExceptionListener class for Connection and so I can't
do it in Message-Driven POJO or even in Spring TransactionTemplate.
--
Thanks,
Eugene Prokopiev