On avait parlé du framework OSGI Felix [osgi-felix] la dernière fois et nous avions vu dans un précédent article qu’il en existe d’autres packages sous la forme de serveur d’application (comme le serait un Jboss [jboss] ou un Weblogic [weblogic]).
Nous allons justement nous intéresser à deux de ses serveurs:
- Karaf [karaf]
- ServiceMix [servicemix]
Bien sur ceux les connaissant diront que c’est grosso merdo la même chose, et effectivement, ServiceMix s’appuie sur Karaf mais en apportant un ensemble de bundle dédié à la communication et aux services, c’est à dire les WebServices et les services de messageries (SMTP, JMS, etc…). Il était donc important de le connaître également.
Rentrons directement dans le vif du sujet. Commençons par tester ces serveur avec les bundles que nous avions construit dans l’article sur Felix.
On va dans un premier temps construire une image docker contenant chacun de ces deux framework:
FROM openjdk:8-jre-alpine RUN wget http://apache.crihan.fr/dist/karaf/4.2.2/apache-karaf-4.2.2.tar.gz \ && tar zxvpf apache-karaf-4.2.2.tar.gz && rm apache-karaf-4.2.2.tar.gz COPY . / CMD cd /apache-karaf-4.2.2/bin; ./karaf
et pour servicemix:
FROM openjdk:8-jre-alpine RUN wget http://apache.crihan.fr/dist/servicemix/servicemix-7/7.0.1/apache-servicemix-7.0.1.zip \ && unzip apache-servicemix-7.0.1.zip && rm apache-servicemix-7.0.1.zip COPY . / CMD cd /apache-servicemix-7.0.1/bin; ./servicemix
Ensuite nous allons les démarrer pour explorer un peu leur utilisation basiques:
$ docker run -it --rm --name karaf collonvtom/karaf __ __ ____ / //_/____ __________ _/ __/ / ,< / __ `/ ___/ __ `/ /_ / /| |/ /_/ / / / /_/ / __/ /_/ |_|\__,_/_/ \__,_/_/ Apache Karaf (4.2.2) Hit '<tab>' for a list of available commands and '[cmd] --help' for help on a specific command. Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf. karaf@root()> shell:ls BUILDING.md NOTICE RELEASE-NOTES.md data etc instances lib system LICENSE README.md bin deploy examples karaf.pid lock karaf@root()>
et pour servicemix:
$ docker run -it --rm --name smix collonvtom/servicemix Please wait while Apache ServiceMix is starting... 100% [========================================================================] Karaf started in 0s. Bundle stats: 9 active, 9 total ____ _ __ __ _ / ___| ___ _ ____ _(_) ___ ___| \/ (_)_ __ \___ \ / _ \ '__\ \ / / |/ __/ _ \ |\/| | \ \/ / ___) | __/ | \ V /| | (_| __/ | | | |> < |____/ \___|_| \_/ |_|\___\___|_| |_|_/_/\_\ Apache ServiceMix (7.0.1) Hit '<tab>' for a list of available commands and '[cmd] --help' for help on a specific command. Hit '<ctrl-d>' or 'system:shutdown' to shutdown ServiceMix. karaf@root>shell:exec ls LICENSE NOTICE README RELEASE-NOTES bin data deploy etc examples instances karaf.pid lib licenses lock system karaf@root>
Ok du coup on note que les commandes ne sont pas tout à fait les même que sur Felix, mais que ces deux serveurs d’applications offrent un large panel de composants déjà installés.
Entre autre, on notera que si Karaf fourni essentiellement un environnement OSGI booster avec des services utilitaires afin de fournir un contexte d’utilisation et de développement ergonomique, ServiceMix va vraiment plus loin de incorporant des outils comme [Jackson], [Camel], [ActiveMQ] et anecdotiquement [Scala].
Retournons à nos moutons, je ne sais pas si vous l’avez remarqué mais nos deux serveurs ne fonctionnement pas nativement sur l'implémentation Felix de OSGI…. c’est possible de le faire bien su, mais c’est l’occasion d’introduire une autre implémentation (que nous recroiserons) qu’est [Equinox].
Ainsi en conséquence, il va falloir changer la dépendance maven vers le framework OSGI choisi:
<dependency> <groupId>org.eclipse.tycho</groupId> <artifactId>org.eclipse.osgi</artifactId> <version>3.11.2.v20161107-1947</version> <scope>compile</scope> </dependency>
On rebuild avec maven (je ne refais pas de topo la dessus je vous invite à consulter l’article précédent).
Maintenant il va falloir ajouter nos assembly à nos images docker…. pas de soucis pour ça…. on refait comme avec Felix, on surcharge les images que nous venons de créer en y incorporant les jar (à noter que nous déposons nos assemblies dans le répertoire deploy des serveurs respectifs):
FROM collonvtom/karaf:latest
COPY . /apache-karaf-4.2.2/deploy/
CMD cd /apache-karaf-4.2.2/bin; ./karaf
et pour ServiceMix:
FROM collonvtom/servicemix:latest
COPY . /apache-servicemix-7.0.1/deploy/
CMD cd /apache-servicemix-7.0.1/bin; ./servicemix
et on les exécute:
$ docker run -it --rm --name smix karaf-helloworld Demarrage du bundle Provider Enregistrement du service World Demarrage du bundle Consumer Inside WorldServiceTracker.addingService tc-osgi-bundle-hello-world-provider [13] Obtention du service WorldServiceFactory Hello World __ __ ____ / //_/____ __________ _/ __/ / ,< / __ `/ ___/ __ `/ /_ / /| |/ /_/ / / / /_/ / __/ /_/ |_|\__,_/_/ \__,_/_/ Apache Karaf (4.2.2) Hit '<tab>' for a list of available commands and '[cmd] --help' for help on a specific command. Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf. karaf@root()> list START LEVEL 100 , List Threshold: 50 ID │ State │ Lvl │ Version │ Name ───┼────────┼─────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────── 13 │ Active │ 80 │ 0.2.0.SNAPSHOT │ tc-osgi-bundle-hello-world-provider-0.2.0-SNAPSHOT 14 │ Active │ 80 │ 0.2.0.SNAPSHOT │ tc-osgi-bundle-hello-world-consumer-0.2.0-SNAPSHOT 25 │ Active │ 80 │ 4.2.2 │ Apache Karaf :: OSGi Services :: Event karaf@root()> Relachement du service WorldServiceFactory
et pour ServiceMix:
$ docker run -it --rm --name smix smix-helloworld Please wait while Apache ServiceMix is starting... 100% [========================================================================] Karaf started in 0s. Bundle stats: 9 active, 9 total Demarrage du bundle Provider Enregistrement du service World Demarrage du bundle Consumer Inside WorldServiceTracker.addingService tc-osgi-bundle-hello-world-provider [10] Obtention du service WorldServiceFactory Hello World ____ _ __ __ _ / ___| ___ _ ____ _(_) ___ ___| \/ (_)_ __ \___ \ / _ \ '__\ \ / / |/ __/ _ \ |\/| | \ \/ / ___) | __/ | \ V /| | (_| __/ | | | |> < |____/ \___|_| \_/ |_|\___\___|_| |_|_/_/\_\ Apache ServiceMix (7.0.1) Hit '<tab>' for a list of available commands and '[cmd] --help' for help on a specific command. Hit '<ctrl-d>' or 'system:shutdown' to shutdown ServiceMix. karaf@root>^Dkaraf@root> Inside WorldServiceTracker.removedService tc-osgi-bundle-hello-world-provider [10] Relachement du service WorldServiceFactory
Ok donc on constate que nos bundles sont démarrés lors du démarrage des serveurs et que l’ensemble fonctionne… ok on est iso avec Felix
Voila, nous venons de rapidement faire le tour de Karaf/ServiceMix avec le vieil exemple du Hello world. Dans le prochain article, nous regarderons comment simplifier la construction de nos bundles et de nos services en passant rapidement sur [SpringDM] et [Blueprint].
Edit*: depot git-hub du code de l'article https://github.com/collonville-tom/tc-hello-world
References
[osgi-felix] https://un-est-tout-et-tout-est-un.blogspot.com/2019/02/osgi-felix.html
[jboss] http://www.jboss.org/
[weblogic] https://www.oracle.com/fr/middleware/weblogic/
[karaf] http://karaf.apache.org/manual/latest/#_overview
[servicemix] http://servicemix.apache.org/
[Jackson] https://www.baeldung.com/jackson
[Camel] http://camel.apache.org/
[ActiveMQ] http://activemq.apache.org/
[Scala] https://www.scala-lang.org/
[Equinox] http://www.eclipse.org/equinox
[SpringDM] https://docs.spring.io/spring-osgi/docs/current/reference/html/
[Blueprint] https://www.eclipse.org/gemini/blueprint/documentation/reference/2.0.0.RELEASE/html/appendix-tips.html
Aucun commentaire:
Enregistrer un commentaire