Archive

Archives pour la catégorie ‘Java EE’

La fondation Apache quitte le JCP

Le mois dernier, Yannick dans un excellent billet de synthèse se demandait si la guerre de Java aurait lieu.

Une marche de plus vient d’être franchie. La fondation Apache a mis sa menace à exécution et a quitté le JCP, 2 jours après que celui-ci ait adopté les spécifications de Java 7 et 8. Pour mémoire, l’objet du litige (qui ne date pas d’aujourd’hui, cf la lettre ouverte envoyée à Sun en 2007) c’est le TCK (et plus précisément les FOU – field of use) qui permet de certifier une JVM et qui n’est aujourd’hui pas open-souce (Sun ne voulait pas le libérer… et Oracle non plus).

A ce stade nombre de questions se posent :

  • le projet Harmony va-t’il être abandonné ?
  • quelle conséquence cela peut-il avoir sur Android ? (Android s’appuie sur DalvikVM qui reprend nombre de classes issues d’Harmony)
  • comment va réagir Google ? (Google reste désormais parmi les grands le seul « opposant » à Oracle sur le sujet du TCK)
  • Oracle cherche-t-il désormais à rentabiliser Java à tout prix ? (en privilégiant les clients qui payent au détriment de la communauté libre)
  • est-ce que cela va profiter à Microsoft et aux projets libres de la famille Mono ? (les différents contentieux entre Oracle et SAP conduisent déjà ce dernier à se rapprocher de plus en plus de Microsoft)
  • est-ce un bien ou un mal pour Java ? (moins d’acteurs impliqués dans les choix peut peut être accélérer la roadmap)
  • la communauté libre va-t-elle se reporter sur Ruby ?

Prochaine étape peut être : le verdict du procès opposant Google et Oracle à propos de violations de brevets qui seraient faites dans Android.

N’hésitez pas à réagir !

Categories: Actualités, Java EE Tags: , , ,

Paris JUG : soirée Moteur de règles

Le 11 novembre 2010, le Paris JUG mettait en avant les moteurs de règles.

Au programme quatre présentations sur un sujet qui ne me parlait pas !

La première présentation nommée « Business Rules Management System », présentée par Emmanuel Bonnet de Genigraph, me permet d’ailleurs de rentrer dans le sujet et comprendre l’intérêt .
Les moteurs de règles ou Business Rules Management System permettent d’écrire, d’exécuter et de gérer (cycle de vie, version …) un ensemble de règles métiers.
Une règle métier ressemble à cela : SI [condition] (ET|OU [autres condtions]) alors [faire telle action]. Par exemple : Si le conducteur n’a pas eu d’accident depuis 3 ans alors appliquer 15% de réduction.

Et la vous me lisez en vous demandant si c’est pas un trop une soirée sur des IF THEN ELSE .. je vous comprends moi aussi j’ai failli me poser la question.

En fait le problème n’est pas dans l’élément unique mais dans l’assemblage d’un très très grand nombre de ces règles ! Il y a un moteur d’inférence pour exécuter les règles métiers. Le BRMS permet d’externaliser, d’expliciter et de gérer ces règles.
Par exemple j’ai une application que je veux concevoir dont une partie que je veux externaliser ou déléguer à des experts du domaine ou pouvoir modifier régulièrement. Par exemple un métier avec de nombreuses offres commerciales régulières (par exemple fournisseur de services mobiles).
On peut alors utiliser un BRMS avec la logique technique de l’application qui englobe une logique métier que l’on veut extraire. L’intérêt est de pouvoir modifier les règles métiers sans refaire un cycle de livraison du socle technique.

Expliciter l’application permet de rendre le code :

  • Compréhensible : métier visible et lisible (langage usuel + grammaire alors un traitement qui s’applique sur un concept)
  • Modifiable sans avoir besoin à des informaticiens
  • Traçable : on peut relire une séquence d’une décision (les conditions menant à une action)

On peut donc récupérer au mieux le savoir du client et l’impliquer dans le projet.

