2012-02-24 7 views
18

Domanda: A partire da oggi, quale dei due framework OSGi Enterprise è più maturo: Apache Aries o Eclipse Gemini?Framework OSGi aziendali: Confronto di maturità Apache Aries vs. Eclipse Gemini

Ho svolto alcune ricerche di base sulle funzionalità OSGi di Aries e Gemini Enterprise. Ho anche avuto una simile domanda: Gemini and Apache Aries blueprint container.

I miei requisiti e risultati di seguito. Apprezzerò molto i tuoi input aggiuntivi.

  1. Contenitore blueprint: Sia Aries che Gemini sembrano ugualmente maturi in termini di implementazione rispetto alle specifiche Blueprint.

  2. sviluppo Web (sarà lo sviluppo contro la JSR 286 utilizzando primavera Portlet MVC):
    Anche se Gemini Web ha radici nella primavera del DM (da qui la mia preferenza iniziale verso il quadro Gemini), credo che l'Ariete dovrebbe essere ugualmente in grado di lavorare con le applicazioni Web basate su MVC Spring Portlet.

  3. JPA: Questa è la mia principale area di interesse. Anche se inizialmente ero più incline verso Gemini (a causa delle sue radici in Spring DM e il supporto della comunità di SpringSource attiva), sento che la maturità di Gemini JPA è abbastanza bassa rispetto all'Ariete JPA. Motivi:

    • Gemini JPA supporta solo l'integrazione con EclipseLink come provider JPA. Mi piacerebbe usare Hibernate. Aries JPA supporta Hibernate.
    • Riferimento a Gemini JPA limitations: in particolare Limitazione n. 5: Mancanza di supporto per le transazioni JTA. Sembra che sia Aries JPA supports JTA ... Ma non sono stato in grado di entrare nei dettagli del livello di supporto.
  4. JNDI: le mie nuove applicazioni Web devono chiamare i bean di sessione esistenti da un livello di servizio ospitato all'interno del server di applicazioni JBoss. Quindi il supporto JNDI è cruciale per le mie applicazioni Web abilitate OSGi nel livello client.
    Sembra che Gemini denominazione è yet to be released mentre Ariete ha already got some capability in this area.

risposta

13

la stessa domanda è venuta in mente e ho ottenuto i seguenti risultati:

1: Gemini è sulla base di primavera che ha una molto più lungo passato e dimostrato molto. Mentre guardavo il codice, Gemini sembrava un po 'più pulito con maggiori possibilità di estensione, ma avevo problemi con i gestori dello spazio dei nomi. Anche con la versione 1.0.0 non ha aspettato i gestori dello spazio dei nomi. L'Ariete attende i gestori NS nello stesso modo in cui attende i riferimenti richiesti. Ho chiesto ai ragazzi di OSGi e hanno detto che la prossima specifica di Blueprint potrebbe contenere un API di gestione NS standard che a mio parere sarebbe di grande aiuto. La mia conclusione è stata che utilizzo Apache Aries ma non è una decisione definitiva. Esamino questo argomento in ogni trimestre dell'anno. Ho anche suggerito come migliorare Blueprint e averlo caricato su OSGi bugzilla. Mi piacerebbe implementare questi miglioramenti in estate e, mentre osservavo il codice, sarebbe molto più semplice basandomi su Gemini.

2: Gemini contiene un Tomcat incorporato. Se semplicemente trascini i fasci in un equinozio funziona abbastanza bene. Tuttavia contiene diverse dipendenze da Spring che volevo evitare. Mi piace la primavera ma volevo meno dipendenze di cui avevo bisogno. Non credo che l'Ariete abbia alcun supporto importante in questo argomento.Finalmente ho iniziato a usare Jetty che funziona con Myfaces e Jersey fino ad ora. Non ho provato nient'altro fino ad ora. Inoltre mi sono piaciute di più le possibilità di configurazione del Jetty. Un bundle di configurazione può essere definito come una variabile di ambiente che può essere di grande aiuto se si desidera eseguire test di integrazione come parte del ciclo di vita della build. Se Gemini supporta più opzioni di configurazione (come quella proveniente dal pacchetto), penserò di trasferirmi su quello.

3: Poiché mi piace usare JTA, per me non è possibile utilizzare Gemini. Ho usato Ariete JPA per un po 'di tempo e ne sono rimasto soddisfatto. Lavorando con molti colleghi, sono responsabile della loro efficacia. Con Aries JPA ho avuto il problema che non aspettava i servizi DataSourceFactory (se la connessione db è definita nel persistence.xml) oi servizi DataSource (se jta-data-source o non-jta-data-source) sono definiti. Significa che l'ordine di partenza del pacco è importante quando si utilizza Aries JPA.

Non è stato un problema finché non abbiamo utilizzato Glassfish e JNDI come Glassfish ha avviato le risorse JNDI prima che i nostri bundle OSGI. Quando ci siamo spostati per pulire il container OSGI, abbiamo iniziato ad avere problemi ei miei colleghi hanno iniziato a dedicare una grande quantità di tempo a cercare di ottenere il giusto ordine di avvio del bundle.

Alla fine ho semplicemente inserito Aries JPA in un pacchetto e ho riscritto le parti che non mi piacevano. Ciò significa che ho conservato solo la parte parser persistence.xml e ho creato un proprio progetto allo http://everit.org/osgi/jpa/org.everit.osgi.jpa.container/index.html, dove mi sono concentrato senza avere questo problema. Attualmente funziona con Hibernate e immagino (non ho provato) con EclipLink e Compilare il tempo con OpenJPA migliorato. Il contenitore scritto da me funziona bene con i gestori org.apache.aries.jpa.container.context e aries jpa blueprint namespace.

4: Se si utilizza un server delle applicazioni e si è certi che l'ambiente JNDI si avvii prima dei pacchetti anziché utilizzarlo. Tuttavia non è possibile rilevare la modifica o rimuovere una risorsa JNDI, pertanto non suggerisco di utilizzarla all'interno di OSGi. Se necessario, grazie a JPA, posso suggerire l'implementazione del container :) che utilizza i tracker di servizio OSGi standard anche se si utilizza * -data-source nel persence.xml con osgi: service/... expression. Se è necessaria una posizione di configurazione centrale, si consiglia di controllare la scheda Configurazione di felix-webconsole, le parti Metatype e Configuration Admin delle specifiche OSGi. Se si definisce un'impostazione di configurazione con l'aiuto di Metatypes, questi saranno disponibili su feilix-webconsole e tramite l'API di amministrazione della configurazione sarà possibile rilevare gli eventi di modifica della configurazione. Ho provato e felix-webconsole ha funzionato per me anche sulla coppia Equinox-Jetty.

Spero che il mio contributo sia stato utile!