<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Jboss on Java &amp; Moi</title><link>https://javaetmoi.com/tags/jboss/</link><description>Recent content in Jboss on Java &amp; Moi</description><generator>Hugo</generator><language>fr</language><lastBuildDate>Sat, 28 Jun 2014 16:19:58 +0000</lastBuildDate><atom:link href="https://javaetmoi.com/tags/jboss/feed.xml" rel="self" type="application/rss+xml"/><item><title>Notes de migration vers JSF 2 et Richfaces 4</title><link>https://javaetmoi.com/2014/06/notes-migration-jsf2-richfaces4-jboss5-eap/</link><pubDate>Sat, 28 Jun 2014 16:19:58 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1165</guid><description>&lt;p&gt;&lt;a href="wp-content/uploads/2014/06/2014-07-jsf2-richfaces4-dans-jboss5-richfaces-logo.png"&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="JBoss Richfaces Logo"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/06/2014-07-jsf2-richfaces4-dans-jboss5-richfaces-logo.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/a&gt; Début 2014, j’ai étudié la faisabilité technique d’une &lt;strong&gt;migration&lt;/strong&gt; de &lt;strong&gt;JSF 1.2&lt;/strong&gt; &lt;strong&gt;+ Richfaces 3.3&lt;/strong&gt; &lt;strong&gt;vers JSF 2.1 + Richfaces 4.3&lt;/strong&gt; sans changer de serveur d’application.
Notre serveur &lt;a href="https://access.redhat.com/site/articles/112673#EAP_5"&gt;JBoss 5.1 EAP&lt;/a&gt; étant certifié &lt;strong&gt;JavaEE 5&lt;/strong&gt;, la première difficulté consistait à &lt;strong&gt;désinstaller l’implémentation &lt;a href="https://javaserverfaces.java.net/"&gt;Mojarra&lt;/a&gt; de JSF 1.2 embarquée dans JBoss&lt;/strong&gt;. Cette opération est le pré-requis à l’installation de la version de JSF de son choix. Cette dernière aura alors pour unique contrainte d’être compatible avec le moteur de &lt;strong&gt;Servlet 2.5&lt;/strong&gt; sur lequel repose JBoss Web.
Plus classique, la seconde difficulté consistait à &lt;strong&gt;monter les versions de JSF et de Richfaces&lt;/strong&gt; d’une application existante.
J’ai arrêté mon étude après avoir migré le premier écran de cette application. Ayant conservé quelques notes, je me suis dit qu’elles pourraient intéresser certains ou certaines d’entre vous.
Ce billet commence par expliquer comment &lt;strong&gt;désinstaller JSF 1.2&lt;/strong&gt;, se poursuit par le déploiement du &lt;strong&gt;Showcase de Richfaces 4.3.5&lt;/strong&gt; dans JBoss 5.1 EAP et se termine par la mise à disposition de mes &lt;strong&gt;notes de migration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="JBoss Richfaces Logo"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/06/2014-07-jsf2-richfaces4-dans-jboss5-richfaces-logo.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>14 prises de notes à Devoxx France 2014</title><link>https://javaetmoi.com/2014/04/14-prises-de-notes-a-devoxx-france-2014/</link><pubDate>Wed, 23 Apr 2014 15:28:37 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1082</guid><description>&lt;p&gt;En attendant que les vidéos des &lt;a href="http://cfp.devoxx.fr/devoxxfr2014"&gt;différentes conférences de l’édition 2014&lt;/a&gt; de Devoxx France soient mises en ligne sur &lt;a href="http://www.parleys.com/"&gt;Parleys&lt;/a&gt; et en complément des &lt;a href="http://www.parleys.com/"&gt;supports&lt;/a&gt; déjà mis en ligne par certains Speakers, je mets librement à votre disposition les différentes notes que j’ai pu prendre sur mon laptop.
Les sujets sont variés : de Docker à Angular JS, en passant par Java 8. Certaines pourront être lues de manière autonome ; je pense par exemple au quickie &lt;a href="wp-content/uploads/2014/04/Outils-pour-manager-une-%C3%A9quipe.pdf"&gt;Outils pour manager une équipe&lt;/a&gt; et à la conférence &lt;a href="wp-content/uploads/2014/04/33-things-your-want-to-do-better.pdf"&gt;33 things your want to do better&lt;/a&gt;. Pour être exploitables en l’état, d’autres notes demanderont à ce que vous ayez assisté à la conférence ou que vous ayez pu récupérer les supports de présentation.&lt;/p&gt;
&lt;p&gt;&lt;a href="wp-content/uploads/2014/04/devoxx-france-2014-les-cast-codeurs.jpg"&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="devoxx-france-2014-les-cast-codeurs"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/04/devoxx-france-2014-les-cast-codeurs.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="devoxx-france-2014-les-cast-codeurs"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/04/devoxx-france-2014-les-cast-codeurs.jpg"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Support du VFS 2 de JBoss 5 dans Spring 4</title><link>https://javaetmoi.com/2014/04/support-vfs2-jboss5-spring4/</link><pubDate>Tue, 01 Apr 2014 04:50:09 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1032</guid><description>&lt;p&gt;Ce billet solutionne un problème rencontré lors de la &lt;strong&gt;montée de version du famework Spring&lt;/strong&gt; de la version 3.2 à la &lt;strong&gt;version&lt;/strong&gt; &lt;strong&gt;4.0&lt;/strong&gt;. En effet, le déploiement d’une application sous &lt;strong&gt;JBoss 5.1 EAP&lt;/strong&gt; échouait dès l’initialisation du contexte Spring. Plus précisément, une exception était levée lorsque Spring scanne le classpath à la recherche de beans Spring annotés par les annotations @Repository, @Service, @Controller …&lt;br&gt;Comme le montre la pile d’appel complète ci-dessous, l’exception &lt;strong&gt;java.lang.ClassNotFoundException: org.jboss.vfs.VFS&lt;/strong&gt; est encapsulée dans l’exception &lt;strong&gt;java.lang.IllegalStateException: Could not detect JBoss VFS infrastructure&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ce problème ne m’était initialement pas apparu lors des développements sous Eclipse avec le plugin JBoss Tools pour WTP : Spring n’a aucun mai à trouver les beans d’un WAR ou d’un EAR explosé. Cette erreur s’est manifestée lors du déploiement manuel de l’EAR dans le répertoire deploy de JBoss puis du démarrage du serveur par la commande run.bat.&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="logo-spring-framework"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/04/logo-spring-framework.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Plusieurs JBoss Messaging pour une même base</title><link>https://javaetmoi.com/2014/03/plusieurs-jboss-messaging-meme-base/</link><pubDate>Mon, 24 Mar 2014 18:26:20 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=1019</guid><description>&lt;p&gt;Ce billet ne devrait intéresser que les développeurs Java ou administrateurs JBoss en charge de la configuration de &lt;strong&gt;JBoss Messaging&lt;/strong&gt;, le broker JMS intégré aux versions 4.3 et 5.x du serveur d’application JBoss EAP.
Pour fil conducteur, prenons l’exemple d’une application Java EE déployée dans un pseudo cluster JBoss où, par choix d’architecture technique, &lt;strong&gt;chaque serveur JBoss est autonome&lt;/strong&gt;. A ce titre, les sessions HTTP ne sont pas partagées entre les différents serveurs JBoss ; le répartiteur de charge fonctionne en affinité de session De plus, chaque serveur dispose de ses propres files JMS (clustering JBoss Messaging non mis en œuvre). Les &lt;strong&gt;messages JMS&lt;/strong&gt; sont &lt;strong&gt;persistés dans une base de données&lt;/strong&gt;, Oracle dans notre cas &lt;strong&gt;.&lt;/strong&gt; La persistance des messages peut se faire de 2 manières :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Utiliser un schéma Oracle différent pour chaque serveur JBoss du cluster&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Utiliser le même schéma pour tous les serveurs JBoss du cluster&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;JBoss Messaging supportant le &lt;strong&gt;multi-tenancy&lt;/strong&gt;, cet article explique comment mettre en œuvre la 2ième solution.&lt;/p&gt;
&lt;p&gt;&lt;a href="wp-content/uploads/2014/03/2014-04-jboss-messaging-meme-schema.png"&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="Architecture JBoss Messaging"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/03/2014-04-jboss-messaging-meme-schema.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="Architecture JBoss Messaging"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2014/03/2014-04-jboss-messaging-meme-schema.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Mod_headers à la rescousse du jsessionid</title><link>https://javaetmoi.com/2013/05/mod_headers-rescousse-jsessionid-jboss/</link><pubDate>Thu, 23 May 2013 18:45:16 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=692</guid><description>Au cours de la migration d’une cinquantaine d’applications web de Websphere vers &lt;strong&gt;JBoss 5.1 EAP&lt;/strong&gt;, nous avons été confrontés à un problème de sécurité mis en évidence par l’infrastructure de pré-production : le firewall bloquait systématiquement toute requête comportant un &lt;strong&gt;jsessionid&lt;/strong&gt; dans l’ &lt;strong&gt;URL&lt;/strong&gt;.
Modifier les règles du firewall pour laisser passer ce type de requêtes aurait introduit une faille de sécurité exploitable par appropriation de session web. Cette faille nous a d’ailleurs été révélée en parallèle par l’outil d’audit de sécurité &lt;a href="http://www-03.ibm.com/software/products/us/en/appscan/"&gt;IBM AppScan&lt;/a&gt;.
Ce billet rappelle l’origine du problème et précise quelle solution a été employée pour le résoudre le plus rapidement possible.</description></item><item><title>Isoler le classloader de son EAR sous JBoss</title><link>https://javaetmoi.com/2013/01/isoler-classloader-ear-jboss/</link><pubDate>Sat, 05 Jan 2013 09:41:40 +0000</pubDate><guid isPermaLink="false">http://javaetmoi.com/?p=520</guid><description>&lt;p&gt;Lors de la &lt;strong&gt;migration&lt;/strong&gt; d’une application d’un &lt;strong&gt;serveur d’application&lt;/strong&gt; vers un autre, il est fréquent d’être confronté à des problématiques de &lt;strong&gt;conflits de librairies&lt;/strong&gt;. C’est par exemple le cas lorsqu’une application initialement déployée sur un Websphere Application Server 6.1 doit migrer sur &lt;strong&gt;JBoss 5.1 EAP&lt;/strong&gt; (version commerciale de JBoss AS).
Pour rappel, WAS 6.1 implémente J2EE 1.4 et s’exécute donc sur Java 5. Quant à JBoss 5.1 EAP, il implémente la norme Java EE 5, embarque donc de nombreuses implémentations des standards tels que JPA 1, JSF 1.2 et JAX-WS 1, et tourne sur Java 6.&lt;/p&gt;
&lt;p&gt;Pour illustration, prenons une application s’appuyant sur Hibernate 3.6 pour sa couche de persistance et JAXB 2.2 pour le marshalling lors d’appel de web services. Ces 2 librairies sont embarquées dans le répertoire lib de son EAR et ne posent pas de problèmes particuliers à WAS 6.1.
Par contre, sur JBoss 5.1 EAP, c’est un tout autre problème. En effet, son implémentation JPA repose sur la version 3.3 d&amp;rsquo;Hibernate. Qui plus est, JAXB 2.1 a été intégrée dans Java 6.
Si vous tentez de déployer une telle application sur un JBoss installé avec la configuration par défaut, il y’a de fortes chances que vous tombiez sur l’une ou l’autre des exceptions suivantes : &lt;em&gt;ClassCastException&lt;/em&gt;, &lt;em&gt;NoSuchMethodException, IllegalAccessErrors&lt;/em&gt;, &lt;em&gt;VerifyError.&lt;/em&gt;
A ce que j’ai compris en parcourant la documentation mais également déduis de mes tests, différents mécanismes permettent d’expliquer ces comportements :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Par défaut, lors du chargement d’une classe, le classloader de l’EAR va commencer par demander à son classloader parent (en l’occurrence celui de JBoss) de trouver la classe. Ainsi, c’est par exemple la classe Session d’Hibernate 3.3 qui sera chargée et non celle de la version 3.6 comme attendu. Il s’agit du comportement standard d’un classloader. Et c’est ce qu’on appelle communément le « j2se classloading compliance ». Sous WAS, cette stratégie de chargement peut être changée en paramétrant le classloader en PARENT_LAST.&lt;/li&gt;
&lt;li&gt;Les classes chargées par d’autres applications déployées sur la même instance de JBoss peuvent être partagées par votre application. Par exemple, la console d’admin JBoss admin-console.war embarque sa propre version de Richfaces et de Seam et peut, malgré elle, vous en faire bénéficier.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="solutions-étudiées"&gt;&lt;em&gt;Solutions étudiées&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;Pour mener à bien la migration, plusieurs pistes ont été étudiées :
&lt;strong&gt;Solutions&lt;strong&gt;&lt;strong&gt;Inconvénients&lt;/strong&gt;&lt;/strong&gt;Avantages&lt;/strong&gt;1Downgrader les versions des frameworks pour utiliser celles embarquées dans JBoss 5.1Important travail de refactoring pour combler les fonctionnalités manquantes.
Bugs existants récupérés.Respect de la norme Java EE 5.
Support éditeur maximal.2Configurer sur mesure le répertoire d’installation de JBoss (ex : supprimer le support des EJB 3 et de JPA)Mutualisation du répertoire d’installation rendue caduque.
Main sur la production _._Un JBoss qui démarre plus vite.
Pas d’impact sur le code.3Isoler le déploiement de l’applicationLire la documentation JBoss.
Augmentation possible de la PermGen.Risque nul.
Simple configuration.
Configuration embarquée dans l’EAR.&lt;/p&gt;
&lt;h2 id="configurer-le-classloader-de-lapplication"&gt;Configurer le classloader de l’application&lt;/h2&gt;
&lt;p&gt;&lt;figure&gt;
&lt;picture&gt;
&lt;img
loading="lazy"
decoding="async"
alt="@Copyright JBoss - Classe chargée en priorité depuis l&amp;amp;amp;rsquo;EAR:right"
class="image_figure image_internal image_unprocessed"
src="https://javaetmoi.com/wp-content/uploads/2013/01/JBoss-ClassLoading-Scoped-Java2ParentDelegationOff-300x202.png"
/&gt;
&lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Pour mettre en œuvre la solution n°3 concernant à « scoper » l’application, il est nécessaire de configurer le chargement des classes de JBoss . Une description détaillée de son fonctionnement est disponible sur la page &lt;a href="https://community.jboss.org/wiki/JBossClassLoadingUseCases"&gt;JBossClassLoadingUseCases&lt;/a&gt; du wiki de JBoss.
Dans notre cas, La configuration des classes loaders nécessaire est &lt;strong&gt;deployment scoped&lt;/strong&gt; et &lt;strong&gt;Java2ParentDelegation&lt;/strong&gt; &lt;strong&gt;désactivé&lt;/strong&gt;. Cette configuration est représentée par la figure ci-contre.&lt;/p&gt;
&lt;p&gt;Cette configuration présente les 2 avantages suivants :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Les JARs embarqués dans l&amp;rsquo;EAR priment sur celles fournies par JBoss 5.1 et le JRE.&lt;/li&gt;
&lt;li&gt;Chaque application déployée sur le même serveur possède son propre UnifiedLoaderRepository (ULR). Le chargement des classes est isolé et n&amp;rsquo;interfère pas. Elles sont également isolées du chargement des applications tierces (ex: jmx-console et admin-console).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La configuration du fichier &lt;code&gt;jboss-app.xml&lt;/code&gt; à déposer dans le répertoire META-INF de l’EAR est décrite sur la page &lt;a href="https://community.jboss.org/wiki/ClassLoadingConfiguration"&gt;ClassLoadingConfiguration&lt;/a&gt; du wiki JBoss. En voici un exemple :
Lors de la &lt;strong&gt;migration&lt;/strong&gt; d’une application d’un &lt;strong&gt;serveur d’application&lt;/strong&gt; vers un autre, il est fréquent d’être confronté à des problématiques de &lt;strong&gt;conflits de librairies&lt;/strong&gt;. C’est par exemple le cas lorsqu’une application initialement déployée sur un Websphere Application Server 6.1 doit migrer sur &lt;strong&gt;JBoss 5.1 EAP&lt;/strong&gt; (version commerciale de JBoss AS).
Pour rappel, WAS 6.1 implémente J2EE 1.4 et s’exécute donc sur Java 5. Quant à JBoss 5.1 EAP, il implémente la norme Java EE 5, embarque donc de nombreuses implémentations des standards tels que JPA 1, JSF 1.2 et JAX-WS 1, et tourne sur Java 6.&lt;/p&gt;</description></item></channel></rss>