<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Everything is wrong &#187; JBoss</title>
	<atom:link href="http://everythingiswrong.free.fr/index.php/tag/jboss/feed/" rel="self" type="application/rss+xml" />
	<link>http://everythingiswrong.free.fr</link>
	<description>Un blog dédié à l&#039;informatique en général</description>
	<lastBuildDate>Wed, 06 Oct 2021 21:20:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>JBoss &#8211; Tracer les requêtes HTTP</title>
		<link>http://everythingiswrong.free.fr/index.php/2014/07/22/jboss-tracer-les-requetes-http/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2014/07/22/jboss-tracer-les-requetes-http/#comments</comments>
		<pubDate>Tue, 22 Jul 2014 19:09:15 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Tests unitaires]]></category>
		<category><![CDATA[Arquillian]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=3200</guid>
		<description><![CDATA[Tracer le contenu des requêtes HTTP d'une application Java J2EE.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">En travaillant sur un test <a href="https://docs.jboss.org/author/display/ARQGRA2/Home" target="_blank">Graphene 2</a>, je me suis rendu compte qu&#8217;il pouvait être très intéressant de tracer le contenu des requêtes HTTP attaquant une application web. Lorsque cette application est déployée sur un serveur JBoss, il suffit d&#8217;ajouter une ligne dans le fichier <code>jboss-web.xml</code> :</p>
<pre class="brush: xml; gutter: true; first-line: 1">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;jboss-web&gt;
   &lt;valve&gt;
      &lt;class-name&gt;org.apache.catalina.valves.RequestDumperValve&lt;/class-name&gt;
   &lt;/valve&gt;
&lt;/jboss-web&gt;</pre>
<p style="text-align: justify;">Remarque, je n&#8217;ai pas essayé sur WildFly, mais la technique devrait fonctionner de la même façon. Ce fichier doit être dans le répertoire <code>WEB-INF</code> de l&#8217;archive web.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2014/07/22/jboss-tracer-les-requetes-http/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSF2.2 &#8211; Hello world</title>
		<link>http://everythingiswrong.free.fr/index.php/2014/03/14/jsf2-2-hello-world/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2014/03/14/jsf2-2-hello-world/#comments</comments>
		<pubDate>Fri, 14 Mar 2014 21:11:04 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[CDI]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[Wildfly]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=2914</guid>
		<description><![CDATA[Hello world en JSF 2.2]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Voici un exemple d&#8217;une application JSF2.2 minimaliste. Une vue xhtml un bean Java contenant le message &#8220;Hello world !&#8221;. Une configuration minimaliste aussi pour pouvoir déployer l&#8217;application dans le serveur wildfly.</p>
<h2>Vue d&#8217;ensemble et configurations</h2>
<p style="text-align: justify;">Pour cette application il est suffisant d&#8217;avoir un fichier <code>Java</code> porteur des données (le model), un fichier <code>xhtml</code> décrivant la vue et un quelques fichiers de configuration :</p>
<ul>
<li style="text-align: justify;"><code>beans.xml</code> : ce fichier est vide dans cet exemple. Il permet à l&#8217;application de bénéficier du CDI</li>
<li style="text-align: justify;"><code>faces-config.xml</code> : ce fichier est vide dans cet exemple. Il permet de configurer tout ce qui est en lien avec JSF</li>
<li style="text-align: justify;"><code>web.xml</code> : ce fichier est facultatif je l&#8217;ai ajouté pour avoir un exemple de namespace XML pour la bonne version du serveur wildfly</li>
</ul>
<p style="text-align: justify;">Pour rappel, JSF est une technologie qui se base sur le modèle MVC-2. Le rôle du contrôleur est joué par la servlet JSF qui centralise les demandes provenant de la vue et qui redirige vers les bons traitements Java (avec JSF on parle en général d&#8217;actions).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" src="data:image/png;base64,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" alt="" width="540" height="293" /></p>
<h2>Le model (Bean Java)</h2>
<p style="text-align: justify;">L&#8217;objet <code>Java</code> qui va contenir les données, c&#8217;est à dire le message &#8220;Hello world !&#8221; est un <code>String</code>. Cet objet va être créé par un producer en scope Request. A chaque nouvel appel à la vue, une nouvelle requête sera nécessaire et l&#8217;objet sera recréé de toute pièce.</p>
<pre class="brush: java; gutter: true; first-line: 1">package org.eiw.data;

import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Named;

/***
 * Le producer est dans le scope Request,
 * il sera recréé à chaque nouvelle requête HTTP.
 */
@RequestScoped
public class HelloWorldProducer {
	private String message;

	/**
	 * La méthode qui produit l'objet de données vis à vis de la page XHTML.
	 */
	@Named
	@Produces
	public String getMessage() {
		return message;
	}

	/**
	 * La méthode qui initialise l'objet,
	 * à chaque nouvelle requête HTTP.
	 */
	@PostConstruct
	public void initMessage() {
		message = "Hello world !";
	}
}</pre>
<h2>La vue (XHTML)</h2>
<p style="text-align: justify;">Dans ce fichier, nous allons utiliser le conteneur CDI pour récupérer l&#8217;objet <code>Java</code> des données vu ci-dessus. Nous allons ensuite l&#8217;associer à un tag JSF pour formater son affichage :</p>
<pre class="brush: xhtml; gutter: true; first-line: 1">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"&gt;
&lt;h:head&gt;
&lt;/h:head&gt;
&lt;h:body&gt;
	&lt;h:outputText value="#{message}" /&gt;
&lt;/h:body&gt;</pre>
<p style="text-align: justify;">Pour récupérer l&#8217;objet, il faut utiliser son nom qui est égal par défaut au nom de l&#8217;instance avec le langage EL : <code>#{maVariable}</code>.</p>
<h2>Le déploiement</h2>
<p style="text-align: justify;">Pour déployer cette application, il suffit d&#8217;utiliser le plugin wildfly avec la commande suivante : <code>mvn wildfly:run</code>. Ensuite de se rendre sur l&#8217;adresse <a href="http://localhost:8080/hello-world/index.jsf" target="_blank">http://localhost:8080/hello-world/index.jsf</a>  et de visualiser le résultat :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" src="data:image/png;base64,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" alt="" width="408" height="90" /></p>
<p style="text-align: justify;">Remarque : s&#8217;il s&#8217;agit de la première fois que vous utilisez le plugin wildfly, il vous faudra un peu de temps pour démarrer l&#8217;application car il est nécessaire de télécharger, dans le repository maven local, le serveur complet avant de le démarrer.</p>
<p style="text-align: justify;">Ce tutoriel est disponible sur GitHub à l&#8217;adresse suivante : <a href="https://github.com/yanLanglois/jsf-2.2-tutoriel/tree/master/hello-world" target="_blank">https://github.com/yanLanglois/jsf-2.2-tutoriel/tree/master/hello-world</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2014/03/14/jsf2-2-hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven &#8211; Wildfly plugin</title>
		<link>http://everythingiswrong.free.fr/index.php/2014/03/08/maven-wildfly-plugin/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2014/03/08/maven-wildfly-plugin/#comments</comments>
		<pubDate>Sat, 08 Mar 2014 21:03:57 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[JBoss]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=2843</guid>
		<description><![CDATA[wildfly-maven-plugin]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">J&#8217;ai découvert qu&#8217;il existait un plugin maven pour le serveur d&#8217;application Wildfly qui se comporte exactement comme le plugin maven pour tomcat. Pour l&#8217;utiliser, il faut ajouter ces quelques lignes dans le fichier <code>pom.xml</code>.</p>
<pre class="brush: xml; gutter: true; first-line: 1">&lt;project&gt;
    ...
    &lt;build&gt;
        ...
        &lt;plugins&gt;
            ...
            &lt;plugin&gt;
                &lt;groupId&gt;org.wildfly.plugins&lt;/groupId&gt;
                &lt;artifactId&gt;wildfly-maven-plugin&lt;/artifactId&gt;
                &lt;version&gt;1.0.1.Final&lt;/version&gt;
            &lt;/plugin&gt;
            ...
        &lt;/plugins&gt;
        ...
    &lt;/build&gt;
...
&lt;/project&gt;</pre>
<p style="text-align: justify;">Le goal <code>wildfly:run</code> compile et package le projet, puis le déploie dans une instance du serveur. Deux possibilités, soit la variable d&#8217;environnement <code>wildfly.home</code> existe et le serveur installé à cet emplacement est utilisé, soit elle n&#8217;existe pas et le serveur wildfly est téléchargé puis déployé dans le répertoire <code>target</code> du projet.</p>
<p style="text-align: justify;">Le plugin permet beaucoup plus de choses que le simple démarrage de l&#8217;application dans un conteneur piloté par Maven. Pour plus d&#8217;information, son adresse est la suivante : <a href="https://docs.jboss.org/wildfly/plugins/maven/latest/" target="_blank">https://docs.jboss.org/wildfly/plugins/maven/latest/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2014/03/08/maven-wildfly-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PicketLink : Activer les traces dans le fichier de log</title>
		<link>http://everythingiswrong.free.fr/index.php/2014/01/30/picketlink-activer-les-traces-dans-le-fichier-de-log/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2014/01/30/picketlink-activer-les-traces-dans-le-fichier-de-log/#comments</comments>
		<pubDate>Thu, 30 Jan 2014 21:09:52 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Sécurité]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=2453</guid>
		<description><![CDATA[How can I enable debug logging for PicketLink in JBoss?]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Pour débuger l&#8217;authentification faite grâce à picketLink avec JBoss Wildfly, il est nécessaire d&#8217;ajouter le logger ci-dessous puis de modifier la priorité par défaut de la console.</p>
<p class="wp-caption">org.picketlink.idm</p>
<p>Pour cela, il faut se connecter à la console du serveur d&#8217;application puis se rendre sur la gestion des logger dans l&#8217;onglet &#8220;LOG CATEGORIES&#8221;.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://everythingiswrong.free.fr/wp-content/uploads/wildfly-logger-categories.png" alt="" width="658" height="560" /></p>
<p>Ajouter la catégorie associée au package picketLink avec le niveau DEBUG.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://everythingiswrong.free.fr/wp-content/uploads/wildfly-logger-categories-add.png" alt="" width="658" height="561" /></p>
<p>Enfin dans la catégorie &#8220;HANDLER&#8221;, modifier le niveau de log du handler console.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://everythingiswrong.free.fr/wp-content/uploads/wildfly-logger-handler.png" alt="" width="658" height="561" /></p>
<p>Pour information, les modifications sont prises en compte à chaud. Pas besoin de redémarrer le serveur.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2014/01/30/picketlink-activer-les-traces-dans-le-fichier-de-log/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss 7 : Plusieurs instances standalone sur un même serveur</title>
		<link>http://everythingiswrong.free.fr/index.php/2013/06/13/jboss-7-plusieurs-instances-standalone-sur-un-meme-serveur/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2013/06/13/jboss-7-plusieurs-instances-standalone-sur-un-meme-serveur/#comments</comments>
		<pubDate>Thu, 13 Jun 2013 22:06:08 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=2247</guid>
		<description><![CDATA[Comment démarrer plusieurs instances de JBoss7 sur une même machine...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Pour démarrer une instance JBoss en mode standalone avec les configurations par défaut, il faut exécuter la commande suivante : <em>$JBOSS_HOME/bin/standalone.sh</em></p>
<p style="text-align: justify;">Pour créer sa propre instance, il est uniquement nécessaire de copier les fichiers de configuration originaux du serveur standalone dans un répertoire quelconque du système de fichier puis d&#8217;exécuter la commande précédente avec l&#8217;option <em>-Djboss.server.base.dir=XX</em>. Par exemple :</p>
<pre>xxxx@xxxx:~/tmp/testsJboss1$ tree
.
├── configuration
│   ├── application-roles.properties
│   ├── application-users.properties
│   ├── logging.properties
│   ├── mgmt-users.properties
│   └── standalone.xml
└── deployments
xxxx@xxxx:~/$ $JBOSS_HOME/bin/standalone.sh -Djboss.server.base.dir=~/tmp/testsJboss1/</pre>
<p style="text-align: justify;"><span style="text-decoration: underline;">Remarque</span> : L&#8217;option <em>jboss.socket.binding.port-offset</em> associée à un entier (<em>-Djboss.socket.binding.port-offset=1</em>), vous permet de démarrer une instance en décalant tous les ports du serveur et ainsi éviter toute interférence avec un autre serveur.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2013/06/13/jboss-7-plusieurs-instances-standalone-sur-un-meme-serveur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss 7 : Datasources dans un WAR</title>
		<link>http://everythingiswrong.free.fr/index.php/2012/09/28/jboss-7-datasources-dans-un-war/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2012/09/28/jboss-7-datasources-dans-un-war/#comments</comments>
		<pubDate>Fri, 28 Sep 2012 19:17:57 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Base de données]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[jndi]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=1902</guid>
		<description><![CDATA[J2EE6 : Configurer une Datasource JNDI encapsulée dans une archive WAR.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Avec JBoss 7, il est possible de déclarer une datasource JNDI dans une archive WAR. Pour cela, il faut déposer un fichier <em>ma-datasource-ds.xml</em> dans le répertoire WEB-INF avec la déclaration de la source de données. Par exemple :</p>
<pre class="brush: xml; gutter: true; first-line: 1">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;datasources xmlns="http://www.jboss.org/ironjacamar/schema"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd"&gt;
   &lt;!-- The datasource is bound into JNDI at this location. We reference
      this in META-INF/persistence.xml --&gt;
   &lt;datasource jndi-name="java:jboss/datasources/maDS"
          pool-name="mysqlds"
          enabled="true"
          use-java-context="true"&gt;
      &lt;connection-url&gt;jdbc:mysql://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=UTF-8&lt;/connection-url&gt;
      &lt;driver&gt;mysql&lt;/driver&gt;
      &lt;security&gt;
         &lt;user-name&gt;root&lt;/user-name&gt;
         &lt;password&gt;123456&lt;/password&gt;
      &lt;/security&gt;
   &lt;/datasource&gt;
&lt;/datasources&gt;</pre>
<p style="text-align: justify;">La valeur de l&#8217;élément <em>driver</em>, est le nom du driver installé sur le serveur. Pour l&#8217;installer, il est possible de copier le jar dans le répertoire de déploiement du serveur (<code>cp mysql.jar &lt;as7&gt;/standalone/deployments</code>).</p>
<p style="text-align: justify;">Sources : <a href="https://community.jboss.org/thread/204245" target="_blank">https://community.jboss.org/thread/204245</a>, <a href="https://community.jboss.org/wiki/DataSourceConfigurationInAS7">https://community.jboss.org/wiki/DataSourceConfigurationInAS7</a>, <a href="https://github.com/abstractj/as-quickstarts/blob/40f8cae2ce9388151e1a07f743df74e59c7848bc/kitchensink-html5-mobile/src/test/resources/arquillian-ds.xml">https://github.com/abstractj/as-quickstarts/blob/40f8cae2ce9388151e1a07f743df74e59c7848bc/kitchensink-html5-mobile/src/test/resources/arquillian-ds.xml</a></p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2012/09/28/jboss-7-datasources-dans-un-war/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appliation J2EE6 avec JBoss 7 et Maven</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/08/03/appliation-j2ee6-avec-jboss-7-et-maven/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/08/03/appliation-j2ee6-avec-jboss-7-et-maven/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 18:57:10 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Tests]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=1535</guid>
		<description><![CDATA[Modèle d'applications J2EE6 avec JBoss 7 comportant : JSF2, JPA, EJB3, REST.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">JBoss propose un certain nombre d&#8217;archetypes dont un qui génère  une application J2EE6 pour JBoss 7 : org.jboss.spec.archetypes:jboss-javaee6-webapp. Or, par défaut, maven ne connait pas cet archetype. Voici comment réussir à l&#8217;utiliser dans Eclipse.</p>
<p style="text-align: justify;">Avant toute chose, il faut vérifier que maven est configuré pour aller chercher des librairies sur le repository JBoss : le fichier settings.xml (~/.m2/settings.xml ou $MAVEN_HOME/conf/settings.xml) doit contenir  le code XML suivant :</p>
<pre class="brush: xml; toolbar: true;">&lt;settings&gt;
 ...
  &lt;profiles&gt;
    ...
    &lt;profile&gt;
      &lt;id&gt;jboss-public-repository&lt;/id&gt;
      &lt;repositories&gt;
        &lt;repository&gt;
          &lt;id&gt;jboss-public-repository-group&lt;/id&gt;
          &lt;name&gt;JBoss Public Maven Repository Group&lt;/name&gt;
          &lt;url&gt;https://repository.jboss.org/nexus/content/groups/public-jboss/&lt;/url&gt;
          &lt;layout&gt;default&lt;/layout&gt;
          &lt;releases&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
            &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;
          &lt;/releases&gt;
          &lt;snapshots&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
            &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;
          &lt;/snapshots&gt;
        &lt;/repository&gt;
      &lt;/repositories&gt;
      &lt;pluginRepositories&gt;
        &lt;pluginRepository&gt;
          &lt;id&gt;jboss-public-repository-group&lt;/id&gt;
          &lt;name&gt;JBoss Public Maven Repository Group&lt;/name&gt;
          &lt;url&gt;https://repository.jboss.org/nexus/content/groups/public-jboss/&lt;/url&gt;
          &lt;layout&gt;default&lt;/layout&gt;
          &lt;releases&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
            &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;
          &lt;/releases&gt;
          &lt;snapshots&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
            &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;
          &lt;/snapshots&gt;
        &lt;/pluginRepository&gt;
      &lt;/pluginRepositories&gt;
    &lt;/profile&gt;

  &lt;/profiles&gt;

  &lt;activeProfiles&gt;
    &lt;activeProfile&gt;jboss-public-repository&lt;/activeProfile&gt;
  &lt;/activeProfiles&gt;
  ...
&lt;/settings&gt;
</pre>
<p style="text-align: justify;">Ensuite, pour créer le projet dans Eclipse, il faut commencer par installer le catalogue JBoss : <em>Windows -&gt; Preferences&#8230;</em> puis dans la fenêtre <em>Maven -&gt; Achetypes</em> cliquer sur le bouton  <em>Add Remote Catalog&#8230;</em> Saisir <a href="https://repository.jboss.org/nexus/content/groups/public/archetype-catalog.xml" target="_blank">https://repository.jboss.org/nexus/content/groups/public/archetype-catalog.xml</a> dans l&#8217;intitulé Catalogue File et JBoss dans Description. Après l&#8217;opération, il ne reste plus qu&#8217;à accéder au wizard de création d&#8217;un projet Maven (<em>File -&gt; New -&gt; Project&#8230;</em> puis <em>Maven project</em>) et de sélectionner l&#8217;archetype jboss-javaee6-webapp.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://yan.langlois.free.fr/wordpress/wp-content/uploads/jboss-javaee6-webapp.png" alt="" width="577" height="488" /></p>
<p style="text-align: justify;">Le squelette de l&#8217;application est celui-ci :</p>
<p class="wp-caption" style="text-align: justify;">/home/&#8230;/jboss-webapp-j2ee6<br />
|&#8211; pom.xml<br />
|&#8211; readme.html<br />
|&#8211; readme.md<br />
`&#8211; src<br />
|&#8211; main<br />
|   |&#8211; java<br />
|   |   `&#8211; test<br />
|   |       `&#8211; jboss_webapp_j2ee6<br />
|   |           |&#8211; controller<br />
|   |           |   `&#8211; MemberRegistration.java<br />
|   |           |&#8211; data<br />
|   |           |   `&#8211; MemberListProducer.java<br />
|   |           |&#8211; model<br />
|   |           |   `&#8211; Member.java<br />
|   |           |&#8211; rest<br />
|   |           |   |&#8211; JaxRsActivator.java<br />
|   |           |   `&#8211; MemberResourceRESTService.java<br />
|   |           `&#8211; util<br />
|   |               `&#8211; Resources.java<br />
|   |&#8211; resources<br />
|   |   |&#8211; import.sql<br />
|   |   `&#8211; META-INF<br />
|   |       `&#8211; persistence.xml<br />
|   `&#8211; webapp<br />
|       |&#8211; index.html<br />
|       |&#8211; index.xhtml<br />
|       |&#8211; resources<br />
|       |   |&#8211; css<br />
|       |   |   `&#8211; screen.css<br />
|       |   `&#8211; gfx<br />
|       |       |&#8211; banner.png<br />
|       |       `&#8211; logo.png<br />
|       `&#8211; WEB-INF<br />
|           |&#8211; beans.xml<br />
|           |&#8211; faces-config.xml<br />
|           `&#8211; templates<br />
|               `&#8211; default.xhtml<br />
`&#8211; test<br />
|&#8211; java<br />
|   `&#8211; test<br />
|       `&#8211; jboss_webapp_j2ee6<br />
|           `&#8211; test<br />
|               `&#8211; MemberRegistrationTest.java<br />
`&#8211; resources<br />
`&#8211; arquillian.xml</p>
<p style="text-align: justify;">Ce qui équivaut à une application de départ avec un exemple JSF2 s&#8217;appuyant sur une base de données  embarquée avec quelques classes constituant un modèle MVC, un exemple de service web REST, et un exemple de test unitaire avec Arquillian. A noter aussi, l&#8217;utilisation d&#8217;un EJB3 archivé dans un WAR et non un EAR comme il aurait fallu le faire avec J2EE5.</p>
<p style="text-align: justify;">Pour déployer l&#8217;application il faut la packager et utiliser le plugin JBoss de déploiement déjà configuré par l&#8217;archetype (<em>maven package jboss-as:deploy</em>). Attention, pour que tout se déroule correctement, il faudra avoir démarré votre serveur <a href="http://www.jboss.org/jbossas" target="_blank">JBoss7</a> au préalable.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/08/03/appliation-j2ee6-avec-jboss-7-et-maven/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Maven et SeamTest</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/03/22/maven-et-seamtest/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/03/22/maven-et-seamtest/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 22:10:46 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Conteneurs embarqués]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Tests unitaires]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Seam]]></category>
		<category><![CDATA[Tests]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=1098</guid>
		<description><![CDATA[Comment intégrer des tests d'intégration avec SeamTest ou DBUnitSeamTest dans un projet Maven.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">L&#8217;intégration des tests unitaires SeamTest dans un projet <a href="http://maven.apache.org/" target="_blank">Maven</a> est assez compliquée. Voici un exemple concret :</p>
<h1 style="text-align: justify;">Présentation du projet</h1>
<p style="text-align: justify;">Avant de rentrer dans des détails techniques, je préfère vous parler de l&#8217;application qui va me servir de base pour intégrer mon test SeamTest.</p>
<h2>Vision fonctionnelle</h2>
<p style="text-align: justify;">J&#8217;ai choisi de me baser sur l&#8217;exemple &#8220;hello world&#8221; du livre <em>Seam Framework:  Experience the Evolution of Java EE 2nd edition</em>. Vous pouvez retrouver les sources des exemples du livre à l&#8217;adresse suivante : <a href="http://solutionsfit.com/blog/books/" target="_blank">http://solutionsfit.com/blog/books/</a>. Malheureusement, l&#8217;auteur utilise <a href="http://ant.apache.org/" target="_blank">Ant</a> et non Maven pour gérer la compilation de ses projets.</p>
<p style="text-align: justify;">J&#8217;ai rajouté l&#8217;utilisation d&#8217;un service EJB Stateless pour démontrer la possibilité d&#8217;utiliser SeamTest dans un contexte technique hétérogène. Voici le diagramme des cas d&#8217;utilisation de l&#8217;application :</p>
<p style="text-align: center;"><img class="aligncenter" title="Cas d'utilisation de l'application" src="http://yuml.me/diagram/scruffy/usecase/[Utilisateur]-(Enregistrer une personne), [Utilisateur]-(Visualiser les personnes enregistrées)" alt="Cas d'utilisation de l'application" /></p>
<h2>Vision maven</h2>
<p>Le projet est composé d&#8217;un module père ayant trois modules fils :</p>
<p class="wp-caption" style="text-align: justify;">seamtest-parent<br />
|&#8211; seamtest-ear<br />
|&#8211; seamtest-ejb<br />
`&#8211; seamtest-webapp</p>
<p style="text-align: justify;">Vous pouvez checkouter les sources à l&#8217;adresse suivante : <a href="https://subversion.assembla.com/svn/everythingiswrong/seamtest-parent/" target="_blank">https://subversion.assembla.com/svn/everythingiswrong/seamtest-parent/</a>.</p>
<p style="text-align: justify;">Dans le reste de l&#8217;article, je vais me focaliser sur le module seamtest-ejb car c&#8217;est lui qui contient le composant Seam, la persistance et l&#8217;EJB Stateless à tester.</p>
<h2 style="text-align: justify;">Composant Seam à tester</h2>
<p>Nous allons tester le composant qui va :</p>
<ul>
<li>Enregistrer une nouvelle personne dans la base de données</li>
<li>Rechercher toutes les personnes de la base de données</li>
</ul>
<pre class="brush: java; toolbar: true;">@Stateful
@Name("manager")
public class ManagerAction extends Manager {
  @In
  private Person person;

  @Out
  private List&lt;Person&gt; fans;

  @EJB
  private CalculService calculService;

  @PersistenceContext
  private EntityManager em;

  //Méthode à tester.
  public void sayHello () {
    em.persist (person);
    fans = em.createQuery("select p from Person p").getResultList();
  }

  // Méthode pour vérifier l'injection de l'EJB Stateless dans le composant Seam
  public int additionner(int a, int b) {
    return (int) calculService.addition(a, b);
  }

  @Remove
  @Destroy
  public void destroy() {
  }
}</pre>
<h1 style="text-align: justify;">Installation et configuration</h1>
<p style="text-align: justify;">Pour information, SeamTest utilise le serveur <a href="http://community.jboss.org/wiki/EmbeddedJBoss" target="_blank">JBoss embedded</a>.</p>
<h2 style="text-align: justify;">Installation de JBoss Embedded</h2>
<p style="text-align: justify;">Cette installation se résume à la copie du répertoire booststrap qui est dans la distribution de Seam (par exemple <a href="http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_2/bootstrap/" target="_blank">ici</a>) dans le répertoire src/test.</p>
<h2 style="text-align: justify;">Le fichier &#8220;pom.xml&#8221;</h2>
<p style="text-align: justify;">Ce fichier doit contenir l&#8217;ensemble des librairies qui vont permettre de démarrer et d&#8217;exécuter le serveur JBoss embedded. Il doit aussi prendre en compte le répertoire de <em>bootstrap</em> ajouté précédemment dans les ressources des tests.</p>
<pre class="brush: xml; toolbar: true;">&lt;dependencies&gt;
  ...
  &lt;!-- dépendances des tests unitaites : http://community.jboss.org/thread/18299 --&gt;
  &lt;!-- dependencies related to JBoss Embedded for Seam 2.X.X --&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.jboss.seam.embedded&lt;/groupId&gt;
    &lt;artifactId&gt;jboss-embedded-all&lt;/artifactId&gt;
    &lt;version&gt;beta3.SP12&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
    &lt;exclusions&gt;
      &lt;exclusion&gt;
        &lt;groupId&gt;org.jboss.microcontainer&lt;/groupId&gt;
        &lt;artifactId&gt;jboss-deployers-client-spi&lt;/artifactId&gt;
      &lt;/exclusion&gt;
      &lt;exclusion&gt;
        &lt;groupId&gt;org.jboss.microcontainer&lt;/groupId&gt;
        &lt;artifactId&gt;jboss-deployers-core-spi&lt;/artifactId&gt;
      &lt;/exclusion&gt;
    &lt;/exclusions&gt;
  &lt;/dependency&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.jboss.seam.embedded&lt;/groupId&gt;
    &lt;artifactId&gt;hibernate-all&lt;/artifactId&gt;
    &lt;version&gt;beta3.SP12&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.jboss.seam.embedded&lt;/groupId&gt;
    &lt;artifactId&gt;thirdparty-all&lt;/artifactId&gt;
    &lt;version&gt;beta3.SP12&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;

  &lt;!-- dependencies related to JBoss MicroContainer --&gt;
  &lt;!-- java.lang.NoClassDefFoundError: javax/faces/application/Application --&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;javax.faces&lt;/groupId&gt;
    &lt;artifactId&gt;jsf-api&lt;/artifactId&gt;
    &lt;version&gt;1.2_09&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;

  &lt;!-- java.lang.NoClassDefFoundError: org/jboss/el/ExpressionFactoryImpl --&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.jboss.el&lt;/groupId&gt;
    &lt;artifactId&gt;jboss-el&lt;/artifactId&gt;
    &lt;version&gt;1.0_02.CR4&lt;/version&gt;    &lt;!-- http://seamframework.org/Community/IllegalAccessErrorAfterUpgradingTo212CR1 --&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;

  &lt;!-- dependencies related to TestNG --&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.testng&lt;/groupId&gt;
    &lt;artifactId&gt;testng&lt;/artifactId&gt;
    &lt;version&gt;5.8&lt;/version&gt;
    &lt;classifier&gt;jdk15&lt;/classifier&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;
&lt;/dependencies&gt;
&lt;build&gt;
  &lt;testResources&gt;
    &lt;testResource&gt;
      &lt;directory&gt;src/test/resources&lt;/directory&gt;
      &lt;filtering&gt;true&lt;/filtering&gt;
    &lt;/testResource&gt;
    &lt;testResource&gt;
      &lt;directory&gt;src/test/bootstrap&lt;/directory&gt;
      &lt;filtering&gt;false&lt;/filtering&gt;
    &lt;/testResource&gt;
    &lt;testResource&gt;
      &lt;directory&gt;src/test/bootstrap&lt;/directory&gt;
      &lt;filtering&gt;true&lt;/filtering&gt;
      &lt;includes&gt;
        &lt;include&gt;**/*.xml&lt;/include&gt;
      &lt;/includes&gt;
    &lt;/testResource&gt;
  &lt;/testResources&gt;
  ...
&lt;/build&gt;</pre>
<p style="text-align: justify;"><span style="text-decoration: underline;">Remarque</span> : à l&#8217;heure actuelle la version la plus récente du conteneur est la beta3.SP12.</p>
<h2 style="text-align: justify;">Fichiers de tests</h2>
<p style="text-align: justify;">Dans la pratique, on ajoute toujours un fichier seam.properties vide dans le classpath des jar contenant des composants Seam. Dans le cas du test, ce fichier doit contenenir au minimum l&#8217;information sur le nom JNDI des EJB :</p>
<p class="wp-caption" style="text-align: justify;">org.jboss.seam.core.init.jndiPattern = #{ejbName}/local</p>
<p style="text-align: justify;">La classe de test doit étendre SeamTest. Elle peut ensuite utiliser l&#8217;EL pour référencer les composants Seam :</p>
<pre class="brush: java; toolbar: true;">public class ManagerActionTest extends SeamTest {
  private static Logger LOGGER = Logger.getLogger(ManagerActionTest.class);

  @Test
  public void testSayHello() {
    try {
      new ComponentTest() {
        @Override
        protected void testComponents() throws Exception {
          setValue("#{person.name}", "Yan");
          invokeMethod("#{manager.sayHello}");
          List&lt;Person&gt; fans = (List&lt;Person&gt;) getValue("#{fans}");
          assertNotNull(fans);
          assertEquals(1, fans.size());
          assertEquals("Yan", fans.get(0).getName());
          // Test le service EJB
          assertEquals(3, invokeMethod("#{manager.additionner(1, 2)}"));
        }
      }.run();
    } catch (Exception e) {
      LOGGER.error("TEST KO : " + e.getMessage());
      fail("TEST KO : " + e.getMessage());
    }
  }
}</pre>
<p style="text-align: justify;">En utilisant Hibernate, vous pouvez exécuter des scripts SQL au déploiement de votre test en ajoutant un fichier <em>import.sql</em> dans le classpath de test (src/test/resources). Cela dit,  dans ce cas, je conseillerai plutôt d&#8217;utiliser l&#8217;intégration avec DBUnit.</p>
<h2 style="text-align: justify;">Exécution</h2>
<p style="text-align: justify;">Pour exécuter les tests il faut lancer la commande <em>mvn clean test</em>.</p>
<h1 style="text-align: justify;">Variantes</h1>
<h2 style="text-align: justify;">Intégration avec DBUnit</h2>
<p style="text-align: justify;">L&#8217;intégration est possible entre seamTest et DBUnit. La classe de test doit étendre <em>DBunitSeamTest</em> et implémenter la méthode <em>prepareDBUnitOperations()</em>. Il faut aussi donner à TestNg la nom JNDI de la source de données vers la base de données ainsi que le type de la base de données (HSQL ou MYSQL). Pour cela, il faut configurer le plugin surefire comme cela :</p>
<pre class="brush: xml; toolbar: true;">&lt;build&gt;
  ...
  &lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
    &lt;version&gt;2.4.3&lt;/version&gt;
    &lt;configuration&gt;
      &lt;systemProperties&gt;
        &lt;property&gt;
          &lt;name&gt;datasourceJndiName&lt;/name&gt;
          &lt;value&gt;java:/DefaultDS&lt;/value&gt;
        &lt;/property&gt;
        &lt;property&gt;
          &lt;name&gt;database&lt;/name&gt;
          &lt;value&gt;HSQL&lt;/value&gt;
        &lt;/property&gt;
      &lt;/systemProperties&gt;
      &lt;argLine&gt;-Dsun.lang.ClassLoader.allowArraySyntax=true&lt;/argLine&gt;
    &lt;/configuration&gt;
 ...
&lt;/build&gt;</pre>
<p style="text-align: justify;"><span style="text-decoration: underline;">Remarque</span> : deux propriétés pour déclarer le type de la source de données et son nom JNDI ainsi qu&#8217;un argument pour permettre au serveur JBoss Embedded de s&#8217;éxécuter avec une JDK 1.6 (par défaut ce serveur n&#8217;est compatible qu&#8217;avec une JDK1.5).</p>
<p style="text-align: justify;">Pour information, DBUnit propose deux implémentations différentes pour décrire les données d&#8217;une base : le <a href="http://dbunit.sourceforge.net/apidocs/org/dbunit/dataset/xml/FlatXmlDataSet.html">FlatXmlDataSet</a> et le <a href="http://dbunit.sourceforge.net/apidocs/org/dbunit/dataset/xml/XmlDataSet.html">XmlDataSet</a> (<a href="http://dbunit.sourceforge.net/components.html" target="_blank">http://dbunit.sourceforge.net/components.html</a>).  SeamTest ne support que le FlatXmlDataSet.</p>
<h2 style="text-align: justify;">Dépendances sur des projets ou modules de type EJB</h2>
<p style="text-align: justify;">Dans le cas où votre module dépende d&#8217;un autre module EJB, il faut arriver à déployer la dépendance de type EJB dans le conteneur JBoss embedded. Il est possible de faire cette opération avec le plugin maven <a href="http://maven.apache.org/plugins/maven-dependency-plugin/" target="_blank">maven-dependency-plugin</a> comme cela :</p>
<pre class="brush: xml; toolbar: true;">&lt;build&gt;
  ...
  &lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;
    &lt;executions&gt;
      &lt;execution&gt;
        &lt;id&gt;copy&lt;/id&gt;
        &lt;phase&gt;process-test-resources&lt;/phase&gt;
        &lt;goals&gt;
          &lt;goal&gt;copy&lt;/goal&gt;
        &lt;/goals&gt;
        &lt;configuration&gt;
          &lt;artifactItems&gt;
            &lt;artifactItem&gt;
              &lt;groupId&gt;...&lt;/groupId&gt;
              &lt;artifactId&gt;...&lt;/artifactId&gt;
              &lt;version&gt;...&lt;/version&gt;
              &lt;type&gt;...&lt;/type&gt;
              &lt;classifier&gt;...&lt;/classifier&gt;
              &lt;overWrite&gt;false&lt;/overWrite&gt;
              &lt;outputDirectory&gt;${project.build.directory}/test-classes/deploy&lt;/outputDirectory&gt;
            &lt;/artifactItem&gt;
          &lt;/artifactItems&gt;
        &lt;/configuration&gt;
      &lt;/execution&gt;
    &lt;/executions&gt;
  &lt;/plugin&gt;
  ...
&lt;/build&gt;</pre>
<p><span style="text-decoration: underline;">Remarque</span> : la copie de la dépendance se déroule avant la phase d&#8217;exécution des tests.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/03/22/maven-et-seamtest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profiler une application J2EE avec JBoss et TPTP</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/03/10/profiler-une-application-j2ee-avec-jboss-et-tptp/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/03/10/profiler-une-application-j2ee-avec-jboss-et-tptp/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 19:00:06 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=864</guid>
		<description><![CDATA[Comment utiliser Eclipse pour profiler une applications J2EE déployé sur JBoss.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Cet article va vous expliquer comment utiliser Eclipse pour vérifier les performances d&#8217;une application sous JBoss. Je vous laisserai découvrir les écrans de reporting par vous même car ils dépendent de votre code source.</p>
<h1>Installation</h1>
<p style="text-align: justify;">Il est nécessaire d&#8217;installer les plugins suivant dans eclipse :</p>
<ul>
<li style="text-align: justify;">TPTP qui est dispoinble à partir du site d&#8217;update : <a href="http://download.eclipse.org/tptp/updates/galileo/" target="_blank">http://download.eclipse.org/tptp/updates/galileo/</a></li>
<li style="text-align: justify;">JBoss Tools (notamment <em>Test and Performances -&gt; TPTP Profile On JBoss Server</em>) qui est disponible à partir du site d&#8217;update : <a href="http://download.jboss.org/jbosstools/updates/development/" target="_blank">http://download.jboss.org/jbosstools/updates/development/</a></li>
</ul>
<p>Puis il faut créer un serveur JBoss depuis la vue <em>Server</em>.</p>
<h2>TPTP</h2>
<p style="text-align: center;"><img class="aligncenter" src="http://yan.langlois.free.fr/wordpress/wp-content/uploads/installTPTP.jpg" alt="" width="566" height="594" /></p>
<h2>JBoss TPTP</h2>
<p style="text-align: center;"><img class="aligncenter" src="http://yan.langlois.free.fr/wordpress/wp-content/uploads/installJBossTPTP.jpg" alt="" width="420" height="529" /></p>
<h1>Exécution</h1>
<p style="text-align: justify;">Pour exécuter le profilage, il faut démarrer votre serveur JBoss avec le bouton <em>Profile</em>. Eclipse vous demande de choisir le type d&#8217;informations à mesurer. Une seule possibilité à la fois (je n&#8217;ai pas encore compris pourquoi je ne peux pas avoir plusieurs data collector en même temps&#8230;) :</p>
<p style="text-align: center;"><img class="aligncenter" src="http://yan.langlois.free.fr/wordpress/wp-content/uploads/profileOption.jpg" alt="" width="551" height="519" /></p>
<p style="text-align: justify;">Avant de cliquer sur le bouton <em>Finish</em>, n&#8217;hésitez pas à ajouter ou modifier les filtres par défaut en double-cliquant sur <em>Java Profiling</em>. Cela va vous permettre de focaliser votre attention sur votre code et non celui des librairies tierces que vous utilisez :</p>
<p style="text-align: center;"><img class="aligncenter" src="http://yan.langlois.free.fr/wordpress/wp-content/uploads/profilingOption.jpg" alt="" width="387" height="584" /></p>
<p style="text-align: justify;">Après le démarrage de votre serveur en mode profile, le collecteur de données se synchronise à intervalle de temps régulier. Pour éviter d&#8217;enregistrer des informations inutiles, vous pouvez le mettre en pause par exemple.</p>
<h1>Problèmes rencontrés et astuces</h1>
<h2>JRebel</h2>
<p style="text-align: justify;">Il faut savoir que JRebel ne fonctionne pas lorsqu&#8217;on utilise TPTP. Donc si vous utilisez cet outil, il faudra le désactiver (démarrer votre serveur JBoss sans les paramètres JRebel) pour pouvoir profiler votre application.</p>
<h2 style="text-align: justify;">Profiles indisponibles</h2>
<p style="text-align: justify;">Si lorsque vous essayez de démarrer votre serveur en mode profile vous avez une exception vous parlant de collecteur de données, vérifier que vos plugins soient bien à jour.</p>
<h2 style="text-align: justify;">Performances</h2>
<p style="text-align: justify;">TPTP est très gourmand en mémoire donc ne vous étonnez pas de voire les performances de votre application chuter rapidement. J&#8217;ai aussi remarqué que les performances d&#8217;éclipse s&#8217;effondrent rapidement lors de l&#8217;analyse des données quand celles-ci sont très volumineuses.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/03/10/profiler-une-application-j2ee-avec-jboss-et-tptp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser l&#8217;annuaire JNDI d&#8217;un JBoss embedded</title>
		<link>http://everythingiswrong.free.fr/index.php/2010/12/12/utiliser-lannuaire-jndi-dun-jboss-embedded/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2010/12/12/utiliser-lannuaire-jndi-dun-jboss-embedded/#comments</comments>
		<pubDate>Sun, 12 Dec 2010 12:54:17 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Conteneurs embarqués]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[jndi]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=665</guid>
		<description><![CDATA[Ajouter une chaine de caractère dans le JNDI de JBoss embedded.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Il est toujours difficile de paramétrer les conteneurs embarqués. Encore plus lorsque ces derniers ne sont plus très récents et donc pas très bien documentés. C&#8217;est pourquoi je vous propose cet article  qui va vous apprendre à enregistrer une chaine de caractère (java.lang.String) dans l&#8217;annulaire JNDI de JBoss embedded. Pour cela, il faut ajouter ce code XML dans le fichier embedded-jboss-beans.xml de votre classpath :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;bean name=&quot;&quot; class=&quot;org.jboss.ejb3.embedded.JndiBinder&quot;&gt;
    &lt;property name=&quot;target&quot;&gt;La valeur de la variable&lt;/property&gt;
    &lt;property name=&quot;bindTo&quot;&gt;variableName&lt;/property&gt;
    &lt;property name=&quot;serializable&quot;&gt;true&lt;/property&gt;
&lt;/bean&gt;
</pre>
<p style="text-align: justify;">Voici un exemple concret : <a href="https://subversion.assembla.com/svn/everythingiswrong/embedded-jboss-jndi-exemple" target="_blank">https://subversion.assembla.com/svn/everythingiswrong/embedded-jboss-jndi-exemple</a>.</p>
<p style="text-align: justify;">Pour plus d&#8217;information sur le conteneur embarqué  de JBoss que j&#8217;utilise dans l&#8217;exemple : <a href="http://docs.jboss.org/ejb3/embedded/embedded.html" target="_blank">http://docs.jboss.org/ejb3/embedded/embedded.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2010/12/12/utiliser-lannuaire-jndi-dun-jboss-embedded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