Un moteur de règle exécute les règles de fait, les optimiser et garantit la cohérence. Il est fait pour optimiser beaucoup de faits et beaucoup de règles (Voir algorithme de RETE). Il y a aussi la présence d’outil de monitoring de règles, d’un workflow pour les règles et ainsi mettre en place une logique de décisions.
Les règles peuvent être insérées suivant différents formats : texte, tableur type excel (2 parties : condition et action) ou directement Eclipse.

Les deux plus gros acteurs sont JRules et Drools.

La 2ème intervention de Laurent Magnin – In Fine présente un ensemble de cas concrets et met en avant la formalisation de l’expertise, le pilotage et les possibilité de prises de décisions. Il commence aussi à parler de système expert.

Pour la 3ème présentation, l’intervenant, Daniel Selman, nous vient directement d’IBM et nous présente donc l’outil ILOG JRules BRMS.
Il insiste sur le fait quand un projet Les besoins donc les spécifications changent. Il faut s’y attendre et donc désigner pour !
Un BRMS comme ILOG JRules permet justement cette gestion du changement : qui a demandé un changement ? qu’est ce qui a changé ? Qui a fait le changement ? qu’est ce qui valide le changement ?
ILOG permet aussi d’éxecuter différentes configurations de règles métier pour permettre, par exemple, de gérer en parallèle un serveur de production et de tests.
L’intervenant nous a fait une démo en direct du produit, par exemple du client web pour les experts métiers afin d’éditer les règles métiers.

La 4ème et dernière présentation par Geoffrey de Smet a été pour moi la plus intéressante car elle a mis en valeur l’intérêt des systèmes experts. Oui car l’intérêt des systèmes experts est remonté à ma mémoire (ahh les études ça commence à dater) résoudre ces problèmes si complexes qu’ils sont parfois classés dans le domaine de l’intelligence artificielle.
L’intervenant expose 3 problèmes de planning NP Complexe : un petit problème de rangement de colis dans une voiture dont la place est contrainte, un planning de travail dans un hôpital et la gestion des malades dans les lits d’hôpitaux. C’est sur ce dernier exemple qu’il insiste en montrant qu’à l’échelle d’un grand hôpital, l’algorithme qui donne la réponse parfaite n’existe pas ! Le nombre de combinaison est tout simplement infinie. La solution est donc de partir sur un algorithme déterministe (temps fixe, facile à implémenter) puis d’utiliser des méta-heuristique en « bougeant les éléments » petit à petit (plus on a du temps, meilleure est la solution). Il suffit de gérer les optimum locaux. C’est ce que fait Drools Planner !

Voila pour le compte rendu de la soirée.

Les présentations sont sur le bas de la page du Paris JUG.

Categories: Java EE Tags: ,

La guerre de java aura-t-elle lieu ?

Une très longue discussion autour de la JVM et de l’open source anime actuellement la liste de diffusion des Cast Codeurs.

Suite au rachat de Sun par Oracle, il y a beaucoup de mouvements et parfois les directions sont sujettes à doute sur l’avenir de Java notamment dans sa composante Open Source.
Le procès d’Oracle contre Google a remis au premier plan un des éléments peu connus de Java : celui-ci est « presque » libre et surtout un gros flou de licence entoure la JVM.

Revenons en arrière.

Déjà il existe plusieurs Machine Virtuelle Java comme l’indique cette liste.
Les JVM commerciales les plus connues sont celle de Microsoft (stoppée en 2009), celle de Sun (rachetée par Oracle), celle d’IBM, celle de BEA (rachetée par Oracle).
On voit que le nombre d’acteurs a grandement diminué.

En mai 2005, la fondation Apache annonce le lancement du projet Harmony afin de créer une implémentation de Java libre donc une JVM libre.
Seul problème pour que cette implémentation soit valide il faut qu’elle passe le Technology Compatibility Kit ou TCK qui lui n’est pas libre. Voila vous avez touché le « presque » libre de Java :)
La fondation Apache lance principalement Harmony pour essayer de faire plier Sun.

Le 13 novembre 2006, Sun annonce le passage de Java, c’est-à-dire le JDK (JRE et outils de développement) et les environnements Java EE (déjà sous licence CDDL) et Java ME sous licence GPL. En mai 2007, Sun publie effectivement OpenJDK sous licence libre.

