Yes, I have set the autoEnlistInTransactions="true" flag on the JBI container
.

I also and some test code in EIP component (pipeline) and JMS provider
component to System.out.println( exchange.isTransacted())

I found in EIP exchange.isTransacted() is true and in next JMS provider
exchange.isTransacted() is false.

I found in EIP pipeline code
http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/Pipeline.java?revision=488681&view=markup

    /* (non-Javadoc)
     * @see
org.apache.servicemix.eip.EIPEndpoint#processSync(javax.jbi.messaging.MessageExchange)
     */
    protected void processSync(MessageExchange exchange) throws Exception {
...

                MessageExchange me =
getExchangeFactory().createExchange(exchange.getPattern());
                (faultsTarget != null ? faultsTarget :
target).configureTarget(me, getContext());
                MessageUtil.transferToIn(tme.getFault(), me);
                sendSync(me);

It create a new exchange. Shall we set the transactionmanager in the new
exchange?


gnodet wrote:
> 
> Have you set the autoEnlistInTransactions="true" flag on the JBI container
> ?
> Else no transaction propagation will occur ...
> I'm pondering changing the default value to true ...
> 
> On 12/19/06, macdoor <[EMAIL PROTECTED]> wrote:
>>
>> I start a transaction with JMS/JCA component, and send the message to an
>> EIP
>> component, after EIP transaction disappear. Is it the right behavior?
>>
>> The flow is like this, JMS/JCA->EIP->JMS. There is no transction in last
>> JMS
>> component.
>>
>> I read the source
>> http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPEndpoint.java?revision=488681&view=markup
>>
>>     public void process(MessageExchange exchange) throws Exception {
>>         boolean txSync = exchange.isTransacted() &&
>> Boolean.TRUE.equals(exchange.getProperty(JbiConstants.SEND_SYNC));
>>         if (txSync && exchange.getRole() == Role.PROVIDER &&
>> exchange.getStatus() == ExchangeStatus.ACTIVE) {
>>             processSync(exchange);
>>         } else {
>>             processAsync(exchange);
>>         }
>>     }
>>
>> There is no code to handle transaction.
>>
>> But in
>> http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/jca/JcaConsumerProcessor.java?revision=478801&view=markup.
>>
>>     public void process(MessageExchange exchange) throws Exception {
>>         Context context = (Context)
>> pendingMessages.remove(exchange.getExchangeId());
>>         Message message = (Message)
>> context.getProperty(Message.class.getName());
>>         Message response = null;
>>         Connection connection = null;
>>         try {
>>             if (exchange.getStatus() == ExchangeStatus.DONE) {
>>                 return;
>>             } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
>>                 if (endpoint.isRollbackOnError()) {
>>                     TransactionManager tm = (TransactionManager)
>> endpoint.getServiceUnit().getComponent().getComponentContext().getTransactionManager();
>>                     tm.setRollbackOnly();
>>                     return;
>>                 } else if (exchange instanceof InOnly) {
>>                     log.info("Exchange in error: " + exchange,
>> exchange.getError());
>>                     return;
>>                 } else {
>>                     connection = connectionFactory.createConnection();
>>                     Session session = connection.createSession(true,
>> Session.SESSION_TRANSACTED);
>>                     Exception error = exchange.getError();
>>                     if (error == null) {
>>                         error = new Exception("Exchange in error");
>>                     }
>>                     response = session.createObjectMessage(error);
>>                     MessageProducer producer =
>> session.createProducer(message.getJMSReplyTo());
>>                     if (endpoint.isUseMsgIdInResponse()) {
>>
>> response.setJMSCorrelationID(message.getJMSMessageID());
>>                     } else {
>>
>> response.setJMSCorrelationID(message.getJMSCorrelationID());
>>                     }
>>                     producer.send(response);
>>                 }
>>             } else {
>>                 connection = connectionFactory.createConnection();
>>                 Session session = connection.createSession(true,
>> Session.SESSION_TRANSACTED);
>>                 response = fromNMSResponse(exchange, context, session);
>>                 if (response != null) {
>>                     MessageProducer producer =
>> session.createProducer(message.getJMSReplyTo());
>>                     if (endpoint.isUseMsgIdInResponse()) {
>>
>> response.setJMSCorrelationID(message.getJMSMessageID());
>>                     } else {
>>
>> response.setJMSCorrelationID(message.getJMSCorrelationID());
>>                     }
>>                     producer.send(response);
>>                 }
>>             }
>>         } finally {
>>             if (connection != null) {
>>                 connection.close();
>>             }
>>             if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
>>                 exchange.setStatus(ExchangeStatus.DONE);
>>                 channel.send(exchange);
>>             }
>>         }
>>     }
>>
>> It has code to forward transaction.
>>
>> Can I add the same code to EIP and let EIP can forward transaction?
>>
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Can-I-forward-transaction-with-EIP-component--tf2846280s12049.html#a7948174
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> Cheers,
> Guillaume Nodet
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Can-I-forward-transaction-with-EIP-component--tf2846280s12049.html#a7948441
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to