2014-11-19 20 views

risposta

1

@MessageDriven (MDB) fa parte dell'API JMS. JMS ha tutti i tipi di extra quando si tratta di riprovare il consumo di messaggi non riusciti, il supporto delle transazioni e consente anche di controllare la coda dei messaggi.

@Asynchronous annotazione non è stata introdotta unti java-ee-6 (ejb 3.1).

Supponendo che il caso d'uso è semplice invocazione asincrona in-6 java-ee contenitore o al di sopra, utilizzare @Asynchronous (arun guptas blog on this)

Se avete bisogno di più di là di questo, JMS potrebbe essere un'opzione

6

@Asynchronous è solo appropriato se la transazione esterna ha bisogno di lanciare più pezzi di lavoro in parallelo e poi aspettare su tutti (o lanciare un singolo pezzo di lavoro in background, fare un po 'di lavoro in primo piano, e quindi attendere il lavoro in background). @Asynchronous non è appropriato per transazioni "fire and forget" perché il contenitore potrebbe bloccarsi prima che il lavoro asincrono inizi ad essere eseguito (a mio avviso, i metodi asincroni EJB sono molto raramente utili, forse per qualcosa come l'aggiornamento di una cache in memoria). Se si desidera garantire che il lavoro avvenga in modo asincrono senza attendere il completamento, è necessario inviare un messaggio a un MDB o programmare un timer EJB.

+0

In che modo il contenitore potrebbe "bloccarsi"? – Dherik

+0

Il processo JVM viene ucciso, la macchina perde improvvisamente potenza, ecc. –

Problemi correlati