En 2009, Android débarque avec sa JVM très spécifique nommée Dalvik qui est basé en partie sur Harmony.
Et voila qu’on arrive en aout 2010 où Oracle (qui a mangé Sun pour les deux du fond qui ne suivent pas ;) ) attaque Google pour violation de brevet sur cette JVM.
Déjà que le rachat de Sun par Oracle avait provoqué des doutes dans la communauté, c’est un très mauvais présage pour l’écosystème dit libre qu’est Java car sa fondation (la JVM) n’est pas libre !

Ensuite succession d’évènement :

  • IBM quitte le projet Harmony
  • IBM rejoint OpenJDK
  • Apple décide de ne plus continuer sur sa JVM
  • Apache fait la gueule et menace de quitter le JCP
  • Apple rejoint OpenJDK

En quelques semaines, l’échiquier a tellement bougé que je ne vais pas faire de pronostic. Cependant la tendance semble être au soutien des gros acteurs commerciaux sur OpenJDK. Malheureusement le fait que la communauté pure du logiciel libre ne suive pas complètement laisse planer le doute.

Pour plus d’information à la fois politique et technique lisez les messages du groupe Cast Codeurs :)

Des liens en vrac :
http://www.theregister.co.uk/2010/10/25/doug_lea_oracle_jcp_stuffing/
http://www.theserverside.com/news/2240024154/The-Oracle-Lawsuit-Will-End-with-Google-Owning-Java
https://blogs.apache.org/foundation/entry/statement_by_the_asf_board1
http://www.apache.org/jcp/sunopenletter.html

MIS à JOUR :
Allez ca bouge :
http://www.jroller.com/scolebourne/entry/java_se_7_and_8
http://www.jroller.com/scolebourne/entry/oracle_replies_to_the_asf
http://www.zdnet.fr/actualites/java-dialogue-de-sourds-entre-oracle-et-la-fondation-apache-39756135.htm#xtor=RSS-8

Categories: Divers, Java EE Tags:

wiQuery en 1.1 !!

Bonjour à tous,

Désormais, vous pourrez trouver sur le dépôt maven de wiQuery deux nouvelles versions (encore une fois !): la 1.0.3 and surtout la 1.1 !! Celle-ci se base sur jQuery UI 1.8.5 et offre de nouveaux composants. Mais surtout, un gros travail de refonte et d’actualisation a été apporté vis-à-vis des nouveautés qu’apporte Wicket (nous nous basons désormais sur la version 1.4.12 où nous pouvons trouver un tout nouveau listener depuis la 1.4.9:  IComponentOnBeforeRenderListener).

Désormais, et vu que le nombre de committers officiels a augmenté, nous allons essayer de publier tous les deux mois une nouvelle version de wiQuery.

La prochaine version, la 1.2, est donc prévu pour courant Janvier. Elle proposera aux utilisateurs des composants de bases plus poussés et aussi la possibilité d’utiliser les modèles Wicket. Également, de nombreux axes de travail sont prévus:

  • Création d’un site dédié à wiQuery
  • Documentation renforcée
  • Exemples / démonstrations renforcés
  • Étude de faisabilité pour un wiQuery-mobile (avec jQuery mobile)
  • Création d’une extension avec prévision d’insertion dans le cœur de wiQuery qui utilisera les widgets Wijmo !! Ce sont des widgets avancées qui se basent sur jQuery UI !! Petits exemples: http://wijmo.com/Wijmo-Complete/samples/

Pour plus d’informations, rendez-vous sur le site officiel du projet: http://code.google.com/p/wiquery/

De grands remerciements aux membres de jWeekend, de Wicket et aux committers officiels qui ont permis la sortie de cette 1.1.

Bon weekend à tous !!

Categories: Java EE, RIA, Wiquery Tags: , , , ,

Formations en soirée ouvertes aux candidats au recrutement

formez-vous.objetdirect.comDepuis plusieurs années, Objet Direct a mis en place un dispositif original de formations en soirée, pour favoriser la montée en compétences de ses collaborateurs avec des stages extrêmement qualitatifs et sur mesure, conçus au sein de notre centre de formation interne.
Aujourd’hui, nous ouvrons gratuitement ces formations en soirée aux personnes désireuses de candidater auprès d’Objet Direct, avec un premier programme planifié sur Grenoble de novembre 2010 à janvier 2011, autour des technologies Microsoft .NET, Java et HTML5 :

