Hi ,
I am using apache-servicemix-4.0.0. My flow is jms consumer->eip(pipeline)
eip pipeline has a bean class as transformer and http provider as target. I
am starting a transaction in jms consumer. here is my xbean.xml files


        <jms:endpoint id="eipjmsconsumer" 
                service="ec:jms"
                endpoint="jms" 
                targetService="ec:eip" 
                targetEndpoint="eip" 
                role="consumer"
                processorName="jca" 
                defaultMep="http://www.w3.org/2004/08/wsdl/in-only";
                connectionFactory="#connectionFactory"          
synchronous="true"
                resourceAdapter="#amqResourceAdapter"
                bootstrapContext="#bootstrapContext"
                rollbackOnError="true">
                <jms:activationSpec>
                        <amqra:activationSpec destination="epq1"
                                destinationType="javax.jms.Queue" 
maximumRedeliveries="2"
                                initialRedeliveryDelay="10000" 
useExponentialBackOff="false" />
                </jms:activationSpec>
        </jms:endpoint>
        <bean id="bootstrapContext"
class="org.jencks.factory.BootstrapContextFactoryBean">
                <property name="threadPoolSize" value="15" />
                 <property name="transactionManager" ref="transactionManager"/>
                
        </bean>

        <amqra:resourceAdapter id="amqResourceAdapter"
                serverUrl="tcp://localhost:61616" />


        <bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL" value="tcp://localhost:61616" />

        </bean>
        <bean id="transactionManager"
class="org.apache.geronimo.transaction.manager.GeronimoTransactionManager"></bean>
                <!--amq works
        <amq:connectionFactory id="connectionFactory"
                brokerURL="tcp://localhost:61616" />


                JMS ConnectionFactory from JNDI - <bean id="connectionFactory"
                class="org.springframework.jndi.JndiObjectFactoryBean"> 
<property
                name="jndiName" value="ConnectionFactory" /> </bean>
        -->

</beans>

<eip:pipeline service="ec:eip" endpoint="eip">
    <eip:transformer>
      <eip:exchange-target service="ec:bean" />
    </eip:transformer>
    <eip:target>
      <eip:exchange-target service="ec:http" />
    </eip:target>
  </eip:pipeline>


<bean:endpoint service="ec:bean" endpoint="bean" bean="#myBean"/>

  <bean id="myBean" class="com.pf.eipconsumer.RouterBean"/>

</beans>
<http:endpoint service="ec:http"
                 endpoint="http"
                 role="provider" 
                 locationURI="http://localhost/orderapp/OrderProcess1";
                 defaultMep="http://www.w3.org/2004/08/wsdl/in-out";
                  />             

</beans>

here is my bean class file. In this class file I am parsing soap header to
set the http location URI at run time
public class RouterBean implements MessageExchangeListener {

        @Resource
        private DeliveryChannel channel;
        private static final org.apache.commons.logging.Log log =
org.apache.commons.logging.LogFactory
                        .getLog(RouterBean.class);

