<?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>Robusta : Java &#38; RESTful Web Services</title>
	<atom:link href="https://blog.developpez.com/java_rest/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/java_rest</link>
	<description></description>
	<lastBuildDate>Fri, 24 Dec 2010 11:23:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Restful Web Services au Toulouse JUG</title>
		<link>https://blog.developpez.com/java_rest/p9607/ajax/restful_web_services_au_toulouse_jug</link>
		<comments>https://blog.developpez.com/java_rest/p9607/ajax/restful_web_services_au_toulouse_jug#comments</comments>
		<pubDate>Fri, 24 Dec 2010 11:20:22 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Ajax]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici le slidecast de ma présentation sur REST au Toulouse JUG. C&#8217;est un peu long, mais l&#8217;essentiel se trouve dans les 15 premières minutes. Enjoy.]]></description>
				<content:encoded><![CDATA[<p>Voici le <a href="http://www.slideshare.net/jugtoulouse/rest-nicolas-zozol-jug-toulouse-20100615">slidecast </a>de ma présentation sur REST au <a href="http://www.jugtoulouse.org/">Toulouse JUG</a>. C&rsquo;est un peu long, mais l&rsquo;essentiel se trouve dans les 15 premières minutes.</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#8217;introspection en Javascript</title>
		<link>https://blog.developpez.com/java_rest/p9178/web-2-0/javascript/extjs/l_introspection_en_javascript</link>
		<comments>https://blog.developpez.com/java_rest/p9178/web-2-0/javascript/extjs/l_introspection_en_javascript#comments</comments>
		<pubDate>Wed, 04 Aug 2010 12:40:26 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[ExtJs]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Petit article rapide pour donner un exemple d&#8217;introspection, c&#8217;est-à-dire la faculté de récupérer la valeur d&#8217;un attribut, ou d&#8217;exécuter une fonction en connaissant le nom de l&#8217;attribut ou de la fonction. Vite fait : alert(myObject['attributeName']); affiche la valeur de l&#8217;attribut attributeName de l&#8217;objet myObject. alert ( (myObject['functionName'])() ); affiche ce que renvoie la fonction functionName() de myObject. A quoi ca sert ? L&#8217;introspection est courante en Java lorsque l&#8217;on travaille sur les Annotations. En Groovy, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Petit article rapide pour donner un exemple d&rsquo;introspection, c&rsquo;est-à-dire la faculté de récupérer la valeur d&rsquo;un attribut, ou d&rsquo;exécuter une fonction en connaissant le nom de l&rsquo;attribut ou de la fonction.</p>
<h3>Vite fait : </h3>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">alert(myObject['attributeName']);</div></div>
<p>affiche la valeur de l&rsquo;attribut <strong>attributeName</strong> de l&rsquo;objet <strong>myObject</strong>.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">alert ( (myObject['functionName'])() );</div></div>
<p>affiche ce que renvoie la fonction <strong>functionName()</strong> de <strong>myObject</strong>.</p>
<h3>A quoi ca sert ?</h3>
<p>L&rsquo;introspection est courante en Java lorsque l&rsquo;on travaille sur les <a href="http://adiguba.developpez.com/tutoriels/java/tiger/annotations/#L4">Annotations</a>. En <a href="http://ericreboisson.developpez.com/tutoriel/java/groovy/">Groovy</a>, c&rsquo;est la base du <em>metaprogramming </em> et autre &lsquo;magie&rsquo; du langage.</p>
<p>En Javascript, je l&rsquo;utilise surtout pour créer des composants ExtJs :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/* Au passage, voici une façon de créer une Class en Javascript */ <br />
function ComboObject(id, name){ <br />
&nbsp; &nbsp; this.id=id; <br />
&nbsp; &nbsp; this.name=name; <br />
} <br />
&nbsp;<br />
/* Et d'ajouter dynamiquement une fonction */ <br />
ComboObject.prototype.toString = function(){ <br />
&nbsp; &nbsp; return this.name+&quot; (&quot;+this.id+&quot;); &quot;; <br />
}; <br />
&nbsp;<br />
&nbsp;<br />
var o1 = new ComboObject(1, &quot;Jo&quot;); <br />
var o2 = new ComboObject(2, &quot;Jo2&quot;); <br />
var o3 = new ComboObject(3, &quot;Jo3&quot;); <br />
var o4 = new ComboObject(4, &quot;Jo4&quot;); <br />
&nbsp;<br />
var array = [o1, o2, o3, o4]; <br />
&nbsp;<br />
new SimpleCombo( <br />
{ <br />
&nbsp; &nbsp; xtype : 'simple-combo', <br />
&nbsp; &nbsp; model : array, <br />
&nbsp; &nbsp; valueField: 'id', <br />
&nbsp; &nbsp; displayField: 'name' <br />
} <br />
);</div></div>
<p>La machinerie interne de mon SimpleCombo utilise assez simplement l&rsquo;introspection et l&rsquo;on peut déclarer &lsquo;à droite&rsquo; l&rsquo;attribut sur lequel on travail. Le combo affichera l&rsquo;attribut <strong>name </strong>et le formulaire enverra la valeur <strong>id</strong>. Si <strong>displayField </strong>n&rsquo;est pas renseigné, on peut alors exécuter la fonction <strong>toString()</strong>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT n&#8217;est pas tout à fait du Java</title>
		<link>https://blog.developpez.com/java_rest/p7958/ajax/gwt_n_est_pas_tout_a_fait_du_java</link>
		<comments>https://blog.developpez.com/java_rest/p7958/ajax/gwt_n_est_pas_tout_a_fait_du_java#comments</comments>
		<pubDate>Sun, 16 Aug 2009 16:34:21 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[GWT émule en effet certaines fonctionnalités de Java pour les traduire en Javascript dans l&#8217;environnement d&#8217;un navigateur web standard. Importez simplement une bibliothèque quelconque, comme JDOM, et vous aurez des messages d&#8217;erreurs en pagaye. Seule des bibliothèques spécialement conçues pourront être utilisées à la fois en GWT client et dans n&#8217;importe quelle JVM. A chaque fois que vous écrivez du code Java fonctionnant à la fois côté serveur et client, il faut garder en tête [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>GWT émule en effet certaines fonctionnalités de Java pour les traduire en Javascript <strong>dans l&rsquo;environnement</strong> d&rsquo;un navigateur web standard.<br />
Importez simplement une bibliothèque quelconque, comme JDOM, et vous aurez des messages d&rsquo;erreurs en pagaye. Seule des bibliothèques spécialement conçues pourront être utilisées à la fois en GWT client et dans n&rsquo;importe quelle JVM.<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/gwt/gwt-compatible.png" alt="GWT Compatible" title="" /><br />
<span id="more-26"></span></p>
<p>A chaque fois que vous écrivez du code Java fonctionnant à la fois côté serveur et client, il faut garder en tête de :</p>
<p>&#8211; GWT utilise directement les composants du navigateur : il utilise le DOM interne, ainsi que l&rsquo;objet XmlHttpRequest- et donc ne connait ni Sax, ni JDOM, si le java.net.HttpClient<br />
 &#8211; Ne pas utiliser de fonctions System : il n&rsquo;y a pas de compatibilité entre la JVM et le moteur du navigateur. java.util.Locale est incompatible avec GWT car est capable de lire une Locale par défaut dans le System de la JVM<br />
&#8211; Ne pas lire un fichier : il est très malheureusement impossible d&rsquo;utiliser les ResourceBundle pour internationaliser son code.<br />
&#8211; Ne pas se mêler des Charset : le fonctionnement est trop différent entre la JVM et le navigateur. Je ne suis pas spécialiste, mais concrètement, les fonctions de type public byte[] getBytes(&laquo;&nbsp;UTF-8&Prime;) ne fonctionneront pas. Cela rend les fonctions de types MD5 et base64 sont pour l&rsquo;instant incompatibles.<br />
&#8211; Vérifier <a href="http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html">la liste des fonctions émulées</a> : une fonction assez simple comme Class.getSimpleName() n&rsquo;est pas émulée.</p>
<p>Alors est-il possible d&rsquo;écrire une bibliothèque Java utilisable – et utile &#8211; côté client et serveur ? Oui, vous y arriverez en y passant suffisamment de temps et à la simple condition de maîtriser le concept de l&rsquo;interface. Vous pouvez aussi attendre Octobre et la sortie de <a href="http://www.robustaweb.com/library">Robusta Web Library</a> qui vous facilitera grandement la tâche.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google App Engine : De la grêle dans les nuages</title>
		<link>https://blog.developpez.com/java_rest/p7839/web-2-0/google_app_engine_de_la_grele_dans_les_n</link>
		<comments>https://blog.developpez.com/java_rest/p7839/web-2-0/google_app_engine_de_la_grele_dans_les_n#comments</comments>
		<pubDate>Fri, 03 Jul 2009 21:06:11 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Google App Engine est le système de Cloud Computing de Google. Par rapport à ses concurrents, il innove en quelques points : Aucune configuration du serveur ni de la base de donnée : on dépose son application dans un conteneur. Il n&#8217;y a pas à choisir dans une gamme de serveurs : les requêtes seront exécutées par Google, et on sait qu&#8217;ils le font bien La facturation est faite selon les coûts réels : si [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Google App Engine est le système de Cloud Computing de Google.  Par rapport à ses concurrents, il innove en quelques points :</p>
<ul>
<li>Aucune configuration du serveur ni de la base de donnée : on dépose son application dans un conteneur.</li>
<li>Il n&rsquo;y a pas à choisir dans une gamme de serveurs : les requêtes seront exécutées par Google, et on sait qu&rsquo;ils le font bien</li>
<li>La facturation est faite selon les coûts réels : si votre application fait un bide, vous ne payez rien</li>
<li>L&rsquo;application est développée en un seul langage : Python, ou Java depuis Mars</li>
</ul>
<p>Cette différentiation colle vraiment à l&rsquo;innovation. Un bon programmeur Java avec une idée peu créer son application sans perdre de temps à configurer linux+apache+ssl ni faire un prévisionnel des capacités de serveur. Avec <a href="http://www.edupassion.com">Edupassion.com</a>, je sais de quoi je parle. Et si personne ne se connecte, il n&rsquo;y a pas de coût de serveur inutile, et là aussi je sais&#8230; euh passons.</p>
<p>Malheureusement, concrètement, App Engine en Java ne marche pas.<br />
<span id="more-25"></span><br />
Il est très simple de créer une application HTML, avec Ajax et même GWT, puis de l&rsquo;uploader. C&rsquo;est ce que j&rsquo;ai fait pour le site de mon entreprise, <a href="http://www.robustaweb.com">Robusta Web</a>. Si le site en fonctionne pas, essayez&#8230; trois minutes plus tard ! D&rsquo;après le log, à cause d&rsquo;une jsp déclanchant com.google.apphosting.api.DeadlineExceededException et java.security.PrivilegedActionException. Il semble que la <strong>security</strong> passe ou bloque de temps à autre. Etonnnant !</p>
<p>J&rsquo;ai tout de suite essayé d&rsquo;installer JAX-RS avec Jersey, mais non, pas possible, le container refuse. On propose une version adaptée, qui marche un peu, mais bloque aléatoirement l&rsquo;accès au site &#8211; cette fois-ci avec une vraie exception. Normal, c&rsquo;est du bidouillage.</p>
<p>Plus gênant est l&rsquo;utilisation des JSP et son mapping. http://www.robustaweb.com/myjax/bond/ fonctionne, mais pas http://www.robustaweb.com/myjax/bond . Différence subtile, pas contraire aux <a href="http://jcp.org/aboutJava/communityprocess/final/jsr245/index.html">spécifications assez muettes</a>, mais juste incroyable.</p>
<p>Mais le grand problème est l&rsquo;accès aux données. D&rsquo;une part à cause des couches successives JPA->JDO->Implementation Google->DataNucleus->BigTable, comme l&rsquo;avait déjà fait remarqué <a href="http://www.dotnetguru2.org/bmarchesson/index.php?p=1045&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1">Bruno Marchesson</a>. Pour faire court, quoi que vous tentiez, cela échouera :).</p>
<p>J&rsquo;ai quand même réussi à &laquo;&nbsp;persister&nbsp;&raquo; quelques objets, et même à les lire. Mais s&rsquo;il existe peut-être des logiciels permettant de visualiser ces données, aucun n&rsquo;est clairement référencé. Alors qu&rsquo;avec une table MySql, vous n&rsquo;avez aucun problème à savoir ce que vos tests ont générés.</p>
<p>Pour l&rsquo;instant App Engine me parait donc inutilisable dès qu&rsquo;il s&rsquo;agit de sauver des données. Il semble dangereux d&rsquo;y mettre un simple site avec des JSP. Quelques pages HTML peut-être&#8230;.</p>
<p>Mais n&rsquo;oublions pas que App Engine est en Early Access, et <strong>je suis plutôt optimiste</strong> : Google developpe très bien ses produits quand ils trouvent un public en face. J&rsquo;y retournerai dans six mois.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Robusta Web Toolkit : Un peu de Buzz pour REST &amp; Java</title>
		<link>https://blog.developpez.com/java_rest/p7757/restful/robusta_web_toolkit_un_peu_de_buzz_pour</link>
		<comments>https://blog.developpez.com/java_rest/p7757/restful/robusta_web_toolkit_un_peu_de_buzz_pour#comments</comments>
		<pubDate>Wed, 17 Jun 2009 10:07:09 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RESTful]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je finis cette semaine une première version public de Robusta Web Toolkit (RWT). Cette bibliothèque s&#8217;est construite au fil des trois dernières années lors de la construction d&#8217;Edupassion.com. Depuis un peu plus d&#8217;un an, l&#8217;architecture d&#8217;Edupassion est passée RESTful et j&#8217;ai décidé d&#8217;épurer la biblitohèque afin de fournir un ensemble d&#8217;outils légers et cohérents facilitant les usages fréquents lors d&#8217;un processus REST. Simplicité et Productivités sont (en principe ) les maîtres mots. Le premier tutoriel [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Je finis cette semaine une première version public de <a href="http://www.robustaweb.com">Robusta Web Toolkit</a> (RWT). Cette bibliothèque s&rsquo;est construite au fil des trois dernières années lors de la construction d&rsquo;<a href="http://www.edupassion.com">Edupassion.com</a>.</p>
<p>Depuis un peu plus d&rsquo;un an, l&rsquo;architecture d&rsquo;Edupassion est passée RESTful et j&rsquo;ai décidé d&rsquo;épurer la biblitohèque afin de fournir <strong>un ensemble d&rsquo;outils légers et cohérents facilitant les usages fréquents lors d&rsquo;un processus REST</strong>. Simplicité et Productivités sont (en principe <img src="https://blog.developpez.com/java_rest/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> ) les maîtres mots.</p>
<p>Le <a href="http://nicolas-zozol.developpez.com/tutoriels/java/robusta-web-toolkit/">premier tutoriel</a> est en cours d&rsquo;écriture, et RWT est téléchargeable <strong>dans une version qui évoluera encore</strong> un peu, l&rsquo;essentiel du travail restant étant d&rsquo;écrire une documentation convenable.</p>
<p>Vous pouvez toutefois vous amuser avec :</p>
<ul>
<li><a href="http://robustaweb.com/toolkit/javadoc/robusta/xml/VerySimpleXml.html">VerySimpleXml </a>pour SAX (RwtSax) ou JDOM (RwtJdom)</li>
<li>Les classes utilitaires <a href="http://robustaweb.com/toolkit/javadoc/robusta/commons/util/Couple.html">Couple </a>et <a href="http://robustaweb.com/toolkit/javadoc/robusta/commons/util/CoupleList.html">CoupleList</a></li>
<li>Des <a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/RestfulClient.html">Clients Http</a> simplifié et spécialisés, à partir du Client Sun (<a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/implementations/RwtSunClient.html">RwtSunClient</a>, idéal pour les applets) ou  du client Apache (<a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/implementations/RwtApacheClient.html">RwtApacheClient</a>)</li>
<li>Un <a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/ResourceController.html">ResourceController </a>pour JAX-RS (<a href="http://robustaweb.com/toolkit/javadoc/robusta/rest/implementations/JaxRsResourceController.html">JaxRsResourceController</a>)</li>
</ul>
<p>La version 0.9 stable et quasi définitive sera disponible au plus tard la semaine prochaine. En espérant des commentaires et peut-être quelques add-on de la communauté pour une version 1.0 en Septembre.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pool de connexion Mysql sur Glassfish : Victoire :)</title>
		<link>https://blog.developpez.com/java_rest/p7185/astuce-du-jour/pool_de_connexion_mysql_sur_glassfish_vi</link>
		<comments>https://blog.developpez.com/java_rest/p7185/astuce-du-jour/pool_de_connexion_mysql_sur_glassfish_vi#comments</comments>
		<pubDate>Fri, 06 Feb 2009 11:28:47 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Astuce du Jour]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Mais que ce fût dur ! J&#8217;avais déjà fait une vidéo sur la création d&#8217;un pool de connexion MySQL sur Glassfish. Malheureusement, lors de la pratique en test réel avec une application web et des alpha-testeurs, plus rien ne fonctionnait au bout de quelques heures : &#171;&#160;Impossible to resize Pool&#160;&#187; x 500 dans mes logs. Créer plus de Connexions possibles n&#8217;a pas servi à grand chose (j&#8217;ai testé avec 256 au lieu de 16 :)) [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Mais que ce fût dur !</p>