Formation .NET: organisée sur 2 soirées les 18 et 23 novembre 2010, à l’agence de Grenoble
Formation JEE6 & Spring3: organisée sur 2 soirées les 9 et 14 décembre 2010, à l’agence de Grenoble
Formation HTML5: organisée sur 2 soirées les 13 et 18 janvier 2011, à l’agence de Grenoble

plus d’infos sur le site Objet Direct, rubrique Espace Carrières

JAOO/GOTOcon Aarhus 2010 – Retour global 2

Des informaticiens aux pays des Vikings….

gotocon

Gotocon

En effet Comme le dit si bien Mathieu, « alternative » est bien l’un des mots qu’il faut retenir de cette conférence Goto (anciennement appelée JAOO). J’adhère à cette impression « boules à neige » énoncée qui reflète parfaitement la diversité des sujets abordés : Architecture et Design, Langages et Plateformes, Agilité, Le Web et le Cloud Computing, et même un Track proposant des solutions sur divers points comme par exemple la performance de Java dans un système multi-core.

Autant vous dire qu’avec tout ceci il y avait matière à se demander quel speaker et quel sujet on allait écouter.

Comme le souligne Mathieu l’esprit « visionnaire » de la conférence peu parfois nous déconnecter de notre réalité quotidienne. On y parle de sujets de demain tout en faisant un état des lieux des solutions actuelles.
C’est probablement pour cette raison que la conférence a été renommée « Goto ».

Je partage le ressenti général sur cette conférence. On nous a démontré que Java s’essouffle (on entend de plus en plus les mots comme SCALA, Clojure etc…) ; que l’agilité c’est bien mais que l’on peut être encore plus agile ; et que le développement sur mobile est un sujet très important. L’apparition de toutes ces plateformes mobiles, nous facilite une fois encore notre quotidien. On peut choisir notre plateforme préférée :-) Mais ne faudrait-il pas développer notre super application mobile pour toutes les plateformes ? .

Pour ma part, j’ai principalement participé au Tracks techniques. On est au pôle « dev » où on ne l’est pas :-) .
Je vous ferai prochainement des retours plus détaillés sur les différentes alternatives que j’ai suivies.

A bientôt !!!

Lyon JUG : soirée gestion de configuration décentralisée (GIT, Mercurial)

Après une pause estivale, le Lyon JUG est de retour!Lyon JUG Il reprend son rythme habituel, et son moyen quasiment mnémotechnique : chaque troisième mardi du mois, toujours à l’Epitech.

La soirée du 21 septembre sera consacrée aux nouveaux systèmes de gestion de configuration décentralisée : GIT et Mercurial.

LeLogo JDuchess Frances développeuses seront plus que jamais conviées : on y annoncera la création de l’antenne lyonnaise de JDuchess. Leur activité commence par une interview des intervenants à cette soirée.

Inscription et informations pratiques sur la page officielle.

Java EE, le mal aimé, fait son retour en force

Le dernier Paris JUG avant la pause estivale était consacré entièrement à Java EE 6.

Adam Bien, membre du JCP et Java champion, nous a fait une présentation en deux parties : d’abord les concepts et ensuite des exemples de code en direct.

Les concepts.

L’utilisation des annotations et du principe de « convention over configuration » fait souffler une brise légère sur notre vision de Java EE !

Java EE se veut maintenant rapide, simple, léger, « lean » et permettre des cycles de développement court. Bien sur la comparaison avec Spring arrive très vite : Spring nécessiterait plus de configuration et Java EE 6 serait plus basé sur les conventions.

D’abord j’aimerais insister sur le principe de « convention over configuration » qui a fait le succès de frameworks très productifs tels que Ruby on Rails, Grails ou encore Play. Si l’ensemble reste fortement configurable dans la joie des fichiers XML, ce principe permet d’alléger considérablement le travail de développeur et donc de le rendre plus productif. Cela permet aussi d’avoir un framework plus cohérent.

Adam Bien nous fait un retour sur l’ensemble des concepts phare de l’architecture : ECB, SOA et DDD.

