Anthony Patricio’s Blog

Seam 2 et JBoss AS 7

Posted in AS7, Seam, Seam 2 by apatricio on septembre 22, 2011

Cet article n’est que la traduction d’une partie du document https://docs.jboss.org/author/display/AS7/How+do+I+migrate+my+application+from+AS5+or+AS6+to+AS7 de la communauté JBoss.

Migrer vers un nouveau serveur d’applications ou vers une nouvelle version majeure d’un même serveur d’application apporte souvent son lot de contrariétés. Avec JBoss AS 7, c’est le cas même si je trouve personnellement beaucoup moins compliqué de faire tourner ses applications web existantes (on verra pour les EJB avec JBoss AS 7.1 plus tard) que lors de migration précédentes. Si vous tentez de déployer brutalement une application WAR basée sur Seam 2, ça ne fonctionnera pas, vous aboutirez à un problème du type

Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log

Lorsque l’on tombe sur un problème de ce type, on se dit que les problèmes vont s’enchaîner et qu’on va y passer des heures, no stress voici les étapes à suivre pour s’en sortir très rapidement, prenons l’exemple d’un WAR.

Pré-requis: assurez que votre source de données est bien configurée dans votre instance d’AS7. Niveau JNDI, choisissez java:jboss/ plutôt que java: pour éviter toute surprise.

  • Se pose le problème de JSF. AS7 contient JSF 2.0 mais Seam 2 tourne avec JSF 1.2. Pour notifier à AS7 que votre application ne veut pas de JSF 2.0 mais requiert JSF 1.2, créez un fichier jboss-deployment-structure.xml dans META-INF et remplissez-le comme suit:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
 <deployment>
  <exclusions>
   <module name="javax.faces.api&quot; slot=&quot;main">
   <module name="com.sun.jsf-impl&quot; slot=&quot;main">
  </exclusions>
  <dependencies>
   <module name="javax.faces.api" slot="1.2"/>
   <module name="com.sun.jsf-impl" slot="1.2"/>
   <module name="org.apache.commons.logging"/>
   <module name="org.apache.commons.collections"/>
   <module name="org.apache.log4j"/>
   <module name="org.dom4j"/>
  </dependencies>
 </deployment>
</jboss-deployment-structure>
  • Vous remarquez de suite que l’on en profite pour régler son sort à commons-loggins ainsi qu’aux autres dépendances qui vous auraient posé problème.
  • Hibernate va lui aussi poser problème. Votre application Seam2 est probablement aussi basée sur Hibernate 3.x, hors AS7 est livré avec Hibernate 4. En théorie pas de problème de rétro compatibilité si ce n’est quelques classes qui ont disparues dans la version 4… oui bon ok c’est un problème de rétro compatibilité. Pour y parer, ajoutez simplement les jars suivants dans votre archive. Pour notre webapp, cela se passe dans WEB-INF/lib et vous trouverez les bonnes versions dans votre distribution de Seam 2 ou dans la version de JBoss AS qui la contenait (JBOSS_HOME/seam/lib)
    • slf4j-api.jar
    • slf4j-log4j12.jar
    • hibernate-entitymanager.jar
    • hibernate-core.jar
    • hibernate-annotations.jar
    • hibernate-commons-annotations.jar
    • hibernate-validator.jar
    • mais aussi gwt-servlet.jar, … selon ce que vous utilisez de Seam 2
  • Un dernier soucis lié à AS 7.0.1 subsiste quant à JNDI,
    • dans persistence.xml , soyez sûrs de définir jboss.entity.manager.factory.jndi.name dans java:jboss/ et non java: (ceci devrait être corrigé très prochainement)
    • dans components.xml , idem pour <persistence:managed-persistence-context/>
  • redeployez votre war (s’il est explosé, touch mywar.dodeploy)
Cela devrait fonctionner.
Publicités
Tagged with: , , , ,

La certification, pourquoi faire ?

Posted in Actu / Anecdote by apatricio on juillet 29, 2011

Qui ne s’est jamais retrouvé dans une querelle d’experts sur une techno, sur le moyen d’implémenter un cas d’utilisation ou je ne sais quel aspect technique avancé. Lorsque l’on n’est pas initié soit même, et que l’on assiste à un tel débat, on est incapable de trancher, comme si l’on se trouvait au milieu d’une partie de poker face à deux gaillards prétendant tous deux avoir la main maximale, statistiquement proche de l’impossible, situation plutôt gênante lorsque l’on est client, chef de projet métier ou même employeur.

Pour toi développeur, technicien, archi avec la tête dans le guidon, ça peut être encore pire, tu peux te voir dé crédibilisé par un autre alors que tu es persuadé qu’il a tord, oui mais voilà, c’est un client, ou un concurrent qui est mieux vu. Le but ici n’est pas d’avoir raison mais bien de faire avancer le projet au mieux.