<p>J&rsquo;avais déjà fait une <a href="http://www.dailymotion.com/robusta-web/video/x7m8d5_jpasurglassfish_tech">vidéo</a> sur la création d&rsquo;un pool de connexion MySQL sur Glassfish. Malheureusement, lors de la pratique en test réel avec une application web et des alpha-testeurs, plus rien ne fonctionnait au bout de quelques heures : &laquo;&nbsp;Impossible to resize Pool&nbsp;&raquo; x 500 dans mes logs.</p>
<p><img src="http://nicolas-zozol.developpez.com/blog/images/mysql-glassfish/video%20robusta.png" alt="Video Robusta Web Glassfish et Mysql" title="Créer un Pool de Connexion avec Glassfish &amp; Mysql" /></p>
<p><span id="more-24"></span></p>
<p>Créer plus de Connexions possibles n&rsquo;a pas servi à grand chose (j&rsquo;ai testé avec 256 au lieu de 16 :)) ). Par contre j&rsquo;ai voulu pingé le pool grâce à l&rsquo;interface de Glassfish. Lorsqu&rsquo;aucune application n&rsquo;est déployé, le pool ne ping pas puisque le .jar de Mysql n&rsquo;est pas installé par défaut.</p>
<p>J&rsquo;ai donc : </p>
<ul>
<li>Copié mon Mysql Connector/J dans /usr/share/glassfish/lib</li>
<li>Précisé le .jar dans le Classpath de la JVM du serveur</li>
<li> Ajouté tant qu&rsquo;à faire de la mémoire : c&rsquo;est un serveur java !</li>
</ul>
<p><img src="http://nicolas-zozol.developpez.com/blog/images/mysql-glassfish/classpath.png" alt="classpath pour driver MySQL sur Glassfish" title="Classpath de Mysql pour Glassfish" /></p>
<p><img src="http://nicolas-zozol.developpez.com/blog/images/mysql-glassfish/xmms.png" alt="Memory de Glassfish" title="Memory de Glassfish" /></p>
<p>D&rsquo;une part je ping, et de plus je peux maintenant bombarder mon serveur de requêtes. J&rsquo;en déduis peut-être à tort qu&rsquo;utiliser le mysql.jar dans le /lib de son .war ne tient pas très bien la route.</p>
<p><img src="http://nicolas-zozol.developpez.com/blog/images/mysql-glassfish/ping.png" alt="ping on Glassfish Connection Pool" title="" /></p>
<p>Le serveur encaisse bien son millier de requêtes, et pour l&rsquo;instant, je n&rsquo;ai pas d&rsquo;avertissements d&rsquo;OVH <img src="http://www.developpez.net/forums/images/smilies/yaisse.gif" alt="" title="" />.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Screencast : Fabriquer des Composants Javabeans</title>
		<link>https://blog.developpez.com/java_rest/p6984/astuce-du-jour/screencast_fabriquer_des_composants_java</link>
		<comments>https://blog.developpez.com/java_rest/p6984/astuce-du-jour/screencast_fabriquer_des_composants_java#comments</comments>
		<pubDate>Sat, 20 Dec 2008 14:27:14 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Astuce du Jour]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bonjour, Voici deux vidéos-tutoriels permettant de fabriquer des composants Javabeans de façon simple, rapide et avec du code propre grâce à Netbeans &#8211; I) Beans Binding : Synchroniser la valeurs d&#8217;une propriété avec celle d&#8217;un formulaire &#8211; II) Programmation par Events : Réduire les combinaisons if/else avec une programmation modulaire, pilotée par les Events customizés. Deux vidéos devraient arriver après les fêtes. Les articles pour Dev.com&#8230;. en avril]]></description>
				<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Voici deux vidéos-tutoriels permettant de fabriquer des composants Javabeans de façon simple, rapide et avec du <strong>code propre</strong> grâce à Netbeans</p>
