Servizio di transazione Java senza il server delle applicazioni

5

È possibile avere un'applicazione Java autonoma (nessun server applicativo collegato) che esponga alcune operazioni che un client può chiamare ed essere quella che gestisce le transazioni?

Stavo pensando a questa applicazione per esporre le risorse JNDI e ottenere una java: comp / UserTransaction da lì, ottenere anche un bean da lì e chiamare i metodi A, B e C su di esso e coordinare la transazione dal client?

L'applicazione che sto scrivendo non è abbastanza complessa, quindi ho bisogno di un grosso server applicativo attorno ad esso, quindi penso di avere un JTS autonomo al suo interno che il client possa interagire dal punto di vista delle transazioni.

Non ho molta esperienza con le transazioni distribuite e non so davvero come affrontare il problema. È possibile? Mi trovo in qualcosa che va oltre ciò che un semplice mortale (programmatore) può gestire?

Come posso avvicinarmi a questo?

    
posta johnny 10.07.2012 - 14:37
fonte

2 risposte

1

Jboss e altri fornitori di server di applicazioni offrono un gestore di transazioni autonomo che può essere utilizzato da solo.

The JBoss Transaction Service (JBossTS) protects businesses from data corruption by guaranteeing complete, accurate business transactions for Java based applications (including those written for the JEE and EJB frameworks) thereby eliminating the risks and costs associated with time-consuming manual reconciliation following failures...

    
risposta data 10.07.2012 - 17:54
fonte
3

Il servizio JNDI semplice è semplice e la gestione delle transazioni distribuita è difficile

Esiste un tutorial completo su JNDI fornito da Oracle. Anche se sembra datato (JDK 1.1.2 chiunque?) La specifica JNDI non è cambiata molto nel tempo intercorrente ed è ancora rilevante. Leggere attentamente gli esempi ti fornirà sufficienti informazioni per essere in grado di costruire un'applicazione standalone in grado di servire oggetti interni in risposta alle richieste JNDI.

Sei sicuro di aver bisogno di transazioni distribuite?

La seconda domanda riguarda la gestione delle transazioni distribuite. Esistono diversi modi per interpretare una transazione distribuita in base al livello di collaborazione tra le applicazioni.

Nel caso semplice avresti un flusso di lavoro come questo:

  1. L'applicazione A invia un pacchetto di lavoro all'applicazione B su HTTP
  2. L'applicazione B tenta di commetterlo nel database. In caso di esito positivo viene restituito un 200 OK, altrimenti viene utilizzato un codice di errore.
  3. L'applicazione A sa come reagire a un errore in modo appropriato.

Chiaramente non avresti bisogno di JNDI per implementare questo tipo di flusso di lavoro, se non per far sì che la tua applicazione (Application C) assuma il ruolo di fornire l'Application B al pool di connessioni del database (Suggerimento: usa C3P0 per questo).

Nel caso complesso avresti un flusso di lavoro più simile a questo:

  1. L'applicazione A registra l'inizio di una transazione distribuita con l'Applicazione C, quindi lavora con il database per fare un po 'di lavoro.
  2. L'applicazione A completa parte della transazione complessiva e passa all'applicazione B per completarla. L'applicazione A notifica l'applicazione C dello stato.
  3. L'applicazione B registra la sua parte della transazione con l'applicazione C e tenta di completare il suo lavoro. Se fallisce, l'applicazione C sa come orchestrare il rollback (magari usando la gestione delle transazioni nidificata).

Se stai cercando un flusso di lavoro come il caso complesso, allora direi che dovresti considerare un contenitore di applicazioni per gestirlo. In caso contrario, potrebbe non essere nemmeno necessario JNDI.

    
risposta data 10.07.2012 - 16:08
fonte

Leggi altre domande sui tag