Il nous présente d’abord le pattern Entity Control Boundary qui est un pattern similaire à MVC et son application avec JEE 6. Il en vient ensuite rapidement au concept du Domain Driven Design qu’il met en avant ! Ce qui fera plaisir à certains :) L’idée est d’avoir des entités riches et réellement utiles et d’enlever la couche DAO. Les domaines sont mis en avant au détriment des services. La logique s’oppose donc à l’architecture SOA classique qui s’articule autour du trio Service/DAO/Domain. C’est une approche avec état qui permet alors d’adresser certains problèmes plus simplement et de remettre la complexité du métier au sein de l’application. La synchronisation entre les objets et la base de données se fait grâce à JPA/Hibernate. Elle permet aussi d’avoir moins de couche technique et s’interface très bien avec REST.

Il présente aussi la facilité de mettre en place la vue avec JSF 2 qui permet  d’accéder directement à des Managed Beans ou à des EJB, grâce à un Expression Language. La couche de configuration de la vue en devient presque inexistante.

Il fait bien sur le tour des apports et des nouveautés de Java EE 6 :

  • un JNDI standardisé
  • EJB 3.1 + REST facilité avec l’annotation @Path (pas de XML, pas de configuration de container)
  • des timers similaire au « cron » avec @Schedule
  • des singletons avec @Singleton (en combinant avec @PostConstruct, on peut ainsi créer des singletons simplement et de manière sûre).
  • tâches asynchrones avec @Asynchronous qui renvoient des objets de type Future<?>.
  • EJB qui exposent directement leur métriques en JMX.
  • Selon Adam, la différence de performances entre un Pojo et un EJB est infinitésimale – alors que la possibilité de monitorer l’application en production est « priceless ».
  • CDI qui s’inspire de ce qui a été introduit par Spring

Dans la deuxième partie de cette soirée, Adam Bien fait le tour en direct des principales fonctionnalités de Java EE 6.

En conclusion, pour quelqu’un qui, comme moi, n’a pas une grand expérience sur toute l’architecture SOA et qui fuit les fichiers de configurations, Java EE 6 semble clair, facile à prendre en main et réellement efficace ! La mise en avant de l’approche DDD est aussi de bonne augure la qualité des applications.

Allez pour compléter, vous trouverez d’autres excellents résumés ici :

Categories: Java EE Tags: ,

Paris JUG mai 2010 : Soirée Share, Build & Deploy

Tout d’abord, les différentes annonces qui ont eu lieu durant la soirée hier :

  • Alexandre Bertails nous présente rapidement son nouveau job au W3C ainsi que le fonctionnement de l’organisme avec un rapide retour sur ce qu’est le web et l’importance du consortium.
  • Developpez.com est un JUG … qui n’envoie pas de représentant, ils font donc profiter de leur place à Jazoon’10 à un volontaire qui a été tiré au sort.
  • Une boutade dans la semaine, deux offres d’emplois supplémentaires sur son site d’ « Offres d’emplois pour passionnés », et Nicolas Martignole se voit en « obligation » d’offrir le buffet. Merci à lui !
  • L’ISEP prête la salle de 200 personnes gratuitement, Antonio les remercie et demande des volontaires afin de pouvoir leur rendre service en retour en proposant des cours à leurs étudiants.

Entrons dans le vif du sujet ! La première partie de soirée est orientée « Share » avec un retour d’expérience sur le passage d’un CVCS (Gestionnaire de sources centralisé) à un DVCS (Gestionnaire de sources distribué) suivi d’une présentation du DVCS qui monte : Git. La seconde partie de soirée nous fourni une présentation de Maven 3 et de Deploy It.

DVCS

La présentation du sujet a été faite par Sébastien Douche qui nous fait donc ici un retour d’expérience sur un ton décalé et des slides épurées … très agréable.

Arrivé il y a 2 ans dans son entreprise actuelle, il fait le constat de la (classique) sous utilisation de SVN et après analyse du problème, migre vers un DVCS. Son crédo : les tests automatisés et l’outil de versionning sont les 2 filets de sécurité indispensables à un développement logiciel.

Le problème :