Que dire du directeur de marché, d’équipe ou responsable RH qui ne peut pas s’y connaître en technique (ce n’est pas son métier) qui va embaucher une personne selon le nombre de mots compliqués ou buzzables qu’il y aura sur son CV et qui, au premier projet livré, devra faire face à une montagne de bugs techniques plus bloquants les uns que les autres et à des réclamations en tout genre. La processus d’embauche mériterait un débat complet tellement il relève d’une problématique complexe: embaucher une personne compétente sur un domaine précis ça peut être très aléatoire. Pour tester un candidat il faut avoir soit même la compétence et/ou le test, le temps, bref ça coûte de l’argent tout ça et c’est une réelle stratégie de l’entreprise, un investissement, voire un risque si on embauche n’importe comment.

Il existe pourtant un moyen simple d’apporter des garantie de crédibilité: les certifications. Attention toutefois, il existe 2 types de certifications. La première s’apparente au code de la route, à savoir un QCM. A vrai dire, il n’y a que très peu d’intérêt à une telle formation, une bonne mémoire, la lecture d’un bouquin ou deux et hop, nous voilà certifiés. La seconde est plutôt semblable à l’examen de conduite, comment le candidat utilise t’il sa connaissance (et surtout son expérience) face à des cas réels ? Ces certifications là valent de l’or, aussi bien pour la personne certifiée que pour la personne qui va l’employer où faire appel à ses services. Pour l’employeur c’est la garantie de ne pas se tromper, pour le certifié c’est une garantie de pouvoir se faire respecter dans ses choix, ses développements, c’est un argument de taille, c’est aussi l’occasion de valoriser son CV et prétendre à un salaire plus élevé.

Chaque année des études sont faites pour lister les certifications les plus remarquables, généralement cela se traduit en % supplémentaire de salaire que l’on peut négocier si l’on a telle ou telle certification. Par exemple: http://www.reseaux-telecoms.net/fichiers/dossierpdf/la-grille-des-remunerations.jpg. Deux paramètres influent sur le résultat: la compétence testée bien sûr mais aussi indéniablement la qualité de l’examen. Etre certifié sur une technologie pointue, rare, très demandée mais via un examen QCM bateau est facile, ne sera pas reconnu et n’apportera rien à personne. Dans le tableau évoqué précédemment vous noterez la présence des certifications Red Hat sur l’OS entreprise RHEL. Depuis plusieurs années, les certifications Red Hat sont reconnues parmi les meilleures, souvent même au top 10 des certifications IT. Pourquoi?

Bien sûr car la compétences est recherchés mais aussi pour la qualité de l’examen lui même. Imaginez que l’on vous teste sur l’installation, le tuning, la réparation d’un système existant, sur des aspects utilisés par toutes les entreprises. Et bien c’est ce que propose Red Hat: que du cas réel, pas de piège. Tout son savoir faire sur la création de certification a été décliné sur les technologies JBoss. D’abord sur le serveur d’application, puis sur JPA, maintenant sur Seam 2, bientôt sur Portal, JPA 2, …

Conclusion, une certification s’est

  • pour le certifié,
    • valider ses compétences,
    • se faire reconnaître pour ses compétences,
    • valoriser son CV,
    • avoir plus de poids dans les débats et prise de décisions
  • pour l’employeur,
    • limiter les risques lors d’une embauche,
    • valider son investissement dans une formation pour un collaborateur,
    • une valeur ajoutée certaine chez le client dans le cadre de prestations, c’est décliner la garantie chez le client
En savoir plus sur les certifications Red Hat:
Si vous souhaitez formuler un souhait de certification, n’hésitez pas à me contacter.
Tagged with: , , , ,

Darwin et Java, prochaine étape de l’évolution des applications

Posted in Actu / Anecdote by apatricio on juin 10, 2009

Année 2000, ahhh je me souviens le bon vieux temps où je crachais sur les EJBs et prônais le standalone efficace en développant une allergie hypodermique à tout ce qui se rapprochait d’un serveur d’app.

On développait avec JSP, struts et hibernate, le tout en stateless bien sûr, et on était contents, super contents. Grâce à struts, on passait 1h45 heure au lieu de 2 à concevoir notre JSP, la plugger à notre logique de navigation, coder nos validations de surface. Ahhh ce que c’était chia….

Tous ces aspects m’ont vite persuadé de me focaliser sur la persistance, le développement côté serveur, bref TOUT sauf les vues.

Quelques années ont passé, EJB3 est arrivé et j’ai retrouvé les beans session et le stateful et toute sa puissance. C’est Seam, un next generation framework imaginé par Gavin King, qui a d’ailleurs redoré le blason du stateful.

Les annotations nous ont délivrés de l’enfer du XML et struts, après tant de bons et loyaux services, a doucement passé la main à JSF et là… c’est le bonheur surtout avec RichFaces.

J’espère avoir assez de temps libre pour partager des avis/exemples sur toutes ces technologies, EJB3, JPA, Seam, RichFaces mais aussi Hibernate Search qui marquent un pas décisifs dans le monde des applications Java.