Architecture en 3-POM avec Maven

maven-logo-black-on-white

Maven est un projet de la fondation Apache. Il s’agit d’un outil de gestion des dépendances et de cycles de vie d’un projet (du développement à la production du livrable). Il est principalement utilisé dans le cadre de développement des projets Java, mais peux être utilisé dans d’autres contextes.

Maven permet de découper un projet en plusieurs modules. Chaque module est un élément autonome qui a son propre cycle de vie. Maven utilise un réacteur pour orchestrer l’appel des différents modules en fonction de leurs dépendances.

Déployer automatiquement vos applications avec Apache Karaf

Lors des phases de développement par itération il est parfois long et pénible de redéployer les binaires produits à chaque compilation vers les environnements de tests ou de recette.

Dans cet article je vous propose découvrir le framework Apache Karaf qui est une alternative intéressante à des solutions plus lourdes (type Jenkins, Ansible, Docker, etc…) pour déployer vos applications depuis vos repository Maven en mode ‘devops’.

Découverte, installation et prise en main

Apache Karaf est ce que l’on appelle un ‘conteneur d’applications’, c’est-à-dire une application dont le but est d’embarquer et de gérer le cycle de vie d’autre applications. Il peut gérer des jars classiques mais également des jars répondants à la spécification OSGI, appelés ‘bundle’ qui contiennent les informations permettant de démarrer ou arrêter les services applicatifs et de gérer les dépendances.

Créer un profil de build avec maven

apache_maven

Cet article a pour but de d’expliquer comment mettre en place, de façon simple, un profil de build au sein d’un projet maven.

Maven est un outil permettant d’industrialiser les builds. L’industrialisation peut se définir par plusieurs aspects, et notamment la portabilité. Les profils permettent en effet d’ajouter au build la prise en compte de l’environnement.

Java et les tests

mavenjenkinsjunitsonarqube

Imaginons une organisation qui se lance dans le développement Java et souhaite monter sa première plate-forme de développement Java. Que peut-on lui conseiller pour la partie tests ?

Lorsqu’on parle de test en Java un des premiers noms qui vient à l’esprit est JUnit. Puis on pense à l’intégration continue qui permet de tester la non régression au fil de l’eau, par exemple avec Maven (mais en fait Maven s’occupe surtout du build). Et enfin éventuellement à Sonar (qui s’appelle SonarQube depuis peu) pour la qualité logicielle, et à Test Director (maintenant HP Quality Center) pour la gestion de plans de tests. Et en poussant un petit peu on arrive à se souvenir qu’on pourrait faire de la gestion des exigences, par exemple avec DOORS. Ah oui, et aussi qu’il faut gérer les bugs, par exemple avec Mantis, Jira ou Bugzilla.

Améliorez les performances: Parallel processing with Camel & Spring (Partie 1/2)

Ce billet s’inscrit dans la catégorie optimisation des performances.

Il se fixe comme objectif d’illustrer avec démo détaillée comment améliorer significativement les performances de nos projets.

Et cela sans se lancer dans l’aventure d’écrire des kilomètres de code lourd de gestion du ‘parallel processing’ car nous allons laisser la puissance du framework Camel opérer.

Sachez néanmoins que de nombreux problèmes de mauvaise performance peuvent être traités sans recours aux implémentations complexes de parallélisme.

Voici deux situations où il faudrait réfléchir sur l’apport du parallélisme :

– Si les tâches ou opérations ne prennent que très peu de temps (échelle quelque sec). La gestion/monitoring des threads devient coûteux.

– Si les ressources mémoire, CPU et IO sont déjà fortement utilisées; sachez que le parallélisme consomme davantage de ressources.

Le billet veut s’inspirer (librement) des deux étapes décrites dans la démo du chapitre 10 du livre « Camel in action ».

L’essentiel du code source est fourni ici.

Sachez néanmoins que le code présenté ci-après a été largement adapté et pour certaines parties complètement réécrits.

En effet, comme j’utilise Spring, toutes les parties de code sont adaptées ou réécrites en fonction.

En particulier j’utilise l’implémentation spring ThreadPoolTaskExecutor de l’interface TaskExecutor à la place de la méthode statique de Executors de java.

Le billet est organisée en deux parties:

– La première partie permet d’exécuter en séquentiel notre démo,

– La seconde permet adapte la première partie pour une exécution parallèle.

Nous donnons quelques indications sur le temps d’exécution de chacune des parties.

Avec les bons paramètres nous pouvons diviser par quatre le temps d’exécution voire plus.

Le framework Camel offre avec son java DSL des fonctions permettant d’obtenir simplement de meilleurs performances en parallélisant les tâches.

Comme d’habitude nous le combinons avec le framework Spring v3+ car peut-on faire autrement?

Dans le domaine de performance, il est utile d’identifier les deux limites: CPU-bound et IO-bound.

Distinguer ces deux limites permet d’identifier le bon choix pour améliorer les performances.

En guise de conclusion, dans le domaine d’exécution parallèle, Camel simplifie grandement la vie des développeurs.

Néanmoins, il leur reste la responsabilité de la cohésion des données.

Passons à la mise en pratique.

Une route Camel v2, Spring & SMTP : Envoi de mail

Apache Camel est un framework open source permettant de faire l’EIP (Entreprise Integration Pattern).
On présente ici une démo concrète un peu avancée sous maven.
On combine Camel v2 et Spring pour réaliser l’envoi de mails.
L’illustration repose sur le protocole SMTP mais d’autres protocoles (POP3,..) peuvent être adaptés.
Spring offre son propre framework d’intégration avec un vocabulaire proche de la littérature EIP.
Prochainement, je présenterai Spring-Integration pour l’envoi de mails via son channel.

Passons à la pratique

Connaissez-vous « Central » ?

“Central”, “Maven Central”, “The Central Repository”.  Vous rencontrez fréquemment ces termes dans le monde du développement Java open source. La plupart des collaborateurs de Sonatype pensent que tout le monde sait de quoi on parle lorsque l’on évoque « Central ». Comme ce n’est pas toujours le cas, cette vidéo vous donnera un aperçu de Central et ce qu’il représente pour la communauté Java. Bon visionnage !