Après avoir tenté une évangélisation des bonnes pratiques SVN, il constate tout de même une dégradation régulière de la qualité, impliquant une démotivation (il parle de souffrance) des développeurs allant se poser la question ultime : a-t-on fait le boulot qui nous a été demandé ?

Le problème ne se situe pas au niveau du travail effectué… mais vient plutôt du fait qu’il n’est pas bien partagé ! Notamment avec un phénomène de « micro-merge » : pour exagérer, les développeurs font des commit de chaque ligne de code modifiée pour éviter d’avoir un trop gros merge à faire par la suite ! Ce qui implique une version constamment instable sur le serveur d’intégration et des difficultés à savoir où l’on en est dans le projet.

Une première solution pointe le bout de son nez : si on faisait des branches SVN ? Hum … Attendez, je crois qu’on tente de nous expliquer comment éviter ça :-)

L’impact du DVCS :

En règle générale, les outils de versionning centralisés sont utilisés principalement pour faire du suivi d’historique … et non leur boulot. On souhaite donc : un environnement constamment stable afin de connaitre l’état du projet tout le temps !

Pour cela, on va isoler le travail des développeurs en repensant notre façon de travailler, via une analyse des besoins réels, 3 workflows sont identifiés :

  • La méthode de l’organisation (donc la gestion du repository central), avec une façon de faire par organisation. En général, le workflow le plus connu puisque c’est celui qui est visé par SVN et consorts. L’idée ici, c’est que la méthode de l’organisation ne soit pas impactée par les deux workflows suivants. Le but à atteindre serait, par exemple, d’avoir un seul commit par fonctionnalité.
  • Puis le workflow inter-personnel, nouveau donc, qui doit être mis en place justement pour éviter d’impacter le repository central : nouveau dépôt de développement, dépôt temporaire, échange de patchs (très utilisé dans le monde de l’open source), branche spécifique, … Il permet aux développeurs de travailler entre eux.
  • Et finalement le workflow personnel, ici aussi à bien séparer des deux autres et chacun pourra travailler à sa façon.

L’important, donc, est que ces workflows soient déconnectés les uns des autres.

Une fois la mise en place effectuée, le constat est le suivant : le développeur est concentré sur SON travail et non sur celui du voisin par peur des impacts qu’il pourrait-y avoir sur le sien. Avec cette fois un commit par fonctionnalité sur le repository central, plus de souplesse avec notamment la possibilité de faire de la revue de code et/ou une démonstration pour une et une seule fonctionnalité !

Il est à noter que ces nouveaux outils sont orientés contenu et non changement. Je pense que tout le monde s’accorde pour dire que SVN ne sais pas gérer le renommage de fichiers par exemple ! On voit donc disparaitre les dossiers ‘.svn’ et l’on gagne énormément en place et en vitesse.

En bonus, des repository sont accessibles en ligne. Un outil de binding permet une transition douce en intercalant le DVCS entre le développeur et son SVN.

Conclusion

Je crois que sa conclusion était plutôt claire :

Libérez-vous : utilisez un DVCS

Git, la gestion de configuration qui vous veut du bien

Présentée par David Gageot, très proche et complémentaire de la session précédente. On part sur le même ton puisque qu’il commence par reprendre la conclusion de Sébastien :-) Il insiste notamment sur le fait qu’un outil est fait pour ouvrir des possibilités … et non en fermer !

Git est donc un DVCS, le plus connu avec Mercurial. Pour faire court :

  • Pas besoin de serveur !
  • Chaque utilisateur a tout l’historique en détail
  • Fonctionne en déconnecté

Mais pour l’utiliser à pleine puissance, il faut oublier comment SVN fonctionne !!!

En général, on ne fait pas de merge avec ce type d’outils.

Démo

Il nous fait ensuite une démo rapide d’une fonctionnalité majeure : bisect.

L’idée est de retrouver quel commit a cassé le build. Avez-vous déjà tenté le coup avec SVN ?

L’idée ici est de donner à cette commande un commit qui ne cassait pas le build ou les tests, celui qui ne fonctionne plus et le test à effectuer (manuel ou automatique). Et par dichotomie, elle va retrouver la version qui a cassé le build.

On peut pousser plus loin :de ce fait, il est possible de jouer un nouveau cas de test (qui devrait passer mais ne passe finalement pas), sur des anciens commit !

