<?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>CADJEE Consulting</title>
	<atom:link href="https://cadjee.fr/feed/" rel="self" type="application/rss+xml" />
	<link>https://cadjee.fr</link>
	<description>Expertise Java &#38; Système d&#039;information</description>
	<lastBuildDate>Thu, 17 Dec 2015 21:37:19 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>Tester une fonctionnalité complexe avec DBUnit</title>
		<link>https://cadjee.fr/tester-une-fonctionnalite-complexe-avec-dbunit/</link>
		<comments>https://cadjee.fr/tester-une-fonctionnalite-complexe-avec-dbunit/#comments</comments>
		<pubDate>Wed, 02 Dec 2015 13:24:05 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[DbUnit]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[DBUNIT]]></category>
		<category><![CDATA[Test]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=208</guid>
		<description><![CDATA[J&#8217;étais confronté récemment à la problématique suivante : tester une suite de fonctionnalité au sein du même test afin de simuler un process métier. La fonctionnalité en question, met à jour ou insert des données en base. Le but du test étant de vérifier en fin de process la présence et cohérence des données en [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;étais confronté récemment à la problématique suivante : tester une suite de fonctionnalité au sein du même test afin de simuler un process métier. La fonctionnalité en question, met à jour ou insert des données en base. Le but du test étant de vérifier en fin de process la présence et cohérence des données en base. Plutôt que faire des requêtes en fin de test puis tester le résultat, nous ferons plûtot un test sur l&rsquo;ensemble de la base pour notre assertion.</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/05/DBUnit.jpg"><img class="alignnone size-full wp-image-210" src="http://cadjee.fr/wp-content/uploads/2015/05/DBUnit.jpg" alt="DBUnit" width="1024" height="768" /></a></p>
<ul>
<li><span style="text-decoration: underline;"><strong>Etape 1  et 2 : Extraction des données dans la base réel</strong></span></li>
</ul>
<p>Il s&rsquo;agit de faire une snapshot de la base avant l&rsquo;execution du test. On va extraire que les données qui nous intéresse et non l&rsquo;ensemble de la base. Il faut écrire un main java :</p>
<pre class="brush: java; title: ; notranslate">

....
PropertiesConfiguration propertiesConfiguration = new PropertiesConfiguration(&quot;maProp.properties&quot;);
String url = propertiesConfiguration.getString(&quot;URL&quot;);
 String user = propertiesConfiguration.getString(&quot;USER&quot;);
 String password = propertiesConfiguration.getString(&quot;PASSWORD&quot;);
 String schema = propertiesConfiguration.getString(&quot;SCHEMA&quot;);
// database
connection Class.forName(&quot;oracle.jdbc.driver.OracleDriver&quot;);
Connection jdbcConnection = DriverManager.getConnection(url, user, password);
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, schema);
IDataSet createDataSet = connection.createDataSet();
FlatDtdDataSet.write(createDataSet, new FileOutputStream(&quot;src/main/resources/maBase.dtd&quot;));
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable(&quot;TABLE_PERSONNE&quot;, &quot;select * from PERSONNE where AGE &amp;amp;lt; 18&quot;);
FlatXmlWriter datasetWriter = new FlatXmlWriter(new FileOutputStream(&quot;jdd.xml&quot;));
datasetWriter.setDocType(&quot;maBase.dtd&quot;); datasetWriter.write(partialDataSet);
 ... </pre>
<p>Db unit nous fourni un jeu de test au format xml qu&rsquo;on placera dans les ressources de nos tests.</p>
<ul>
<li><strong><span style="text-decoration: underline;">Etape 3 , 4 et 5   : écriture du test et load du jdd en base mémoire et extraction du resultat</span></strong></li>
</ul>
<p>On doit à présent loader le jdd.xml dans notre base H2. La encore Db unit nous fournit des outils pour le faire.</p>
<pre class="brush: java; title: ; notranslate">

IDatabaseTester databaseTester = MonDBmemoire.getInstance();
databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
databaseTester.setDataSet(getDataSetFromFile(&quot;path/chemin/jdd.xml&quot;));
databaseTester.onSetup();
...
// mon traitement pour le test
...
//dump de la base apres execution du traitement
private String[]  nomTables={&quot;PERSONNE &quot;, &quot;VILLE&quot;};
IDataSet databaseDataSet = connection().createDataSet(nomTables);
FlatXmlDataSet.write(databaseDataSet, new FileOutputStream(&quot;monDump.xml&quot;));
</pre>
<p>A cette étape on a extrait de la base mémoire, les données voulues apres l&rsquo;execution du test. Il faudra faire une analyse fonctionnelle, afin de s&rsquo;assurer que le résultat obtenu est conforme à ce qui est attendu.</p>
<p>Pour ce faire on peut  soit analyser le fichier xml (monDump.xml) de sortie ou directement requeter en base mémoire. Si vous opter pour la dernière solution n&rsquo;oublier pas de commiter vos donner en mémoire après le test (<strong> </strong>setAutoCommit(false))   puis lancer la commande <em> java -cp h2*.jar org.h2.tools.Server </em>pour activer  le GUI de H2 .</p>
<p>Si le résultat vous convient, placer le fichier monDump.xml dans les ressources de votre test puis  passer à l&rsquo;étape suivante sinon revoir votre code.</p>
<ul>
<li><span style="text-decoration: underline;"><strong>Etape 6 : finalisation du test avec assertion </strong></span></li>
</ul>
<p>A ce stade vous avez valider les données qui ont été inserées/updatées/supprimées en base. Il ne reste plus qu&rsquo;à comparer l&rsquo;état de la base mémoire avec le fichier monDump.xml.  Dans notre classe de test on supprimera la partie d&rsquo;extraction dump qu&rsquo;on remplcera par le code suivant :</p>
<pre class="brush: java; title: ; notranslate">
...
private String[]  nomTables={&quot;PERSONNE &quot;, &quot;VILLE&quot;};
IDataSet databaseDataSet = connction.createDataSet();
IDataSet expectedDataSet = getDataSetFromFile(&quot;path/vers/chemin/monDump.xml&quot;);
for (String tb: nomTables) {
ITable actualTable = databaseDataSet.getTable(tb);

ReplacementTable expectedTable = new ReplacementTable(expectedDataSet.getTable(tb));
expectedTable.addReplacementObject(&quot;${date-today}&quot;, new SimpleDateFormat(&quot;yyyy-MM-dd&quot;).format(new Date()));
Assertion.assertEquals(new SortedTable(expectedTable, actualTable.getTableMetaData()),new SortedTable(actualTable, actualTable.getTableMetaData()));
</pre>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/tester-une-fonctionnalite-complexe-avec-dbunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium 2: tester vos interfaces graphiques</title>
		<link>https://cadjee.fr/selenium-2-tester-vos-interfaces-graphiques/</link>
		<comments>https://cadjee.fr/selenium-2-tester-vos-interfaces-graphiques/#comments</comments>
		<pubDate>Fri, 25 Sep 2015 13:06:53 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[GUI test]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[TU]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=191</guid>
		<description><![CDATA[Pour automatiser vos tests UI, la suite Selenium offre de grande possibilité. Supportant mutile langage C#, php, python et bien évidement Java, la suite propose également un plugin firefox ( Selenium IDE)  pour enregistrer, à la façon des macros excels,  toutes les actions utilisateur ( clics, drag and drop, saisie etc&#8230;).  Ces actions seront ensuite [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Pour automatiser vos tests UI, la suite Selenium offre de grande possibilité. Supportant mutile langage C#, php, python et bien évidement Java, la suite propose également un plugin firefox ( Selenium IDE)  pour enregistrer, à la façon des macros excels,  toutes les actions utilisateur ( clics, drag and drop, saisie etc&#8230;).  Ces actions seront ensuite exporter sous forme de TestCase qu&rsquo;il suffira d&rsquo;importer dans vos projets. Certaines actions ne sont malheureusement pas enregistrable par le plugin: gestion des pop up, authentification par basic form ( la fameuse fenêtre Authentification Required) par exemple.<br />
<span id="more-191"></span></p>
<p>&nbsp;</p>
<ul>
<li><span style="text-decoration: underline;"><span style="text-decoration: underline;"><strong>Dependance Maven</strong></span></span></li>
</ul>
<pre class="brush: java; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;
	&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
	&lt;groupId&gt;fr.cadjee.testUI&lt;/groupId&gt;
	&lt;artifactId&gt;CadjeeSelenium&lt;/artifactId&gt;
	&lt;version&gt;1.0&lt;/version&gt;

	&lt;build&gt;
	&lt;plugins&gt;
		&lt;plugin&gt;
			&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
			&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
			&lt;configuration&gt;
				&lt;testFailureIgnore&gt;true&lt;/testFailureIgnore&gt;
			&lt;/configuration&gt;
		&lt;/plugin&gt;
	&lt;/plugins&gt;
&lt;/build&gt;

	&lt;dependencies&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.seleniumhq.selenium&lt;/groupId&gt;
			&lt;artifactId&gt;selenium-java&lt;/artifactId&gt;
			&lt;version&gt;2.46.0&lt;/version&gt;
		&lt;/dependency&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;junit&lt;/groupId&gt;
			&lt;artifactId&gt;junit&lt;/artifactId&gt;
			&lt;version&gt;4.11&lt;/version&gt;
			&lt;scope&gt;test&lt;/scope&gt;
		&lt;/dependency&gt;
	&lt;/dependencies&gt;
&lt;/project&gt;

</pre>
<p>&nbsp;</p>
<ul>
<li><strong>Selenium</strong><span style="text-decoration: underline;"><strong> IDE </strong></span></li>
</ul>
<p>Toutes les actions sont enregistrées puis exportable via le Menu <em>File &gt; Export Test Case As &#8230;&gt; Java Junit 4 / Web Driver</em>. Les autres options (WebDriver Backed&#8230;ect ) seront bientôt obsolètes. Ils sont la uniquement pour assurer la rétro comptabilité entre la version selenium 1 RC et selenium 2 WebDriver.</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/05/seleniumIDE.jpg"><img class="alignnone size-full wp-image-194" src="http://cadjee.fr/wp-content/uploads/2015/05/seleniumIDE.jpg" alt="seleniumIDE" width="600" height="721" /></a></p>
<p>&nbsp;</p>
<p>Les classes java sont  à importer dans votre projet sous forme de test ou main exécutable. La forme &lsquo;testCase&rsquo; permet d&rsquo;automatiser plus naturellement votre application avec Maven et Jenkins.</p>
<p>&nbsp;</p>
<ul>
<li><strong><span style="text-decoration: underline;">Forcer Selenium à utiliser un autre navigateur différent du navigateur par défaut </span></strong></li>
</ul>
<p>Les test UI peuvent s’exécuter sur différent navigateurs sachant que le navigateur par défaut de Selenium est FireFox. Pour cela il va chercher dans le Path de votre OS le chemin vers votre FireFox. Dans mon cas je veux plutôt utiliser un FireFoxPortable ( donc non présent dans le PATH):</p>
<pre class="brush: java; title: ; notranslate">&lt;/pre&gt;
public class SeleniumForFirefoxCase {

protected static WebDriver driver;
protected static String baseUrl;
protected boolean acceptNextAlert = true;
protected static StringBuffer verificationErrors = new StringBuffer();
private static final String URL_EXE_FIREOX = &quot;C:\\Documents\\selenium\\FirefoxPortable\\FirefoxPortable.exe&quot;;

...

@BeforeClass
public static void init() {
File pathToBinary = new File(URL_EXE_FIREOX);
FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
FirefoxProfile firefoxProfile = new FirefoxProfile();
driver = new FirefoxDriver(ffBinary, firefoxProfile);
}

}
</pre>
<p>J&rsquo;ai déclarer le driver en <strong>static</strong> afin d&rsquo;avoir une seule instance du firefox pour mes tests. Cela évite d&rsquo;ouvrir plusieurs fenêtres de fireFox. Je peux ainsi enchaîner mes tests sur la même fenêtre.<br />
Pour info il est possible d’exécuter les tests sur IE, Chrome, Safari&#8230;Ect et même en mode non graphique via le driver <em><strong>HtmlUnitDriver.</strong></em></p>
<p>&nbsp;</p>
<ul>
<li><span style="text-decoration: underline;"><strong>Form Based Authentication : Fenêtre d&rsquo;authentification </strong></span></li>
</ul>
<p>Ces fenêtres vous demandent de vous authentifier pour accéder à une page donnée. Souvent l&rsquo;oeuvre d&rsquo;un JAAS ou Valve défini au sein de votre application:</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/05/authen.png"><img class="alignnone size-full wp-image-199" src="http://cadjee.fr/wp-content/uploads/2015/05/authen.png" alt="authen" width="320" height="134" /></a></p>
<p>&nbsp;</p>
<p>L&rsquo;IDE ne sait pas enregistrer cette action. Il va falloir passer par programmation. L&rsquo;astuce est simple: ajouter dans l&rsquo;url le  mot de passe et le login :</p>
<pre class="brush: java; title: ; notranslate">

public class SeleniumForFirefoxCase {
...
protected static String baseUrl;

...

@BeforeClass
public static void init()
{
...
baseUrl = &quot;http://login:motDePasse@localhost:8080/monAppli/&quot;;
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl);

...
}
</pre>
<ul>
<li><strong><span style="text-decoration: underline;">Gestion des pop up </span></strong></li>
</ul>
<p>Pour gérer la pop up il faut indiquer au driver de switcher de fenêtre car par défaut  c&rsquo;est toujours la fenêtre principale qui est prise en compte:</p>
<pre class="brush: java; title: ; notranslate">
@Test
public void Scenario1_OuverturePopUp() throws Exception {

// ouverture de la pop up

driver.findElement(By.xpath(&quot;//a[contains(@href, \&quot;lienPopUp')\&quot;)]&quot;)).click();

// On recupere l'id des fenetres actives
Set&lt;String&gt; windowId = driver.getWindowHandles();

Iterator&lt;String&gt; itererator = windowId.iterator();

//1er fenetre
String mainWinID = itererator.next();
System.out.println(mainWinID);
//2de fenetre le pop up
String popUpID = itererator.next();
System.out.println(popUpID);

//On switch de fenetre
driver.switchTo().window(popUpID);
System.out.println(driver.getTitle());
Assert.assertEquals(&quot;Refus demande&quot;, driver.getTitle());
driver.findElement(By.name(&quot;commentaire&quot;)).clear();

//envoie d'une valeur dans la zone de texte de la pop up
driver.findElement(By.name(&quot;commentaireRefus&quot;)).sendKeys(&quot;test pop up selenium&quot;);
</pre>
<ul>
<li>
<h4><span style="text-decoration: underline;"><strong>Conclusion</strong></span></h4>
</li>
</ul>
<p>L&rsquo;intégration par Maven permet l’exécution des tests de la même façon q&rsquo;un test unitaire classique. Mais ne nous y méprenons pas, Selenium n&rsquo;a pas vocation à remplacer un TU et vis versa!</p>
<p>Pour aller un peu plus loin, il est même conseillé d&rsquo;utiliser une base mémoire tel que H2. On peux également utiliser un serveur Jetty plus léger et plus rapide. Enfin Une connaissance de <span style="text-decoration: underline;">Xpath est obligatoire</span> pour mener à bien votre intégration de Selenium.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/selenium-2-tester-vos-interfaces-graphiques/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Script VB pour excel</title>
		<link>https://cadjee.fr/script-vb-pour-excel/</link>
		<comments>https://cadjee.fr/script-vb-pour-excel/#comments</comments>
		<pubDate>Mon, 03 Aug 2015 12:21:35 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[Script]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=181</guid>
		<description><![CDATA[Voici un petit script VB sans prétention qui vous aidera à extraire des données dans une fiche excel et de l&#8217;écrire dans un ficher au format voulu ( csv, xml, sql ): &#160; Le Chr(10) permet un retour chariot pour chaque ligne traitée. &#160;]]></description>
				<content:encoded><![CDATA[<p>Voici un petit script VB sans prétention qui vous aidera à extraire des données dans une fiche excel et de l&rsquo;écrire dans un ficher au format voulu ( csv, xml, sql ):</p>
<p>&nbsp;</p>
<pre class="brush: java; title: ; notranslate">
Sub generatorScript()

FileNumber = FreeFile
fileSaveName = Application.GetSaveAsFilename( _
InitialFileName:=&quot;GeneratorICAJEE&quot;, fileFilter:=&quot;Text Files (*.sql), *.sql&quot;, Title:=&quot;Creation script&quot;)
Open fileSaveName For Output As #FreeFile

For i = 1 To 740
txt = txt &amp; &quot; update personne set personne_id= : &quot; &amp; Sheets(1).Cells(i, 9) &amp; &quot; where personne_id= &quot; &amp; Sheets(1).Cells(i, 3) &amp; &quot; and  nom_personne= &quot; &amp; Sheets(1).Cells(i, 1) &amp; &quot;;&quot; &amp;amp; Chr(10)
Next i

Print #FileNumber, txt
Close #FileNumber
End Sub

</pre>
<p>Le <strong>Chr(10) </strong>permet un retour chariot pour chaque ligne traitée.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/script-vb-pour-excel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formation JBOSS du 18 au 21 Mai 2015</title>
		<link>https://cadjee.fr/formation-du-18-au-21-mai-2015-administration-jboss/</link>
		<comments>https://cadjee.fr/formation-du-18-au-21-mai-2015-administration-jboss/#comments</comments>
		<pubDate>Fri, 15 May 2015 16:15:15 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[Formation]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=173</guid>
		<description><![CDATA[Une formation de 4 jours riches en concepts et TP. Voici les notions que nous aborderons : Architecture 3 tiers EJB2 vers EJB 3 JNDI : Datasource…etc JPA WebServices JMS queue/topic MDB Création d’un projet fromscratch avec Maven Présentation de Jboss ( noyau et fichier de conf) Administration par UI, JBOSS CLI, et conf XML [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="_all_wplink_j2cwNQyZ_cc"></div>
<p>Une formation de 4 jours riches en concepts et TP. Voici les notions que nous aborderons :</p>
<ul>
<li>Architecture 3 tiers</li>
<li>EJB2 vers EJB 3</li>
<li>JNDI : Datasource…etc</li>
<li>JPA</li>
<li>WebServices</li>
<li>JMS queue/topic</li>
<li>MDB</li>
<li>Création d’un projet fromscratch avec Maven</li>
<li>Présentation de Jboss ( noyau et fichier de conf)</li>
<li>Administration par UI, JBOSS CLI, et conf XML en mode standalone</li>
<li>Déploiement d’une application dans JBOSS</li>
<li>Analyse et explication de la log server</li>
<li>Mise en place d’un custum LOGGER à partir de Jboss</li>
<li>Changer le LEVEL LOGGER à chaud sans redéployer l’application</li>
<li>JMX : supervision au runtime d’une application via JConsole et VisualVM</li>
<li>Création d’une web appli (WAR) – Servlet/JSP</li>
<li>Mise en place d’un politique de sécurité avec JAAS</li>
<li>Sécurisé l’accès à l’application avec SSL</li>
<li>Présentation de Jboss domain et le management de n cluster</li>
<li>Loadbalancing avec mod jk</li>
<li>Mise ne place de la haute dispo avec Jboss AS7.1.1</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/formation-du-18-au-21-mai-2015-administration-jboss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Débuter avec JMeter</title>
		<link>https://cadjee.fr/debuter-avec-jmeter/</link>
		<comments>https://cadjee.fr/debuter-avec-jmeter/#comments</comments>
		<pubDate>Wed, 06 May 2015 10:33:23 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Jmeter]]></category>
		<category><![CDATA[plan de test]]></category>
		<category><![CDATA[test de charge]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=136</guid>
		<description><![CDATA[]]></description>
				<content:encoded><![CDATA[<p><iframe src="https://docs.google.com/presentation/d/10LMYbHh4WOq4AA27wAFL31-W2X44n_e-Y_qZk-7AWa0/embed?start=false&amp;loop=false&amp;delayms=3000" width="960" height="569" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/debuter-avec-jmeter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Génération jaxb avec Maven à partir d&#8217;une xsd</title>
		<link>https://cadjee.fr/generation-jaxb-avec-maven-a-partir-dun-xsd/</link>
		<comments>https://cadjee.fr/generation-jaxb-avec-maven-a-partir-dun-xsd/#comments</comments>
		<pubDate>Mon, 04 May 2015 10:56:09 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JAXB]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[XSD]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=121</guid>
		<description><![CDATA[Si vous êtes l&#8217;heureux élu d&#8217;une XSD dans votre projet&#8230;Bravo ! A partir de cette XSD on va pouvoir grâce  à jaxb : Générer les pojos java (décoré des annotations JAXB). faire du marshalling / unmarshalling. Nous nous intéresserons au point 1. Comment bien gérer cette phase de génération? Comprenons que ces POJOs générer sont, d&#8217;une [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Si vous êtes l&rsquo;heureux élu d&rsquo;une XSD dans votre projet&#8230;Bravo ! A partir de cette XSD on va pouvoir grâce  à jaxb :</p>
<ol>
<li>Générer les pojos java (décoré des annotations JAXB).</li>
<li>faire du marshalling / unmarshalling.</li>
</ol>
<p><span id="more-121"></span></p>
<p>Nous nous intéresserons au point 1. Comment bien gérer cette phase de génération? Comprenons que ces POJOs générer sont, d&rsquo;une part soumis au changement pour toute modification du XSD et d&rsquo;autre part n&rsquo;a pas lieu de faire partie intégrante de votre projet au sens package java. Le seul élément qui doit se retrouver dans votre projet c&rsquo;est la XSD lui même. L&rsquo;idée est donc d&rsquo;avoir la XSD au niveau de nos ressources projets et de demander à Maven de s&rsquo;occuper de générer les pojos à partir de la XSD puis d&rsquo;ajouter ces derniers au classpath de notre livrable (jar,war,ear&#8230;etc)  à chaque build de Maven.</p>
<p>Prenons une XSD connue du milieu bancaire (flux SEPA) : <a href="https://github.com/w2c/sepa-sdd-xml-generator/blob/master/validation_schemes/pain.008.003.02.xsd"> https://github.com/w2c/sepa-sdd-xml-generator/blob/master/validation_schemes/pain.008.003.02.xsd</a>.</p>
<ul>
<li><span style="text-decoration: underline;"><strong>Etape 1 : Bien positionner la XSD</strong></span></li>
</ul>
<p>Placer la XSD dans<strong> scr/main/ressources/maXSD </strong></p>
<ul>
<li><span style="text-decoration: underline;"><strong>Etape 2 : Configuration de Maven</strong></span></li>
</ul>
<p>Dans notre pom maven nous ajoutons le plugin pour la génération des POJOS. Il convient d&rsquo;indiquer le chemin de la xsd ainsi que le nom du package qu&rsquo;on souhaite donner pour la génération.</p>
<pre class="brush: java; title: ; notranslate">&lt;/pre&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
&lt;artifactId&gt;jaxb2-maven-plugin&lt;/artifactId&gt;
&lt;executions&gt;
&lt;execution&gt;
&lt;id&gt;xjc&lt;/id&gt;
&lt;goals&gt;
&lt;goal&gt;xjc&lt;/goal&gt;
&lt;/goals&gt;
&lt;configuration&gt;
&lt;schemaDirectory&gt;src/main/resources/xsd&lt;/schemaDirectory&gt;
&lt;packageName&gt;fr.cadjee.sepa.jaxb&lt;/packageName&gt;
&lt;/configuration&gt;
&lt;/execution&gt;
&lt;/executions&gt;
&lt;/plugin&gt;
&lt;pre&gt;</pre>
<ul>
<li><span style="text-decoration: underline;"> <strong>Etape 3 : C&rsquo;est fini&#8230;lancer le build</strong></span></li>
</ul>
<p>Lancer votre <strong>mvn clean install  </strong>:</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/04/genJAXB1.png"><img class="alignnone size-full wp-image-128" src="http://cadjee.fr/wp-content/uploads/2015/04/genJAXB1.png" alt="genJAXB" width="680" height="615" /></a></p>
<p>voici un aperçu général de l’arborescence:</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/04/jaxb-rep.png"><img class="alignnone size-full wp-image-126" src="http://cadjee.fr/wp-content/uploads/2015/04/jaxb-rep.png" alt="jaxb-rep" width="439" height="755" /></a>    <a href="http://cadjee.fr/wp-content/uploads/2015/04/jaxb1.png"><img class="alignnone size-full wp-image-125" src="http://cadjee.fr/wp-content/uploads/2015/04/jaxb1.png" alt="jaxb1" width="402" height="691" /></a></p>
<p>&nbsp;</p>
<p>On peut bien entendu gérer plusieurs XSD dans des répertoires différents soit en ajoutant une autre exécution ou en utilisant le fichier xjb.</p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/generation-jaxb-avec-maven-a-partir-dun-xsd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CDI : Context Dependency Injection, mise en route (Partie 1)</title>
		<link>https://cadjee.fr/cdi-context-dependency-injection-mise-en-route-partie-1/</link>
		<comments>https://cadjee.fr/cdi-context-dependency-injection-mise-en-route-partie-1/#comments</comments>
		<pubDate>Mon, 30 Mar 2015 09:33:20 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[CDI]]></category>
		<category><![CDATA[Injection]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JEE 6]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=100</guid>
		<description><![CDATA[Avec l&#8217;arrivée de Java 6, la JDK s&#8217;équipe enfin de l&#8217;injection de dépendance. Cette notion et souplesse introduite par Spring est prête à être utilisée pleinement dans nos applications. Encore faut-il mettre en route la machine par une conf simplissime et choisir l&#8217;implémentation de la JSR 299.  Côté implémentation, WELD est l&#8217;implémentation de référence, pour la conf [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Avec l&rsquo;arrivée de Java 6, la JDK s&rsquo;équipe enfin de l&rsquo;injection de dépendance. Cette notion et souplesse introduite par Spring est prête à être utilisée pleinement dans nos applications. Encore faut-il mettre en route la machine par une conf simplissime et choisir l&rsquo;implémentation de la JSR 299.  Côté implémentation, WELD est l&rsquo;implémentation de référence, pour la conf un simple fichier bean.xml (même vide) suffira.  Allons-y.</p>
<p><span id="more-100"></span><br />
<span style="text-decoration: underline;"><strong>Commencons par le commencement: Dépendance Maven</strong></span></p>
<pre class="brush: java; title: ; notranslate">
&lt;dependency&gt;
  &lt;groupId&gt;org.jboss.weld.servlet&lt;/groupId&gt;
  &lt;artifactId&gt;weld-servlet-core&lt;/artifactId&gt;
  &lt;version&gt;2.2.8.Final&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
   &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
   &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt;
   &lt;version&gt;3.0.1&lt;/version&gt;
   &lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
  &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
  &lt;artifactId&gt;jstl&lt;/artifactId&gt;
  &lt;version&gt;1.2&lt;/version&gt;
&lt;/dependency&gt;
 </pre>
<p><span style="text-decoration: underline;"><strong>Classes Java de la couche Service et Buisness</strong></span></p>
<p>Ces classes feront une simple opération d&rsquo;addition entre 2 valeurs.</p>
<pre class="brush: java; title: ; notranslate">
package fr.cdi.servlet;

public interface ICalcul {
	public int addition(int a,int b);
}
 </pre>
<p>Ci dessous une implémentation de l&rsquo;interface ICalcul. L&rsquo;annotation @Default et @Any  est ici facultative car nous avons qu&rsquo;une seule implémentation possible.  Ces annotations s&rsquo;appellent un Qualifer.  La spécification de la JSR 299 propose des qualifers par défauts : @Default, @Any, @Named, @New.  Ils permettent à CDI de savoir quelle implémentation injecter. Dans le cas où rien n&rsquo;est précisé, 2 annotations sont implicitement ajoutées par CDI : @Default et @Any. Comme je vous l&rsquo;ai dit, dans notre cas nous n&rsquo;en avons qu&rsquo;une seule donc aucune ambiguïté à ce niveau. Nous reviendrons plus tard sur ces notions de Qualifier dans un autre billet.  Retenez juste qu&rsquo;une implémentation injectable aura par défaut 2 types de Qualifer et ce, même si le développeur ne le précise pas : default et any !</p>
<pre class="brush: java; title: ; notranslate">
package fr.cdi.servlet;
import javax.enterprise.inject.Default;

@Default
@Any
public class CalculBuisness implements ICalcul {

	public int addition(int a,int b){
		return a+b;
	}
}
 </pre>
<p>Notons la première présence de l&rsquo;annotation @Inject sur l&rsquo;attribut de classe. Par cette simple annotation la classe CalculBuisness est automatiquement injectée grâce au qualifier @Default.  L&rsquo;avantage considérable est ici de découpler le code d&rsquo;une implémentation particulière. On aurait pu écrire aussi @Inject @Default private ICalcul calculBuisness ou @Inject @Default  @Any private ICalcul calculBuisness.</p>
<pre class="brush: java; title: ; notranslate">
package fr.cdi.servlet;
import javax.inject.Inject;

public class CalculeService {

	@Inject
	private ICalcul calculBuisness;

	public int addition(String  a,String  b){
		return calculBuisness.addition(Integer.parseInt(a), Integer.parseInt(b));
	}
}
 </pre>
<p><span style="text-decoration: underline;"><strong>La servlet </strong></span></p>
<p>Même principe que précédemment on injecte par annotation la classe CalculeService. L&rsquo;injection doit se faire de bout en bout c.à.d de la Servlet jusqu&rsquo;à la dernière classe appelée ( classe buisness).</p>
<pre class="brush: java; title: ; notranslate">
package fr.cdi.servlet;

import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

@WebServlet(value=&quot;/addition&quot;, name=&quot;servletCDI&quot;)
public class ServletCDI extends GenericServlet{

	@Inject
	private CalculeService calculeService;

	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {

		String val1 = req.getParameter(&quot;val1&quot;);
		String val2 = req.getParameter(&quot;val2&quot;);
		int resultat = calculeService.addition(val1, val2);
		req.setAttribute(&quot;resultat&quot;, resultat);
	req.getRequestDispatcher(&quot;/WEB-INF/index.jsp&quot;).forward(req, res);
	}
}
 </pre>
<p><span style="text-decoration: underline;"><strong>Le web.xml</strong></span></p>
<pre class="brush: java; title: ; notranslate">
&lt;!DOCTYPE web-app PUBLIC
 &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;
 &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot; &gt;

&lt;web-app&gt;

  &lt;display-name&gt;Archetype Created Web Application&lt;/display-name&gt;
    &lt;resource-env-ref&gt;
    &lt;resource-env-ref-name&gt;BeanManager&lt;/resource-env-ref-name&gt;
    &lt;resource-env-ref-type&gt;javax.enterprise.inject.spi.BeanManager&lt;/resource-env-ref-type&gt;
  &lt;/resource-env-ref&gt;
&lt;/web-app&gt;
 </pre>
<p><span style="text-decoration: underline;"><strong>Enfin le fameux fichier bean.xml</strong></span></p>
<p>Ce fichier est presque vide est doit être au même niveau que le web.xml (WEB-INF). Le bean.xml permet de préciser au serveur web ou application qu&rsquo;une injection par CDI est à prévoir. Le serveur va donc scanner le projet à le recherche des @Inject. Tous les objets annotés seront instanciés par WELD dans un conteneur dit &laquo;&nbsp;léger&nbsp;&raquo;. Le fichier bean.xml à d&rsquo;autre utilité qu&rsquo;on verra dans un autre billet. Contentons nous du strict minimum pour le moment <img src="https://cadjee.fr/wp-includes/images/smilies/simple-smile.png" alt=":-)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="brush: java; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://xmlns.jcp.org/xml/ns/javaee&quot;
       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
       xsi:schemaLocation=&quot;http://xmlns.jcp.org/xml/ns/javaee
                           http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd&quot;
       version=&quot;1.1&quot; bean-discovery-mode=&quot;all&quot;&gt;
&lt;/beans&gt;
 </pre>
<p><span style="text-decoration: underline;"><strong>la JSP </strong></span></p>
<pre class="brush: java; title: ; notranslate">
&lt;%@ taglib uri=&quot;http://java.sun.com/jstl/core&quot; prefix=&quot;c&quot;%&gt;
&lt;html&gt;
&lt;head&gt;
&lt;body&gt;
	&lt;h1&gt;Welcome CDI tuto&lt;/h1&gt;
	&lt;c:out value=&quot;${resultat}&quot;/&gt;

&lt;/body&gt;
&lt;/head&gt;
&lt;/html&gt;
 </pre>
<p>Voici le résultat simple mais efficace.</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/03/CDI_1.png"><img class="alignnone size-full wp-image-108" src="http://cadjee.fr/wp-content/uploads/2015/03/CDI_1.png" alt="CDI_1" width="609" height="173" /></a></p>
<p>&nbsp;</p>
<p>L&rsquo;injection n&rsquo;est plus l&rsquo;affaire d&rsquo;un spécialiste Spring. Elle est belle et bien démocratisée et facile d&rsquo;utilisation avec la JEE 6. Il serait dommage de s&rsquo;en priver n&rsquo;est-ce pas?</p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/cdi-context-dependency-injection-mise-en-route-partie-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Validation standard des beans : Validator</title>
		<link>https://cadjee.fr/validation-standard-des-beans-validator/</link>
		<comments>https://cadjee.fr/validation-standard-des-beans-validator/#comments</comments>
		<pubDate>Thu, 19 Feb 2015 13:24:33 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[validation]]></category>
		<category><![CDATA[Validator]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=32</guid>
		<description><![CDATA[La validation d&#8217;un bean (contrôle de surface, taille d&#8217;un champs, valeur obligatoire &#8230;etc) se fait bien souvent de façon manuelle dans une application.  La JSR 303 standardise ce concept de validation avec la notion de validator. Ca se passe ici : javax.validation.*.  Les dépendances Maven nécessaire:  &#160; Un bean Personne bien décoré L&#8217;écriture des annotations est très [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>La validation d&rsquo;un bean (contrôle de surface, taille d&rsquo;un champs, valeur obligatoire &#8230;etc) se fait bien souvent de façon manuelle dans une application.  <strong>La JSR 303 </strong>standardise ce concept de validation avec la notion de <span style="text-decoration: underline;">validator</span>.</p>
<p><span id="more-32"></span>Ca se passe ici :<strong> javax.validation.*. </strong></p>
<p><span style="text-decoration: underline;"><strong>Les dépendances Maven nécessaire: </strong></span></p>
<pre class="brush: java; title: ; notranslate">
&lt;dependency&gt;
   &lt;groupId&gt;javax.validation&lt;/groupId&gt;
   &lt;artifactId&gt;validation-api&lt;/artifactId&gt;
   &lt;version&gt;1.0.0.GA&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
  &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
  &lt;artifactId&gt;hibernate-validator-annotation-processor&lt;/artifactId&gt;
  &lt;version&gt;4.1.0.Final&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
  &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
  &lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;
  &lt;version&gt;1.5.6&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<p>&nbsp;</p>
<p><strong><span style="text-decoration: underline;">Un bean Personne bien décoré</span></strong></p>
<pre class="brush: java; title: ; notranslate"> 
public class Personne{

	@NotNull(message=&quot;le nom est obligatoire&quot;)
	@Size(max=10)
	private String nom;
	@AssertTrue(message=&quot;il faut etre beau&quot;)
	private boolean isBoGoss;
	@Min(value=18, message= &quot;Il faut avoir + de 18 ans&quot;)
	private int age;
	@Past
	private Date datenaissance;
	@Pattern(regexp=&quot;[0-9]{4}&quot;,message=&quot;code CB non valide desolé :-(&quot;)
	private String codeCB;
	
	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public boolean isBoGoss() {
		return isBoGoss;
	}

	public void setBoGoss(boolean isBoGoss) {
		this.isBoGoss = isBoGoss;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getDatenaissance() {
		return datenaissance;
	}

	public void setDatenaissance(Date datenaissance) {
		this.datenaissance = datenaissance;
	}

	public String getCodeCB() {
		return codeCB;
	}

	public void setCodeCB(String codeCB) {
		this.codeCB = codeCB;
	}

}

</pre>
<p>L&rsquo;écriture des annotations est très claire et intuitive. On peut également personnaliser le message en cas d&rsquo;erreur. L&rsquo;API se chargera donc de lire ces annotations et d&rsquo;appliquer la règle qu&rsquo;on lui aura spécifiée. Par exemple dans le cas de la date de naissance, l&rsquo;API vérifiera que la date du bean est antérieure à la date courante.</p>
<p><strong><span style="text-decoration: underline;">Validation du Bean</span></strong></p>
<pre class="brush: java; title: ; notranslate">
public static void main(String[] args) throws ParseException {

		Personne p = new Personne();
		p.setNom(&quot;CADJEE&quot;);
		p.setBoGoss(false);
		p.setAge(16);

		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(&quot;dd/MM/yyyy&quot;);
		String date=&quot;19/04/1984&quot;;
		p.setDatenaissance(simpleDateFormat.parse(date));
		p.setCodeCB(&quot;007&quot;);

		ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
		Validator validator = factory.getValidator();

		Set&lt;ConstraintViolation&lt;Personne&gt;&gt; constraintViolations =validator.validate(p);
		StringBuffer sbf = new StringBuffer();
		if (constraintViolations.size() &gt; 0) {
			 sbf.append(&quot;Paramètres invalides : &quot;);
			for (ConstraintViolation&lt;Personne&gt; contraintes : constraintViolations) {
				sbf.append(contraintes.getMessage()).append(&quot; - &quot;);

			}

		}else{
			sbf.append(&quot; tout est ok, circulez! &quot;);
		}

		System.out.println(sbf);
	}
</pre>
<p>La validation passe par l&rsquo;objet <strong>javax.validation.Validator</strong>. On récupère cette objet via la factory ValidatorFactory.  Le Validator stocke l&rsquo;ensemble des erreurs dans un Set. Libre à nous de gérer ces messages à notre guise (Exception,Warning&#8230;etc).<br />
Sachez qu&rsquo;il est également possible de créer notre propre contrainte et annotation de valisation. Je vous laisse découvrir tout cela dans l&rsquo;excellent article: <a title="http://www.jmdoudoux.fr/java/dej/chap-validation_donnees.htm" href="http://www.jmdoudoux.fr/java/dej/chap-validation_donnees.htm" target="_blank">La validation des données</a></p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/validation-standard-des-beans-validator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Réflexion &amp; Généricité:  instanciation d&#8217;un objet à visibilité privé</title>
		<link>https://cadjee.fr/reflexion-genericite/</link>
		<comments>https://cadjee.fr/reflexion-genericite/#comments</comments>
		<pubDate>Wed, 18 Feb 2015 14:39:05 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[reflect]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=26</guid>
		<description><![CDATA[Faisons un petit tour sur un sujet bien vaste la réflexion et la généricité. Je vous propose d&#8217;instancier un objet JAVA ayant un constructeur private sans utiliser le mot clé new. Prêt? Un bean Personne avec constructeur privé Pour instancier cet objet utilisons l&#8217;outillage java.lang.reflect.* le setAccessible(true) nous permet en quelque sorte de &#171;&#160;hacker&#160;&#187; cette [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Faisons un petit tour sur un sujet bien vaste la réflexion et la généricité. Je vous propose d&rsquo;instancier un objet JAVA ayant un constructeur private sans utiliser le mot clé <span style="color: #993366;"><strong>new</strong></span>.<br />
Prêt?</p>
<p><span id="more-26"></span></p>
<p><span style="text-decoration: underline;"><strong>Un bean Personne avec constructeur privé</strong></span></p>
<pre class="brush: java; title: ; notranslate">
public class Personne {
	private String nom;

	private Personne() {
	}

	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}
</pre>
<p>Pour instancier cet objet utilisons l&rsquo;outillage <strong>java.lang.reflect.*</strong></p>
<pre class="brush: java; title: ; notranslate">
public class Genericite {

	public static &lt;T&gt; T instanceObject(Class&lt;T&gt; clazz) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException{
		Constructor&lt;T&gt; defaultConstructor =  clazz.getDeclaredConstructor();
		defaultConstructor.setAccessible(true);
		T t = defaultConstructor.newInstance();
		return t;
	}
</pre>
<p>le setAccessible(true) nous permet en quelque sorte de &laquo;&nbsp;hacker&nbsp;&raquo; cette classe et changer la visibilité d&rsquo;un constructeur.</p>
<pre class="brush: java; title: ; notranslate">
	public static void main(String[] args) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
		Personne p = Genericite.instanceObject(Personne.class);
		p.setNom(&quot;Isma&quot;);
		System.out.println(p.getNom());
	}
</pre>
<p>Ce mécanisme est très utilisé dans les framework tel que <strong>Spring</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/reflexion-genericite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sélection en mode colonne avec Eclipse</title>
		<link>https://cadjee.fr/selection-en-mode-colonne-avec-eclipse/</link>
		<comments>https://cadjee.fr/selection-en-mode-colonne-avec-eclipse/#comments</comments>
		<pubDate>Sun, 01 Feb 2015 14:27:22 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=20</guid>
		<description><![CDATA[Ne vous est-il jamais arrivé d’avoir à modifier la visibilité des attributs d’une classe ? Et si cette classe comporte 100 attributs ? Aïe… Le réflexe de recourir au service de UtraEdit est une solution. Mais Eclipse offre déjà cette fonctionnalité bien pratique, alors pourquoi s’en priver ? Il suffit juste de passer en mode [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ne vous est-il jamais arrivé d’avoir à modifier la visibilité des attributs d’une classe ? Et si cette classe comporte 100 attributs ? Aïe…<span id="more-31"></span><br />
<span id="more-20"></span></p>
<p>Le réflexe de recourir au service de <em>UtraEdit</em> est une solution. Mais <em>Eclipse</em> offre déjà cette fonctionnalité bien pratique, alors pourquoi s’en priver ?</p>
<p>Il suffit juste de passer en mode <em>sélection par colonne</em> avec le raccourci magique suivant :<strong>Alt+Shift+A </strong>( même raccourci pour revenir en mode <em>sélection ligne</em>).</p>
<p>PS : ce raccourci n’est pas présent dans le fameux <strong>Crt+Shift+L </strong><img class="wp-smiley" src="http://ismael.comuv.com/wp-includes/images/smilies/icon_smile.gif" alt=":-)" /></p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/02/colonneSelect.jpg"><img class=" size-medium wp-image-21 aligncenter" src="http://cadjee.fr/wp-content/uploads/2015/02/colonneSelect-122x300.jpg" alt="colonneSelect" width="122" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/selection-en-mode-colonne-avec-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
