2012-04-18 11 views
7

Capisco che Apache TomEE è un'installazione regolare di Tomcat con openejb come app Web.Qual è il flusso di lavoro per l'avvio e la configurazione dell'applicazione quando si utilizza Apache TomEE

Sto cercando di capire come tutti questi bootstrap. Proverò a porre alcune domande dirette:

  • È importante avere un ordine di avvio dell'applicazione? Dovrebbe aprirsi openejb prima della mia app Web, o viceversa, o non importa?
  • Correlato alla domanda precedente. Come fa un'applicazione enterprise a registrare i suoi bean con openejb, o è openejb che va in giro a cercare applicazioni enterprise nello stesso server, per EJB?
  • A livello molto laico, in che modo sono riusciti a fornire openejb come contenitore EJB, quando si tratta di un'altra app Web. (IIRC ogni webapp in Tomcat ottiene un percorso di classe diversa e non può fare un passo in piedi a vicenda)

Qualsiasi altra informazione importante.

risposta

8

L'integrazione è bootstrap tramite questa linea nel conf/server.xml:

<Listener className="org.apache.tomee.loader.OpenEJBListener" /> 

Questo avviene immediatamente all'avvio prima di tutte le applicazioni vengono avviate. Le librerie dalla directory <tomcat-home>/webapps/openejb/lib vengono aggiunte al classloader del sistema Tomcat, un altro listener viene installato per partecipare alla distribuzione e da quel momento in poi tutto accade utilizzando gli eventi nel ciclo di vita di Tomcat. Tomcat pubblicherà diversi eventi all'avvio dell'applicazione (distribuzione) e all'arresto. Tomcat stesso li utilizza per l'implementazione di servlet e in sostanza l'integrazione è solo la stessa cosa. Anche altri fornitori che includono Tomcat utilizzano questi hook. Da questa prospettiva l'integrazione è davvero piuttosto noiosa :)

L'unica svolta interessante è mettere le librerie aggiuntive in un file di guerra. Questo è davvero fatto solo per rendere la consegna e aggiungere le librerie extra a un'installazione Tomcat esistente il più semplice possibile (e il più semplice possibile da rimuovere). Tutte le librerie da <tomcat-home>/webapps/openejb/lib potrebbero facilmente andare a destra in <tomcat-home>/lib. A quel punto, l'unica cosa che potresti desiderare è che la guerra webapss/openejb/ sia in grado di richiamare EJB su HTTP.

Così i brevi risposte sono: ordine di avvio

  • Appliction non importa
  • EJB distribuzione avviene side-by-side con distribuzione Servlet
  • vasi sono aggiunti al sistema di caricamento classe Tomcat immediatamente Tomcat si avvia

La cosa interessante da notare nell'altra risposta è che Tomcat si avvia effettivamente con solo due vasi nel classpath. Tomcat stesso aggiunge automaticamente tutti i vasi da <tomcat-home>/lib/ all'avvio. Stiamo praticamente facendo la stessa cosa, proprio da <tomcat-home>/webapps/openejb/lib

Non credo che abbiamo effettivamente provato spostando le librerie in <tomcat-home>/lib/ e l'eliminazione della webapp OpenEJB (che si chiama tomee.war nella versione finale a venire), ma io Prenderò nota per provarlo. Sembra una buona cosa da supportare o forse anche fare di default. Puoi eliminare Tomcat manager e le applicazioni web ROOT, quindi sembra una buona idea rendere facile l'eliminazione di openejb.war.

+0

Grazie per la fantastica risposta :-) – Parag

+0

Hai detto "A quel punto, l'unica cosa che potresti desiderare per webapss/openejb/war è di poter richiamare EJB su HTTP." Mi dispiace se la risposta è ovvia, ma perché non saremmo in grado di servire richieste HTTP per EJB se abbiamo tutti i jar openejb in /lib? – Parag

+0

Quello che intendevo era se le librerie erano state spostate e la webapps/openejb war era stata cancellata, quindi la funzionalità EJB su HTTP sarebbe stata rimossa. –