<p> &#8211; <a href="http://www.dailymotion.com/robusta-web/video/x7r7cr_javabean-part-i-beansbinding-avec-n_tech">I) Beans Binding</a> : Synchroniser la valeurs d&rsquo;une propriété avec celle d&rsquo;un formulaire<br />
 &#8211; <a href="http://www.dailymotion.com/robusta-web/video/x7r8mk_javabeansevents_tech">II) Programmation par Events</a> : Réduire les combinaisons if/else avec une programmation modulaire, pilotée par les Events customizés.</p>
<p><a href="http://www.dailymotion.com/robusta-web/video/x7r7cr_javabean-part-i-beansbinding-avec-n_tech"><img src="http://nicolas-zozol.developpez.com/images/capture_screencast.png" alt="Composant Javabeans" title="Design d'un Composan Javabean" /></a></p>
<p>Deux vidéos devraient arriver après les fêtes. Les articles pour Dev.com&#8230;. en avril <img src="https://blog.developpez.com/java_rest/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Swing : Productivité boostée avec les composants Javabeans</title>
		<link>https://blog.developpez.com/java_rest/p6971/java/swing_productivite_boostee_avec_les_comp</link>
		<comments>https://blog.developpez.com/java_rest/p6971/java/swing_productivite_boostee_avec_les_comp#comments</comments>
		<pubDate>Fri, 19 Dec 2008 08:51:08 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Il y a peu, un Javabean était pour une simple classe avec un constructeur sans arguments et des getters/setters. Cela fait 18 mois que je travaille côté serveur et je viens juste de me remettre à mon applet Swing. Coté Client, les Javabeans peuvent être utilisé par Netbeans pour créer des composants structurés pouvant interagir avec d&#8217;autres composants ou votre JPanel via des Events. Concrètement, c&#8217;est un élément supplémentaire de votre Palette, comme un JComboBox [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Il y a peu, un Javabean était pour une simple classe avec un constructeur sans arguments et des getters/setters. Cela fait 18 mois que je travaille côté serveur et je viens juste de me remettre à mon applet Swing.</p>