Et si on jetait les serveurs d’intégration continue ?

En effet, il est tout a fait envisageable (d’autant plus que c’est ce que David a mis en place dans son entreprise) d’écrire un script qui fait un « private build » avant de faire le commit réel seulement si ce build réussi. Cela est rendu possible par les performances de Git et il est tout à fait possible de travailler en même temps que ce script fonctionne.

Conclusion

Il y a énormément de nouveauté dans Git qu’il n’est pas possible de présenter dans le cadre du Paris JUG. Il nous conseille donc le livre Pro Git.

Il répète Sébastien en confirmant qu’il est possible de passer à Git en une commande : Git va importer le contenu du SVN et agir comme passerelle bidirectionnelle.

Maven 3

2 commiters Maven, Nicolas De Loof et Arnaud Héritier nous présentent Maven 3. La présentation est dynamique mais je reste sur ma faim quand aux nouveautés du produit : elles sont quasiment inexistantes … pour l’instant.

Le contenu :

En effet, le gros sujet, de cette version était une remise à plat des bases avec une refonte du produit (Passage à Java 5) et l’écriture d’une batterie de tests à priori impressionnante. L’écriture de plugins en revanche devrait être simplifiée grâce aux nouvelles API.

Un build plan est mis en place : les plugins pourront savoir ce qu’il s’est passé auparavant dans le buid et donc travailler en conséquence. Notamment le plugin Eclipse pourra laisser Eclipse faire sont boulot (compilation incrémentale) et en tirer bénéfice.

Les pom pourront être écrits dans d’autres langages (groovy, python, …) et les profils ont été revus.

Le résultat :

Une version 100% compatible avec les pom existants via un simple changement de MAVEN_HOME. Les impacts possibles se situent au niveau du plugin site qui n’est pas ou pas bien supporté et éventuellement dans les descripteurs de projet qui sont plus contrôlés.

Le gain que l’on peut avoir aujourd’hui en migrant se situe principalement sur les performances et de meilleurs logs.

Le futur :

  • Ajout de la possibilité d’injecter de la configuration dans le pom (mix-in) afin de dépasser les limitations de l’héritage simple.
  • Exclusions globales rendues possibles.
  • Build parallèle sur multi-coeur
  • Ajout d’une console (Maven Shell)

Conclusion :

Il y a peu de risques de régressions, et le passage de Maven 2 à Maven 3 devrait faire gagner du temps. Pour les développeurs Maven et/ou de plugins, le coût d’entrée est maintenant beaucoup plus bas étant donné la refonte. De ce fait la communauté revit et le produit se professionnalise.

Deploy It

La soirée se finit avec la présentation d’un outil d’automatisation des déploiements Java, réalisé par la société XebiaLabs. La présentation de l’outil est faite par Guillaume Bodet et Benoit Maussaud.

Le produit ne se contente pas d’une simple copie de WAR/EAR mais gère aussi :

  • Binaire
  • Ressources (datasource, securité, …)
  • Fichiers de conf
  • Base de données
  • Réécriture apache
  • Fichiers statiques (HTML, images, …)
  • Batchs

Je dois avouer que je me suis arrêté là dans la présentation, l’outil n’étant pas open source et ayant l’air plutôt complexe pour une problématique ne me concernant pas …

http://mercurial.selenic.com/
Categories: Actualités, Divers, Java EE, Outillage Tags: , , ,

Paris JUG : soirée « Emmanuel Bernard »

logoparisjug
La soirée du Paris JUG a commencé par une présentation de JDuchess : communauté féminine autour de Java. Il s’agit d’un groupe international qui a été fondé en Hollande.

Ensuite, la soirée « Emmanuel Bernard » s’est déroulée en deux parties : la première sur Hibernate Search et la seconde sur le design des APIs.

Première partie : Hibernate Search : recherche full-text pour des applications utilisant Hibernate.

Pour la recherche, il existe plusieurs modules de recherche full-text (par exemple avec SQL Server). Cependant, il n’existe pas de standard sur ces modules de recherche. Une autre solution pour réaliser de la recherche full-text est d’utiliser une librairie. Hibernate Search est basé sur  « Lucene », il permet de réaliser une recherche full-text avec les caractéristiques suivantes :

  • ordonne les résultats, les documents les plus pertinents seront dans les premiers résultats.
  • tolère les fautes de frappe ou orthographiques
  • on peut donner des priorités aux différents champs

