2012-07-11 16 views
7

Ci sono pile-gestione delle applicazioni ben integrati che permettono la costruzione, l'implementazione e l'aggiornamento dei non .war applicazioni Java che vengono eseguiti come server? Ad esempio, i consumatori di messaggi sono server (ma non server Web e non dispongono di servlet) o eseguibili .jar s con Jetty incorporato?distribuzione delle applicazioni Java Server che non sono .wars

creazione e la distribuzione .war s è abbastanza semplice: Maven ha l'archetipo guerra, Jenkins ha un mucchio di plugin per la distribuzione .war file da vari server applicativi, la maggior parte dei quali accettano l'upload di nuove applicazioni web in fase di esecuzione. Strumenti come Elastic Beanstalk rendono questo processo ancora più semplice, collegando la gestione degli ambienti server.

contrario distribuzione eseguibili .jar s sembra come ri-inventare la ruota. Uno deve risolvere il modo migliore per ombreggiare le dipendenze e creare un artefatto eseguibile con una pletora di plugin Maven, depositare questo artefatto da qualche parte, quindi trovare un modo di installarlo sui server di destinazione e sostituirlo/aggiornarlo se necessario (pacchetti Debian sarebbe un modo per farlo).

Tutto questo mi sembra molto "manuale", al punto che mi sembra vantaggioso distribuire applicazioni come .war s ai server delle applicazioni, anche se non sono un adattamento naturale per un tale ambiente, solo così si ottiene beneficio del supporto degli strumenti.

+0

per i consumatori di messaggi, i bean MessageDriven dovrebbero essere adatti? Questi potrebbero essere pubblicati su un app server come JAR. – wrschneider

+0

Potrebbero essere - sfortunatamente sono ad una piccola startup che considera qualsiasi cosa "pesante" essere il lavoro di Satana. –

risposta

4

È possibile implementare questo distribuendo le applicazioni su un contenitore osgi.

Si potrebbe collegare in ciclo di vita OSGi per eseguire l'applicazione quando il bundle OSGi inizia. Quindi puoi avviare e arrestare il contenitore da remoto (se il contenitore lo supporta).

Le vostre applicazioni potrebbero definire le loro dipendenze come parte del manifest di osgi - ma i vasi di ombreggiatura che utilizzano il plugin di ombreggiatura non sono difficili quando si usa Maven e penso che sarebbe più facile da gestire piuttosto che gestire centinaia di vasi nel contenitore.

This question parla di distribuzione continua di fasci OSGi utilizzando Jenkins.

Un modo alternativo (e più standard) sarebbe quello di scrivere script che automatizzano la distribuzione - possibilmente utilizzando strumenti appositamente costruiti come puppet o chef. C'è un maven plugin per burattini che ti permette di estrarre artefatti da un repository Maven da usare nelle tue sceneggiature fantoccio.

Il burattino o lo chef in esecuzione da jenkins è banale e, se lo si desidera, è possibile fornire l'accesso alle build di implementazione ai membri del personale non tecnico, per consentire loro di distribuire nuove build in un ambiente con un clic di un pulsante.

Come suggerisce @bagheera creare gli RPM delle applicazioni e di iniziare i servizi è un buon modo per andare e riduce la complessità dei vostri script di distribuzione.

+0

Grazie per la risposta - guarderò su OSGi.Per quanto riguarda la scrittura di script, questo era generalmente l'approccio che speravo di evitare, ma sembra che potrebbe non essere possibile. –

+0

Se si accoppia la scrittura di script con il suggerimento rpm, gli script sono molto semplici 1.) scaricare rpm dal repository maven 2.) installare il rpm. Questo [slideshow] (http://www.slideshare.net/actionjackx/automated-java-deployments-with-rpm) mostra quanto gli script diventino semplici dopo aver utilizzato rpms - utilizza webapps come esempio, ma i jar sono altrettanto validi . – plasma147

3

Sembra che siete alla ricerca di un gestore di dipendenza per costruire la vostra jar eseguibile self-contained, e un gestore di pacchetti per la distribuzione. Oltre agli strumenti che hai menzionato, puoi controllare ant+ivy per build + dependency mgmt e rpmbuild + rpm + yum per la gestione dei pacchetti su linux.

Problemi correlati