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:
- L'applicazione A invia un pacchetto di lavoro all'applicazione B su HTTP
- 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.
- 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:
- 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.
- L'applicazione A completa parte della transazione complessiva e passa all'applicazione B per completarla. L'applicazione A notifica l'applicazione C dello stato.
- 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.