La recherche full-text va s’appuyer sur un analyseur et plusieurs filtres. Parmi les filtres, on peut mettre tout en minuscule (recherche insensible à la case), enlever certains mots (le, la les).

Il y a plusieurs techniques qui permettent de comparer deux mots et donc qui permettent une recherche :

  • Recherche par approximation avec le calcul de distance de Levenshtein (distance entre deux mots). Si entre deux mots, 1 seule lettre change => bonne distance.
  • Recherche N-gram : cette technique permet de tolérer les fautes de saisie de l’utilisateur. Par exemple, au lieu de rechercher Hibernate, on découpe le mot en fragments de 3 lettres : Hib, ibe, ber et on recherche ces fragments … (le nombre de lettres du fragment est configurable).

D’un point de vue technique :

  • L’annotation @Indexed mise sur une entité permet de l’indexer en full-text. L’index sera mis à jour pour toute modification de l’entité.
  • L’annotation @Field crée un champ de recherche dans Lucene

Remarque : La recherche full-text se réalise uniquement sur du texte, des chaînes de caractères, Hibernate Search possède donc ses propres convertisseurs (date…)

Il est possible d’utiliser l’annotation @Fields qui permet de définir plusieurs types de recherche sur le même attribut. Il est possible de pondérer les différents critères. Par exemple, un mot trouvé dans un titre aura une meilleure pertinence que le même mot trouvé dans la description.

  • Recherche phonétique : prendre un mot et réaliser de la réduction phonétique (métaphone ou double métaphone, bien adapté aux langages latins).
  • Recherche de synonymes : on n’indexe pas le mot lui-même mais un mot de référence. Par exemple, pour like, cherish, le mot de référence sera love. On crée alors un sous-ensemble de la langue
  • Recherche par mots de la même famille (loving =>love) : on réduit un mot à sa racine. Le docteur Porter a écrit un algorithme sur ce principe appliqué à la langue anglaise (langage snowball). Ce dernier type de recherche est présent dans Hibernate Search, il s’agit de l’analyseur stem.

Astuce : il peut être judicieux de mettre plusieurs fields sur le même attribut pour pouvoir ajuster la pondération même en production.

Conclusion : Lucene est assez bas niveau, il peut donc être assez complexe à utiliser. Hibernate search est plus facile à mettre en place et permet de se concentrer sur le moteur de recherche.

Deuxième partie : Design d’API

Cette partie nous a exposé les bonnes pratiques pour faire de bonnes API (donc qui seront facilement utilisables par un maximum de personnes).

  • Tout d’abord, faire des APIs prend beaucoup de temps et aboutit à un produit qui ne satisfera jamais entièrement tout le monde.
  • Pour une API, il est préférable d’exposer que quelques méthodes (5 par exemple)
  • Il est bien que l’API couvre 80% des cas (les cas les plus fréquents) et si besoin qu’on puisse l’étendre pour des demandes bien spécifiques.
  • Une API doit être lisible et compréhensible de tous.
  • Une citation prise du snowboard et adaptée à la réalisation d’API : « If you don’t fall, you don’t make progress »
  • Utilisez l’API pendant que vous la développez
  • Pensez au-delà du code, la sémantique est très importante
  • Pour les méthodes, trouver un nom court et explicite

Bon pattern : method chaining pattern. La méthode renvoie l’objet lui-même, on peut donc appeler des méthodes à la chaîne.

Conclusion : pour une API, rendez les choses difficiles pour vous et simples pour les autres. Pour faire de bonnes APIs, il faut essayer et réessayer, penser aux utilisateurs et au futur de l’API.

Merci à Emmanuel Bernard pour cette soirée riche en enseignements. Une bonne présentation illustrée par de nombreux exemples de code et de démonstrations. Pour en savoir plus sur lui : http://blog.emmanuelbernard.com

Pour en savoir plus sur cette soirée, et si vous avez un compte google wave, une wave détaillant la dernière soirée du Paris JUG est accessible ici.