[
https://issues.apache.org/jira/browse/CXF-2550?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12904522#action_12904522
]
javier commented on CXF-2550:
-----------------------------
Hi Daniel,
Is it possible modify JMSDestination. Modify the onMessage method to propagate
the exception without consider TransactionManager. Throw the exception to
Spring if there is an exception. "Local resource transactions can simply be
activated through the sessionTransacted " according
http://static.springsource.org/spring/docs/2.5.x/reference/jms.html. Can work
with local resource transaction or with a transaction manager.
instead
//need to propagate any exceptions back to Spring container
//so transactions can occur
if (inMessage.getContent(Exception.class) != null && session !=
null) {
PlatformTransactionManager m =
jmsConfig.getTransactionManager();
if (m != null) {
TransactionStatus status = m.getTransaction(null);
JmsResourceHolder resourceHolder =
(JmsResourceHolder) TransactionSynchronizationManager
.getResource(jmsConfig.getConnectionFactory());
boolean trans = resourceHolder == null
|| !resourceHolder.containsSession(session);
if (status != null && !status.isCompleted() && trans) {
Exception ex = inMessage.getContent(Exception.class);
if (ex.getCause() instanceof RuntimeException) {
throw (RuntimeException)ex.getCause();
} else {
throw new RuntimeException(ex);
}
}
}
}
use
//need to propagate any exceptions back to Spring container
//so transactions can occur
if (inMessage.getContent(Exception.class) != null && session !=
null) {
Exception ex = inMessage.getContent(Exception.class);
if (ex.getCause() instanceof RuntimeException) {
throw (RuntimeException)ex.getCause();
} else {
throw new RuntimeException(ex);
}
}
> transactions don't work in jaxws Endpoint with jms transport
> -------------------------------------------------------------
>
> Key: CXF-2550
> URL: https://issues.apache.org/jira/browse/CXF-2550
> Project: CXF
> Issue Type: Bug
> Components: Transports
> Affects Versions: 2.2.4, 2.2.5
> Reporter: javier
> Assignee: Daniel Kulp
> Attachments: jms_queue.zip
>
>
> i'm trying cxf with jms transport with transaction to process a message and
> it is dequeued when the implementor object throw an error .
> the message is inonly and the code is:
> EndpointImpl endpoint = new EndpointImpl(new ObjectImpl());
> endpoint.setAddress("jms://");
> ActiveMQConnectionFactory connectionFactory = new
> ActiveMQConnectionFactory("tcp://localhost:61616");
> JMSConfiguration jmsConfig = new JMSConfiguration();
> jmsConfig.setConnectionFactory(connectionFactory);
> jmsConfig.setTargetDestination("sso2");
> jmsConfig.setSessionTransacted(true);
> jmsConfig.setPubSubDomain(false);
> jmsConfig.setUseJms11(true);
> jmsConfig.setTransactionManager(new
> JmsTransactionManager(connectionFactory));
> JMSConfigFeature jmsConfigFeature = new JMSConfigFeature();
> jmsConfigFeature.setJmsConfig(jmsConfig);
> endpoint.getFeatures().add(jmsConfigFeature);
> endpoint.publish();
> seems that the exception never arrive to
> AbstractMessageListenerContainer.doExecuteListener but it is catched inside
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.