Domanda

UserTransaction ut=cerca....ut.beginTransaction();saveToFooDB();statelessEjb.transactionSupportedMethod();//salva qualcosa ai Foo DB saveToFooDB();ut.commit();

Se stavo facendo la precedenza, quindi la mia comprensione è che non è una transazione XA, in quanto non si estendono su più risorse (come DB plus JMS).È la mia comprensione è corretta?

È stato utile?

Soluzione

Fonte di dati può essere configurato in due tipi:

  • XA:questi datasource può partecipare a distribuire le transazioni
  • Locale:chiamato anche non-XA, e non possono partecipare in una transazione distribuita

Il UserTransaction è definito in JTA specifiche che descrivono come coordinare il partecipante in una transazione distribuita.

L'applicazione server che implementa il JTA specifica è tuttavia libero di fare un sacco di ottimizzazioni.Uno di questi è il last-agent-optimization, che consente l'ultimo partecipante alla transazione distribuita da Locale.Un normale commettere è fatto per gli ultimi partecipanti.Se c'è un solo partecipante, allora è sempre il caso.

In breve:

  • se si dispone di più di un partecipante, XA e 2 phase commit devono essere utilizzati
  • se c'è un solo partecipante, la maggior parte delle applicazioni di supporto del server di origine dati locale e non usare il full-soffiano 2 phase commit protocol.

Glassfish vedere:

MODIFICA

Paragrafo "ambito di transazione" di glassfish documentazione lo spiega meglio di me.Immagino sia lo stesso per tutti i server di applicazioni.

Una transazione locale coinvolge una sola non XA risorse e richiede che tutti i partecipano i componenti dell'applicazione eseguire interno di un unico processo. Locale operazione di ottimizzazione è specifico per il gestore delle risorse e trasparente per Java EE applicazione.

Nel Server di Applicazioni, una JDBC risorsa non è XA se soddisfa uno dei i seguenti criteri:

  • In connessione JDBC piscina configurazione, l'Origine di classe non implementare il javax.sql.XADataSource interfaccia.

  • La Transazione Globale di Supporto casella non è selezionata, o la Risorsa Tipo di impostazione non esiste o non è set di javax.sql.XADataSource.

Una transazione rimane locali se l' seguenti condizioni rimangono true:

  • Uno e un solo non-XA risorsa è utilizzata.Se ulteriori camere non-XA risorsa, l'operazione è interrotta.
  • Nessuna operazione di importazione o esportazione di verifica.

Le transazioni che coinvolgono più risorse o più partecipanti i processi vengono distribuite o globale transazioni.Una transazione globale, può coinvolgere un non-XA ultima risorsa, se agente di ottimizzazione è attivata.In caso contrario, tutte le risorse devono essere XA.L'uso-ultima-agente-ottimizzazione la proprietà è impostata su true per impostazione predefinita.Per dettagli su come impostare questo proprietà, vedere Configurazione del Operazione Di Servizio.

Se solo uno XA risorsa è utilizzata in un transazione, a seguito di una fase di commit si verifica, altrimenti la transazione è coordinato con un commit in due fasi il protocollo.

Altri suggerimenti

Una volta che si avvia l'UserTransaction, e quindi ottenere una connessione alla risorsa (ad esempio banche dati) utilizzando una connessione-fabbrica che è dichiarato XA-solidale, vuol dire che il collegamento diventerà parte della transazione XA. Inoltre, non importa affatto se ci si connette a tipi singole o multiple di risorse come JMS e il database.

La speranza che aiuta.

Nitin

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top