<p>Coté Client, les Javabeans peuvent être utilisé par Netbeans pour créer des composants structurés pouvant interagir avec d&rsquo;autres composants ou votre JPanel via des Events. Concrètement, c&rsquo;est un élément supplémentaire de votre Palette, comme un JComboBox ou une JTable.</p>
<p><a href = "http://nicolas-zozol.developpez.com/images/composants.png"><img src="http://nicolas-zozol.developpez.com/images/composants.png" alt="Composants Javabeans" title="Composants Javabeans" width="694px" height="320px"/></a><br />
<span id="more-22"></span></p>
<p>Il est possible de définir soi-même les Events agissant sur votre objet. Ainsi, au lieu de gérer 25 composants Swings standards (JButton, JLabel, JCombo) sur un seul Panel, vous aurez 5 Javabeans avec 5 chacun composants Swing interagissants avec des Events.</p>
<p>Le Javabeans va modifier son comportement selon les données entrantes (myJavabean.setTeacher() ) ou les Events. J&rsquo;ai ainsi considérablement limité le nombre de if/else, mais en augmentant par contre le nombre de Classes. Selon l&rsquo;auteur de XP, il faut limiter le nombre de Classes, mais ici je considère un package comme étant une Classe.</p>
<p>Au final, il y a beaucoup moins de bugs et j&rsquo;ai refait en une semaine ce qui m&rsquo;avait pris &#8211; je débutais &#8211; plusieurs mois !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JDBC est-il plus rapide que JPA ?</title>
		<link>https://blog.developpez.com/java_rest/p6822/java/jdbc_est_il_plus_rapide_que_jpa</link>
		<comments>https://blog.developpez.com/java_rest/p6822/java/jdbc_est_il_plus_rapide_que_jpa#comments</comments>
		<pubDate>Mon, 24 Nov 2008 06:02:47 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[En ce moment, je réécris totalement le code serveur du site Edupassion.com. Et après avoir découvert JPA il y a seulement quelques semaines, je suis maintenant sûr que la plupart des accès à la base de données d&#8217;Edupassion seront fait en JPA : plus simple à maintenir. Cependant certaines requêtes seront très fréquemment utilisées par les utilisateurs : l&#8217;accès aux tokens d&#8217;authentification, et l&#8217;accès aux notes pour les profs et élèves. Il me parait donc [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>En ce moment, je réécris totalement le code serveur du site <a href="http://www.edupassion.com">Edupassion.com</a>. Et après avoir découvert JPA il y a seulement quelques semaines, je suis maintenant sûr que la plupart des accès à la base de données d&rsquo;Edupassion seront fait en JPA : plus simple à maintenir.</p>
<p>Cependant certaines requêtes seront très fréquemment utilisées par les utilisateurs : l&rsquo;accès aux tokens d&rsquo;authentification, et l&rsquo;accès aux notes pour les profs et élèves. Il me parait donc logique de faire du JDBC pour optimiser ces deux-trois cas d&rsquo;utilisation. Mais JDBC est-il vraiment plus rapide ? <strong>JPA vs JDBC</strong> : voici ce que j&rsquo;ai trouvé sur <a href="http://forums.java.net/jive/message.jspa?messageID=286141">java.net</a> :</p>
<p><span id="more-21"></span></p>
<p>L&rsquo;architecture est plus importante que la technologie :</p>
<p>[QUOTE]<br />
<em>The performance is completely<br />
dependent on what you want to achieve and what actual providers you are<br />
using. <strong>You should decide for a technology on a design or architecture<br />
level</strong>. If you really want to decide on a performance level, you have not<br />
understood what both are good for. Both are neither competitive, nor<br />
comparable.</em><br />
[/QUOTE]</p>
<p>A première vue, cela ne m&rsquo;apporte rien. Un visiteur passe donc apporter la contradiction : puisque JPA est basé sur JDBC, un excellent programmeur serait capable de faire toujours mieux avec JDBC qu&rsquo;avec JPA. Encore faudrait-il qu&rsquo;un bon développeur existe &#8211; cela me rappelle Lex&amp;Yacc &#8230;</p>
<p>[QUOTE]<br />
<em>With JPA vs JDBC, this is exactly the same. JDBC is the building block upon which JPA is built. <strong>JPA (as a result of standing on the<br />
shoulders of JDBC) can never be faster than _properly tuned_ raw JDBC</strong>.<br />
However, the JDBC code that most developers will write is going to be<br />
slower than JPA 99% of the time&#8230;</em><br />
[/QUOTE]</p>
<p>La réponse qui tue : JPA et JDBC n&rsquo;ont pas le cache au même endroit (?!).</p>
<p>[QUOTE]<br />
<em>the <strong>JPA cache is on the client side, while the JDBC / DBMS cache is on the server side.</strong> Assuming a JDBC-based JPA implementation, you will benefit from this double buffering (if you have luck, the object is in the client side JPA cache; if you have not so good luck, it is found in the server side JDBC / DBMS cache; if you have bad luck, you must go down to the hard disc). If you do JDBC on the client side, then there is no client cache (unless your particular driver vendor implemented one directly in the client side driver). <strong>So, a JPA query will return client side cached objects, while a JDBC query must forward the server side cached data over the LAN.</strong> In sum, you have far more LAN transport with JDBC than with JPA. Unless you have client and server on the same machine, what is untypical in Client-/Server computing</em><br />
[/QUOTE]</p>
<p>Pour ce que j&rsquo;arrive à traduire et surtout comprendre, plus la quantité de données échangées entre JPA/JDBC et le serveur MySQL est importante à chaque requête, plus il est préférable de s&rsquo;orienter vers JPA. Pour récupérer un token, ce serait JDBC, alors que pour récupérer un ensemble de notes dispersées entre plusieurs classes, groupes et périodes, ce serait JPA.</p>
<p>Ce dernier point me fait dire que si je veux faire du benchmarking, il n&rsquo;aurait pas grand sens. A court terme, ma base de données est évidemment sur le même serveur, mais si j&rsquo;ai un peu de succès, ca ne sera plus le cas.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Je pense que je vais m&#8217;arrêter là</title>
		<link>https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la</link>
		<comments>https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la#comments</comments>
		<pubDate>Tue, 11 Nov 2008 15:48:10 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[RESTful]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[JPA (Java Persistence API) sera sans doute le dernier de mes joujoux technologiques pour bâtir l&#8217;architecture de la plateforme pédagogique Edupassion.com. Tout cela fait beaucoup de technologies pour un seul homme. Ext-JS risque d&#8217;être le point faible&#8230; et le plus visible. Le projet est donc séparé en 6 modules : Code Browser : HTML reçu par la front view, Ajax vers le web service Front view (Module Edupassion) : Distribution du HTML, redirection au Web [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>JPA (Java Persistence API) sera sans doute le dernier de mes joujoux technologiques pour bâtir l&rsquo;architecture de la plateforme pédagogique <a href="http://www.edupassion.com">Edupassion.com</a>.<br />
<img src="http://nicolas-zozol.developpez.com/blog/images/technos/diagramme.gif" alt="technologies web" title="" /><br />
Tout cela fait beaucoup de technologies pour un seul homme. Ext-JS risque d&rsquo;être le point faible&#8230; et le plus visible.<br />
<span id="more-14"></span><br />
Le projet est donc séparé en 6 modules :
<ul>
<li><strong>Code Browser</strong> : HTML reçu par la front view, Ajax vers le web service</li>
<li><strong>Front view</strong> (Module Edupassion) : Distribution du HTML, redirection au Web Service</li>
<li><strong>Web Service</strong> (module wsedupassion) : http -> JSP -> Javabean -> validation -> accès données -> analyse -> résultat xml</li>
<li><strong>Code métier</strong> (module e-library) : contient les classes School, Teacher, Student, Work, etc.</li>
<li><strong>Accès données</strong> (module JPA+Crud) : Les classes Entities sont générées par Netbeans 6.5. Le Crud convertit ces entities en classes métiers de e-library.</li>
<li><strong>La base de donnée</strong> : On y accède soit par les entities, soit par des requêtes JPA, et parfois par des requêtes jdbc.</li>
</ul>
<p>
<strong>JPA</strong><br />
La seule originalité est la séparation franche entre les Entities issues de la Bdd et les classes métiers qui en sont presque des clones. Mais pour moi il est hors de question de rajouter la moindre ligne au milieu d&rsquo;un code remplit d&rsquo;annotation et de requêtes à mon avis difficile à maintenir.</p>
<p>J&rsquo;apprécie cependant énormément de faire un Crud via ces Entities plutôt que par JDBC. La maintenance est plus simple, puisque, par exemple, en renommant une colonne de ma BDD, Netbeans génèrera des classes différentes et fera remarquer une erreur dans le code de mon CRUD. Cela est impossible avec du JDBC pur.
</p>
<p><strong>REST</strong><br />
L&rsquo;accès aux web service se fait par REST, via des requêtes GET, POST, PUT et DELETE. Il a fallut pour cela modifier le fichier de Prototype, ce qui n&rsquo;est pas très difficile. Un Web Service RESTFul permet principalement une montée en charge du projet sereine, sans modifier le code source.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