        public void onMessageExchange(MessageExchange exchange)
                        throws MessagingException {
                log.info("Received exchange: " + exchange);
                log.info("Received exchange status: " + exchange.getStatus());
                log.info("Received exchange:properties");
                Iterator<String> iterator2 = 
exchange.getPropertyNames().iterator();
                while (iterator2.hasNext()) {

                        String propName2 = iterator2.next();
                        log.info("inside iterator,propName:" + propName2 + ":"
                                        + exchange.getProperty(propName2));
                }
                String body = null;
                try {
                        if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
                                NormalizedMessage message = 
exchange.getMessage("in");
                                Source content = message.getContent();
                                log.info("content is:" + content);
                                body = (new 
SourceTransformer()).toString(content);
                                log.info("eipConsumer:input message body is:" + 
body);
                                message.setContent(new StringSource(body));
                                exchange.setMessage(message, "out");
                                String uri = getURIFromMessage(body);
                        log.info("uri is:"+uri);
                
                        boolean useDynamicUri = true;
                         if (useDynamicUri) { 
                                  exchange.getMessage("out").setProperty( 
                                      JbiConstants.HTTP_DESTINATION_URI, 
                                      uri); 
                                               }
                                
                                boolean good = channel.sendSync(exchange);
                                log.info("channel send done");
                                
                        
                        //else if(exchange.getStatus() == ExchangeStatus.DONE){
                        if(good){
                                log.info("inside DONE block");
                                exchange.setStatus(ExchangeStatus.DONE);
                                channel.send(exchange);
                        }
                        //else if(exchange.getStatus() == ExchangeStatus.ERROR){
                else{
                                log.info("inside ERROR block");
                                //Exception ex = new Exception ("ERROR:Fault 
occurred"+faultbody);
                                Exception ex = new Exception ("ERROR:Fault 
occurred");
                                exchange.setError(ex);
                                exchange.setStatus(ExchangeStatus.ERROR);
                                channel.send(exchange);
                        }
                }

                } catch (TransformerException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        log.error("error:", e);
                } finally {

                        // exchange.setStatus(ExchangeStatus.DONE);
                        // channel.send(exchange);
                }
        }

I am getting exception as below. Please suggest what am I doing wrong here

2010-04-19 22:14:37,078| 22:14:37,078 | INFO  | x-bean-thread-12 |
RouterBean                       | com.pf.eipconsumer.RouterBean      66 |
uri is:http://LPF004689/orderapp/OrderProcess
2010-04-19 22:14:37,078| 22:14:37,078 | ERROR | mix-eip-thread-5 |
EIPComponent                     | icemix.common.AsyncBaseLifeCycle  480 |
Error processing exchange
org.apache.servicemix.jbi.runtime.impl.inonlyi...@8d1aa8
javax.jbi.messaging.MessagingException:
javax.transaction.InvalidTransactionException: Specified transaction is
already associated with another thread  at
org.apache.servicemix.common.EndpointDeliveryChannel.resumeTx(EndpointDeliveryChannel.java:137)
        at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:118)
        at
org.apache.servicemix.common.endpoints.SimpleEndpoint.sendSync(SimpleEndpoint.java:74)
        at
org.apache.servicemix.eip.patterns.Pipeline.processSync(Pipeline.java:246)
        at org.apache.servicemix.eip.EIPEndpoint.process(EIPEndpoint.java:183)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:627)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:581)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchangeInTx(AsyncBaseLifeCycle.java:478)
        at
org.apache.servicemix.common.AsyncBaseLifeCycle$2.run(AsyncBaseLifeCycle.java:347)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Caused by: javax.transaction.InvalidTransactionException: Specified
transaction is already associated with another thread
        at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.associate(TransactionManagerImpl.java:114)
        at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.resume(TransactionManagerImpl.java:183)
        at sun.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:64)
        at
org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:78)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at
org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
        at
org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at
org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at
org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
        at
org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy23.resume(Unknown Source)
        at
org.apache.servicemix.common.EndpointDeliveryChannel.resumeTx(EndpointDeliveryChannel.java:135)
        ... 11 more
2010-04-19 22:14:37,078| 22:14:37,078 | ERROR | ix-http-thread-8 |
HttpComponent                    | icemix.common.AsyncBaseLifeCycle  509 |
Transaction is still active after exchange processing. Trying to rollback
transaction.
2010-04-19 22:14:37,078| 22:14:37,078 | ERROR | pool-6-thread-2  |
JcaConsumerProcessor             | mix.jms.jca.JcaConsumerProcessor  117 |
Error while handling jms message
javax.jbi.messaging.MessagingException:
javax.transaction.InvalidTransactionException: Specified transaction is
already associated with another thread
        at
org.apache.servicemix.common.EndpointDeliveryChannel.resumeTx(EndpointDeliveryChannel.java:137)
        at
org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:118)
        at
org.apache.servicemix.jms.jca.JcaConsumerProcessor.onMessage(JcaConsumerProcessor.java:110)
        at org.jencks.XAEndpoint.onMessage(XAEndpoint.java:129)
        at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:123)
        at
org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:64)
        at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:735)
        at 
org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:169)
        at
org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:290)
        at
org.apache.geronimo.connector.work.pool.NamedRunnable.run(NamedRunnable.java:32)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Caused by: javax.transaction.InvalidTransactionException: Specified
transaction is already associated with another thread
        at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.associate(TransactionManagerImpl.java:114)
        at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.resume(TransactionManagerImpl.java:183)
        at sun.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:64)
        at
org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:78)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at
org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
        at
org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at
org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at
org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
        at
org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy23.resume(Unknown Source)
        at
org.apache.servicemix.common.EndpointDeliveryChannel.resumeTx(EndpointDeliveryChannel.java:135)
        ... 12 more



-- 
View this message in context: 
http://old.nabble.com/smx4%3AInvalidTransactionException%3A-Specified-transaction-is-already-associated-with-another-thread-tp28287794p28287794.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to