Thx, I will try it, and I will post it tomorrow.

gnodet wrote:
> 
> Try to put log level at debug for everything.
> You should see when transactions are suspended / resumed.
> 
> On 12/19/06, macdoor <[EMAIL PROTECTED]> wrote:
>>
>> I use apache-servicemix-3.1-incubating-20061116.072011-9.tar.gz
>>
>> I use two JMS, JMS client(standalone app) ->JMS/JCA consumer-> EIP -> JMS
>> Provider
>>
>>
>>
>>
>> gnodet wrote:
>> >
>> > The JMS is used as the transformer or the target for the pipeline ?
>> > And do you use ServiceMix 3.1-SNAPSHOT ?
>> >
>> > On 12/19/06, macdoor <[EMAIL PROTECTED]> wrote:
>> >>
>> >> I set <eip:pipeline service="zznode:tojpa" endpoint="endpoint">
>> >>
>> >>
>> >>
>> >> gnodet wrote:
>> >> >
>> >> > There's no need to do anything.
>> >> > When the component receives a transacted exchange, it will
>> >> > resume the thread using the transaction manager.  If an exchange
>> >> > is sent while the transaction is active, the
>> autoEnlistInTransactions
>> >> > flag will ensure that the transaction is conveyed by the exchange
>> >> > sent (the transaction will be suspended, handled by the provider
>> >> > and resumed when the sendSync call return).
>> >> > All the needed code is in AsyncBaseLifeCycle [1] and
>> >> DeliveryChannelImpl
>> >> > [2]
>> >> >
>> >> > Btw, which EIP endpoint do you use ?
>> >> >
>> >> > [1]
>> >> >
>> >>
>> http://fisheye3.cenqua.com/browse/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/AsyncBaseLifeCycle.java?r=484814
>> >> > [2]
>> >> >
>> >>
>> http://fisheye3.cenqua.com/browse/servicemix/trunk/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/messaging/DeliveryChannelImpl.java?r=482795
>> >> >
>> >> > On 12/19/06, macdoor <[EMAIL PROTECTED]> wrote:
>> >> >>
>> >> > r> 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.
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >> > --
>> >> > Cheers,
>> >> > Guillaume Nodet
>> >> >
>> >> >
>> >>
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/Can-I-forward-transaction-with-EIP-component--tf2846280s12049.html#a7948792
>> >> 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#a7948965
>> 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#a7949169
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to