2014-06-19 6 views
6

È necessario chiamare un servizio EJB dal metodo contextInitialized() del listener del contesto servlet. L'applicazione è in esecuzione su JBOSS, sebbene il listener di contesto funzioni correttamente, non sono in grado di accedere al bean EJB tramite la ricerca JNDI.Come accedere al bean EJB tramite la ricerca del contesto da ServletContextListener

Perché la distribuzione Web in JBOSS avviene prima che i bean EJB siano associati all'albero JNDI. Come superare questo? C'è un modo per configurare il binding JNDI in anticipo o avviare la distribuzione sul Web in seguito una volta che i bean sono stati completamente distribuiti?

Avevo messo Thread.sleep() prima della chiamata di servizio nel metodo contextInitialized(), sta funzionando bene nel mio GA JBoss5.1.0 e lo stesso non ha funzionato in altre macchine JBoss della stessa versione.

Le applicazioni richiedono questo perché, vogliamo caricare alcuni dati master dal DB e renderli disponibili nel livello Web (tipo di memorizzazione nella cache). JBOSS startupmbean soddisfa questo requisito? Se sì, come posso rendere i dati disponibili al livello web?

Anche se sono disponibili altri metodi alternativi, si prega di suggerire.

risposta

1
  • Sondaggio per gli EJB in contextInitialized(). Quindi, invece di dormire per un po ', prova a connetterti al bean. Se fallisce, dormi e riprova, fino a quando gli EJB sono disponibili. In questo caso l'inizializzazione del contesto è bloccata.

  • Implementare la cache come una pigra: riempire la cache durante la prima query (e utilizzare la stessa procedura di polling: connettersi all'EJB, riprovare finché non diventa disponibile). In questo caso i blocchi della cache.

  • È possibile suddividere la distribuzione in due parti: una per gli EJB, una per l'applicazione Web. Quindi distribuire il primo, e ritardare la distribuzione dell'applicazione web fino a quando le EJB sono vincolati (sia guardando il file di log o cercando legano al EJB da una riga di comando app)

+0

C'è un modo per farlo ritardo l'implementazione del web? Laddove EJB e WEB sono raggruppati in una EAR – Murugesh

+0

, non so se è possibile. Esiste una dipendenza implicita tra un modulo war e un modulo EJB nello stesso file .ear; Non ho trovato un modo né in application.xml né in jboss-app.xml per definire il caricamento seriale dei moduli. Ovviamente puoi dare un'occhiata al codice sorgente di JBoss. In qualche modo ritengo che questo sia un bug di JBoss; un modulo Web non deve essere caricato prima di distribuire tutti gli EJB, quindi se non è possibile applicare una soluzione alternativa, è possibile presentare un bug. – Beryllium