The transaction is controlled by the inbound jca endpoint.
It should be committed when the consumer endpoint
receives the DONE status for the exchange sent.
Make sure your target JBI endpoint set the DONE status ...

If you want all component to be included in the transaction, you
need to set the autoEnlistInTransaction attribute to true on the
<sm:container/> tag, and use send exchanges synchronously
from the diffrerent endpoints involved.

On 12/30/06, macdoor <[EMAIL PROTECTED]> wrote:

My test flow like this:
jmsreceiver -> myinsert1 -> myinsert2 -> jmssender
it is synchronous and transacted.
Data will insert into two tables, the first table has no pk and the second
table has pk.

When first time data comes in, i find no commit has executed,
log print "Resuming transaction for ID:xxxx ..." after all.
Why Transaction not commit?
I don't know when and who begin, commit or rollback the transaction. Please
describe some details.

Data is not inserted until I add commit code in JcaConsumerProcessor.
    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) {
                //----------add
                TransactionManager tm = (TransactionManager)
endpoint.getServiceUnit().getComponent().getComponentContext().getTransactionManager();
                if(tm.getTransaction()!=null){
                        tm.commit();
                }
              //----------add end
                return;
            } else if ...


Same data insert next time will cause unique constraint violated
SqlException, and then rollback.
But rollback failed with exception:
10:23:39,686 WARN  pool-9-thread-5 - Transaction                    - Error
ending association for XAResource org.apache.gero
[EMAIL PROTECTED]; transaction will
roll back. XA error code: -7
org.apache.derby.client.am.XaException: XAER_RMFAIL :
        at
org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
Why?

test with oracle, exception:
13:55:13,799 WARN  pool-5-thread-4 - Transaction                    - Error
ending association for XAResource org.apache.gero
[EMAIL PROTECTED]; transaction will
roll back. XA error code: -3
javax.transaction.xa.XAException
        at
oracle.jdbc.xa.OracleXAResource.allowGlobalTxnModeOnly(OracleXAResource.java:1102)

--
View this message in context: 
http://www.nabble.com/When-and-who-begin%2C-commit-or-rollback-the-transaction--tf2897278s12049.html#a8094642
Sent from the ServiceMix - Dev mailing list archive at Nabble.com.




--
Cheers,
Guillaume Nodet

Reply via email to