cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "javier (JIRA)" <j...@apache.org>
Subject [jira] Commented: (CXF-2550) transactions don't work in jaxws Endpoint with jms transport
Date Tue, 31 Aug 2010 05:45:53 GMT

    [ 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.


Mime
View raw message