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.
fonte
2012-04-19 08:07:25
Grazie per la fantastica risposta :-) – Parag
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
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. –