2012-04-20 36 views
7

Ho bisogno di riutilizzare il codice originariamente sviluppato per un'app Eclipse RCP (vale a dire in scatola come plugin Eclipse/pacchetto OSGi) in un servlet.Per incorporare OSGi nel contenitore servlet o nel contenitore servlet in OSGi?

Dopo aver letto un sacco di post di blog, articoli, wiki e così via ho finito al punto in cui so che:

  1. Un OSGi framework (Equinox nel mio caso) può essere incorporato in un servlet container (Tomcat 7 nel mio caso)
  2. o Tomcat possono essere incorporati in un framework OSGi.

Equinox consiglia la seconda opzione come più semplice. Ma per la produzione raccomandano 1. Non so perché. Cosa c'è di meglio in questo caso e perché?

Sono un utente Tomcat piuttosto esperto, l'integrazione di Tomcat in Equinox cambierà notevolmente la gestione? o in altre parole, cosa cambierà in Tomcat incorporato in Equinox?

risposta

5

Per prima cosa, il codice ha dipendenze OSGi/Equinox oltre al manifest? Altrimenti dovrebbe funzionare bene in un semplice Tomcat.

La mia comprensione è che l'incorporamento di Tomcat in Equinox cambierà notevolmente amministrandolo. Il tuo layout di cartelle, inclusi server.xml e catalina.sh, non saranno più disponibili. Invece gestirai un'applicazione Equinox probabilmente tramite l'amministratore di configurazione.

In secondo luogo ci sono due modelli di programmazione e implementazione servlet per OSGi. Il primo è HttpService in cui si registrano programmaticamente i propri servlet e risorse (è possibile farlo anche attraverso un punto di estensione). In questo caso la tua applicazione è solo una raccolta di pacchetti. Tuttavia non è possibile utilizzare i filtri. Il secondo è un bundle di applicazioni Web (WAB) che è un WAR OSGified.

+2

Ho completamente dimenticato, se stai cercando di eseguire Tomcat in Equinox, probabilmente vorrai dare un'occhiata a [Eclipse Virgo] (http://www.eclipse.org/virgo/) invece di crearlo da solo . –

4

Apache Sling maven-launchpad-plugin può produrre un file di guerra che incorpora un framework OSGi (Apache Felix di serie, non sicuro se altri sono supportati) e una serie di bundle che si definiscono. Può essere utilizzato per eseguire app OSGi in Tomcat.

5

Abbiamo eseguito una migrazione di un'applicazione Web piuttosto complessa che utilizza Jetty da non OSGi a OSGi su Equinox. Ho imparato alcune cose che sicuramente possono guidare la tua decisione in un modo o nell'altro: - Se scegli di utilizzare OSGi come framework per eseguire la tua app e ad es. opzione # 2, tutto ciò che l'app consumerà dovrà essere un bundle OSGi. Qualsiasi esterno o terza parte di biblioteche commerciali. Se usi un sacco di open source, è piuttosto facile trovare pacchetti. Oppure, se non riesci a trovare i pacchetti, puoi sempre raggrupparli tu stesso utilizzando BNDTools. Tuttavia, questo approccio potrebbe richiedere molto tempo per capire tutte le dipendenze e possibili problemi con il caricatore di classe richiedono operazioni di hacking su OSGi - L'approccio di incorporare OSGi in Tomcat, che può sembrare un approccio più sicuro e più semplice in superficie. Anche se non sono sicuro che otterresti benefici dai WAB in questo caso.

BTW uno dei vantaggi interessanti dei WAB è che è possibile condividere facilmente il codice tra WebApps, perché vengono distribuiti come pacchetti e si può semplicemente esportare/importare i pacchetti attraverso di essi. Qualcosa che non è realmente possibile con le distribuzioni non OSGi oggi.