2010-06-04 34 views
37

Sono nuovo di JTA e sono i gestori delle transazioni sottostanti. Qualcuno può spiegare i pro/contro di ognuno di questi? Sentiti libero di aggiungere altri che non ho elencato nel titolo.Atomikos vs JOTM vs Bitronix vs?

Inoltre, non le applicazioni principali server (WebSphere, JBoss, Glassfish) hanno un proprio gestore delle transazioni JTA compatibile? In quegli ambienti, useresti ancora queste implementazioni di terze parti?

risposta

47

Sono nuovo di JTA e sono i gestori delle transazioni sottostanti. Qualcuno può spiegare i pro/contro di ognuno di questi? Sentiti libero di aggiungere altri che non ho elencato nel titolo.

gestori di transazioni autonomi io sappia includono Bitronix, SimpleJTA, Tyrex (morto?), JOTM (usato in Jonas), GeronimoTM/Jencks (usato in Geronimo), JBossTS (utilizzato in JBoss) e Atomikos.

Non li ho mai testati tutti estesamente (e questo è quello che dovresti fare se devi sceglierne uno), quindi non posso fornire un pro/contro esaustivo (e ciò richiederebbe un po 'di lavoro). Ma qui ci sono alcuni link:

Solo nel caso, qui è il mio punto di vista molto personale:

  • Ho visto molte lamentele su JOTM.
  • Penso che GeronimoTM/Jencks manchi di documentazione.
  • SimpleJTA non implementa JTS e non è attivo.
  • Bitronix è una documentazione decente ma non offre supporto.
  • Atomikos è un prodotto impressionante, ben documentato e offre supporto.
  • JBossTS alias ArjunaTS è sicuramente un prodotto maturo (vedere la announcement of the acquisition per un po 'di storia) e fa offrire sostegno.

Personalmente, avrei selezionato Atomikos e JBossTS e li avrei testati come hardcore se dovessi sceglierne uno.

Inoltre, i principali server di applicazioni (WebSphere, JBoss, Glassfish) non dispongono di un proprio gestore transazioni conforme a JTA?

Ovviamente lo fanno, JTA fa parte della specifica Java EE, un server Java EE deve supportarlo.

In quegli ambienti, utilizzeresti ancora queste implementazioni di terze parti?

No, vorrei utilizzare il gestore delle transazioni fornito (per semplicità, supporto, ecc.).

+0

Grazie per questa risposta utile. A volte, per scopi di test e dimostrativi, la nostra applicazione deve essere eseguita in Jetty o Tomcat. Atomikos e JBossTS funzioneranno ancora in quegli ambienti? In realtà, che il motivo per questi gestori delle transazioni di terze parti? Per ottenere un buon supporto per le transazioni al di fuori di un server di applicazioni completo? – HDave

+1

@HDave: i gestori di transazioni autonomi sono utili quando è necessario il supporto delle transazioni globali (ad esempio quando si ha a che fare con più di una risorsa transazionale) e il proprio ambiente non offre supporto per questa (ad esempio un'applicazione autonoma, un contenitore servlet). In tali ambienti, userei Spring per facilitare la configurazione (e JBossTS e Atomikos si adatterebbero). –

+0

Jencks è in realtà un contenitore JCA che utilizza GeronimoTM come gestore transazioni JTA ... – pgras

6

Ho testato Atomikos e JOTM con Jetty. Atomikos ha funzionato bene e lo consiglio vivamente. Ho fatto ad es. test unitari automatizzati per testare transazioni distribuite nella mia applicazione e questi test hanno funzionato bene.

Per quanto riguarda JOTM sono abbastanza sicuro che falsi il protocollo di commit a 2 fasi almeno a volte. Avevo un database PostgreSQL con le funzionalità di commit a 2 fasi disattivate e JOTM era in grado di funzionare come se avessi delle transazioni distribuite reali. I veri gestori delle transazioni (ad esempio quello implementato in GlassFish) hanno segnalato un errore in questo caso.

Ho usato JPA2 con Hibernate 4 nella mia applicazione se è importante.

+0

Interessante commento su come JTOM simula il protocollo di commit a 2 fasi. Anche i gestori/driver JTA forniti con WebLogic fanno lo stesso. È meglio averli falsi se presentati con un db che non lo supporta (o che ha disattivato). –

+0

In genere è possibile avere una singola risorsa non XA in una transazione XA. Se il gestore delle transazioni riconosce questa situazione, chiamerà prepare() sulle risorse XA, in caso affermativo, può chiamare commit() su tutte le risorse coinvolte nella transazione, inclusa la risorsa non XA. –

+0

Sì, lo chiamano il voto decisivo. La risorsa non XA arriva a decidere se tutto funziona – stringy05

Problemi correlati