1 2 3 Previous Next 35 Replies Latest reply: Oct 20, 2010 5:24 PM by henk de boer RSS

when to use xa-datasource

testrot Newbie

Hello,

 

consulting different documentation and searching the internet I'm unsure when to use xa-datasources/transactions.

 

For example the book "Jboss in Action" states:

If you're clustering your application servers or wanting to use distributed transactions among multiple application servers, then you should use <xa-datasource>. Note that both <local-tx-datasource> and <xa-datatsource> handle distributed transactions involving multiple data sources. The difference is that <local-tx-datasource> handles them only within a single running application server, whereas <xa-datasource> handles them among many running application servers.

 

So in short "Use xa-datasource when bulding a jboss cluster".

 

Before reading the book I thought, that I have to use xa-datasources in cases where one transaction spans multiple datasources. For example a method consuming a JMS message and manipulating a JPA Entity. Regardless of wheter I use a cluster or not.

 

I would really appreciate any help.

 

Thanks,

Martin

  • 1. Re: when to use xa-datasource
    Dean Budd Newbie

    Hi Martin,

     

    I've just been reading JBoss in Action as well and was also stumped by what they said.

     

    Like yourself I thought XA was only required for multiple data sources (or other branches in the transaction e.g JMS).

     

    Fellow colleagues of mine insist this is what it means.

     

    So I can't confirm 100%, but I'm sure (and so are my colleagues) the book is wrong

     

    Regards

     

    Dean

  • 2. Re: when to use xa-datasource
    testrot Newbie

    Hi Dean,

     

    thanks for your answer. I already thought I am the only fool not understanding this book passage.

    I will try to confirm our opinion and ask the authors of JBoss in Action.

    If I get any answer I will post it here.

     

    Regards,

    Martin

  • 3. Re: when to use xa-datasource
    Peter Johnson Master

    At the time that I wrote this text I checked this with the JBoss engineers and that is what they stated - the XA data source is required only when multiple JBoss AS instances are involved, or when you have JBoss AS and some external service all managed by a transaction manager. Two-phase commit within a single JBoss AS instance is handled by the local data source.

  • 4. Re: when to use xa-datasource
    testrot Newbie

    Hello Peter,

     

    thanks for your reply and btw for writing this book. It's really very usefull for my daily work.

     

    Regarding my question I am still not totally convinced. I don't want to be annoying, but perhaps you mixed two aspects of transactions in JBoss when writing the book or discussing with the jboss engineers. I did a lot of research to get the whole picture and right now I guess the following:

     

    local-tx-datasource vs. xa-datasource

    There are local-tx-datasources and xa-datasources. local-tx-datasources can be used if there aren't any transactions spanning multiple transactional resources. As soon as you use two or more transactional resources in the same transaction e.g. a transactional session bean method manipulating JPA entities and producing JMS messages, you must use xa-datasources for the transactional resources.

     

    JBossTS JTA for local-only transactions vs. JBossTS JTS  for distributed transactions

    If you use xa-datasources you need a transaction manager to coordinate the resources (with 2PC). This http://community.jboss.org/wiki/JBossTransactionsVersionGuide wiki page and this http://www.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/5.0.1/html/Administration_And_Configuration_Guide/transaction.html#id2524403 guide state, that there are two different implementations or modules for this transaction manager. The JBossTS JTA module for local-only transactions and the JBossTS JTS module for distributed transactions. Both are capable to handle multiple XA resources but JBoss JTS can handle distributed transactions spanning multiple VMs and JBossTS JTA can only handle transactions in a single VM. In case of jboss clusters I'm not sure if every cluster configuration needs JBoss JTS. I would guess that in a homogenous cluster JBoss JTA is sufficient because a transaction startet by a transaction manager on a certain cluster node does not leave this node and thus stays in a single VM.

     

    As I said this is only my current guess about I think transactions within JBoss AS are working. Can anybody confirm or deny this?

     

    Regards,

    Martin

  • 5. Re: when to use xa-datasource
    Jonathan Halliday Master

    Martin is correct. The book unfortunately is not. Hope the JBoss engineer in question wasn't me on a bad day :-)

     

    Jonathan Halliday

    JBoss Transactions dev team lead.

  • 6. Re: when to use xa-datasource
    testrot Newbie

    Hello Jonathan,

     

    thanks for clarifying things. I whish I would get such statements ("Martin is correct") more often :-).

     

    Can you also confirm my guess about homogenous clusters? Is JBoss JTA sufficient for homogenous clusters or do I need JBoss JTS?

     

    Thanks to all of you who answered my post!

  • 7. Re: when to use xa-datasource
    Peter Johnson Master

    I think that some of the discussion took place in the JBoss Transactions forum, but that was 3 or 4 years ago (wow, was it really that log ago when I started working on the book..) but I can't find the thread. Though there were some teleconferences - my team at the time was contemplating some possible work with the transaction service, I'm pretty sure that Mark Little was involved (or maybe I just remember that from an even earlier meeting with Arjuna), not sure who else was involved. Of course, it is very possible that I misinterpreted what was said.

     

    But it looks like an errata update is warranted - Martin, I hope you don't mind if I plagiarize your text.

  • 8. Re: when to use xa-datasource
    testrot Newbie

    No problem.

     

    Regards,

    Martin

  • 9. Re: when to use xa-datasource
    Dean Budd Newbie

    Thanks guys. Your input has been much appreciated.

     

    I'd just also like to add, thank's to Peter for writing JBoss in Action.

  • 10. Re: when to use xa-datasource
    henk de boer Master

    There are some additional things to mention here.

     

    JBoss AS does seem to do the so-called "Last-Resource Gambit" (term coined by Mike Spille, see http://www.jroller.com/pyrasun/category/XA), aka Last Resource Commit Optimization (see http://community.jboss.org/wiki/Multiple1PC).

     

    This means that when dealing with multi datasources within a single JTA transaction, one of them is allowed to be a non-XA datasource. I explicitly tested this on JBoss AS 5.1 with one XA JDBC datasource and one local TX JDBC datasource, as well as with one XA JMS connection factory (the standard java:/JmsXA one) and local TX JDBC datasource.

     

    In both these situations, JBoss AS happily processed the transaction without complaining.

     

    As soon as you use 2 local TX JDBC datasources however, an exception like the following is thrown when a connection from the second data source is attempted to be obtained:

     

     

    17:58:01,069 WARN  [loggerI18N] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.disallow] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.disallow] Adding multiple last resources is disallowed. Current resource is org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@5fd8aca1
    17:58:01,070 INFO  [STDOUT] Interceptor.invoke(StatelessInstanceInterceptor.java:68)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
    [...]
    
    org.jboss.util.NestedSQLException: Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: a0000bd:c381:4cbb1bf2:ae status: ActionStatus.ABORT_ONLY >)
    at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:95)
    

  • 11. Re: when to use xa-datasource
    henk de boer Master

    One thing I wonder though, how efficient is the one-phase optimization in JBoss AS, especially in combination with the local-tx-datasource.

     

    Suppose you have an application where 95% of time only a single JDBC datasource participates in a transaction and in 5% of the cases multiple resources participate.

     

    Would it then be more efficient to use a local-tx-datasource for the resource that is used 95% of the time and rely on Last Resource Commit Optimization, or would JBoss AS be smart enough to do an efficient one-phase optimization in those cases where there is only one participant in the transaction?

     

    If the latter is true, why is there even an local-tx-datasource and not just only an xa and no-tx datasource?

  • 12. Re: when to use xa-datasource
    testrot Newbie

    Hello Henk,

     

    Would it then be more efficient to use a local-tx-datasource for the  resource that is used 95% of the time and rely on Last Resource Commit  Optimization, or would JBoss AS be smart enough to do an efficient  one-phase optimization in those cases where there is only one  participant in the transaction?

    I did some tests and I am pretty sure, that JBoss uses one-phase commit optimization for transactions with only one participant. Except it is disabled by configuration.

  • 13. Re: when to use xa-datasource
    Giovanni Marigi Newbie

    good that you've found this mistake in the book testrot! it's not a minor issue!

  • 14. Re: when to use xa-datasource
    arjan tijms Novice

    testrot wrote:

     

    I did some tests and I am pretty sure, that JBoss uses one-phase commit optimization for transactions with only one participant. Except it is disabled by configuration.

     

    What configuration would that be? I tried to do some searching for "one-phase" and "1pc" in the JBoss documentation, but nothing really came up.

1 2 3 Previous Next