<?xml version="1.0" encoding="UTF-8"?><feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:thr="http://purl.org/syndication/thread/1.0"
  xml:lang="fr-FR"
  xml:base="https://blog.developpez.com/java_rest/wp-atom.php"
   >
	<title type="text">Robusta : Java &#38; RESTful Web Services</title>
	<subtitle type="text"></subtitle>

	<updated>2010-12-24T11:23:17Z</updated>

	<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest" />
	<id>https://blog.developpez.com/java_rest/feed/atom</id>
	<link rel="self" type="application/atom+xml" href="https://blog.developpez.com/java_rest/feed/atom" />

	<generator uri="https://wordpress.org/" version="4.1.42">WordPress</generator>
	<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[Restful Web Services au Toulouse JUG]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p9607/ajax/restful_web_services_au_toulouse_jug" />
		<id></id>
		<updated>2010-12-24T11:23:17Z</updated>
		<published>2010-12-24T11:20:22Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Ajax" />		<summary type="html"><![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.]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p9607/ajax/restful_web_services_au_toulouse_jug"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p9607/ajax/restful_web_services_au_toulouse_jug#comments" thr:count="0"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="0"/>
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[L&#8217;introspection en Javascript]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p9178/web-2-0/javascript/extjs/l_introspection_en_javascript" />
		<id></id>
		<updated>2010-08-04T12:55:39Z</updated>
		<published>2010-08-04T12:40:26Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="ExtJs" />		<summary type="html"><![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;]]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p9178/web-2-0/javascript/extjs/l_introspection_en_javascript"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p9178/web-2-0/javascript/extjs/l_introspection_en_javascript#comments" thr:count="0"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="0"/>
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[GWT n&#8217;est pas tout à fait du Java]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p7958/ajax/gwt_n_est_pas_tout_a_fait_du_java" />
		<id></id>
		<updated>2009-08-16T16:34:21Z</updated>
		<published>2009-08-16T16:34:21Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Ajax" /><category scheme="https://blog.developpez.com/java_rest" term="Java" /><category scheme="https://blog.developpez.com/java_rest" term="Web 2.0" />		<summary type="html"><![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;]]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p7958/ajax/gwt_n_est_pas_tout_a_fait_du_java"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p7958/ajax/gwt_n_est_pas_tout_a_fait_du_java#comments" thr:count="5"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="5"/>
		<thr:total>5</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[Google App Engine : De la grêle dans les nuages]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p7839/web-2-0/google_app_engine_de_la_grele_dans_les_n" />
		<id></id>
		<updated>2009-07-04T11:39:00Z</updated>
		<published>2009-07-03T21:06:11Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Java" /><category scheme="https://blog.developpez.com/java_rest" term="Web 2.0" />		<summary type="html"><![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;]]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p7839/web-2-0/google_app_engine_de_la_grele_dans_les_n"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p7839/web-2-0/google_app_engine_de_la_grele_dans_les_n#comments" thr:count="2"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="2"/>
		<thr:total>2</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[Robusta Web Toolkit : Un peu de Buzz pour REST &amp; Java]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p7757/restful/robusta_web_toolkit_un_peu_de_buzz_pour" />
		<id></id>
		<updated>2009-06-17T16:02:52Z</updated>
		<published>2009-06-17T10:07:09Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Java" /><category scheme="https://blog.developpez.com/java_rest" term="RESTful" />		<summary type="html"><![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;]]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p7757/restful/robusta_web_toolkit_un_peu_de_buzz_pour"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p7757/restful/robusta_web_toolkit_un_peu_de_buzz_pour#comments" thr:count="0"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="0"/>
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[Pool de connexion Mysql sur Glassfish : Victoire :)]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p7185/astuce-du-jour/pool_de_connexion_mysql_sur_glassfish_vi" />
		<id></id>
		<updated>2009-06-06T18:55:37Z</updated>
		<published>2009-02-06T11:28:47Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Astuce du Jour" /><category scheme="https://blog.developpez.com/java_rest" term="Java" />		<summary type="html"><![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;]]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p7185/astuce-du-jour/pool_de_connexion_mysql_sur_glassfish_vi"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p7185/astuce-du-jour/pool_de_connexion_mysql_sur_glassfish_vi#comments" thr:count="3"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="3"/>
		<thr:total>3</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[Screencast : Fabriquer des Composants Javabeans]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p6984/astuce-du-jour/screencast_fabriquer_des_composants_java" />
		<id></id>
		<updated>2008-12-20T14:37:02Z</updated>
		<published>2008-12-20T14:27:14Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Astuce du Jour" /><category scheme="https://blog.developpez.com/java_rest" term="Java" />		<summary type="html"><![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]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p6984/astuce-du-jour/screencast_fabriquer_des_composants_java"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p6984/astuce-du-jour/screencast_fabriquer_des_composants_java#comments" thr:count="3"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="3"/>
		<thr:total>3</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[Swing : Productivité boostée avec les composants Javabeans]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p6971/java/swing_productivite_boostee_avec_les_comp" />
		<id></id>
		<updated>2008-12-20T14:17:11Z</updated>
		<published>2008-12-19T08:51:08Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Java" />		<summary type="html"><![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;]]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p6971/java/swing_productivite_boostee_avec_les_comp"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p6971/java/swing_productivite_boostee_avec_les_comp#comments" thr:count="2"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="2"/>
		<thr:total>2</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[JDBC est-il plus rapide que JPA ?]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p6822/java/jdbc_est_il_plus_rapide_que_jpa" />
		<id></id>
		<updated>2008-11-24T06:14:07Z</updated>
		<published>2008-11-24T06:02:47Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Java" />		<summary type="html"><![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;]]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p6822/java/jdbc_est_il_plus_rapide_que_jpa"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p6822/java/jdbc_est_il_plus_rapide_que_jpa#comments" thr:count="6"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="6"/>
		<thr:total>6</thr:total>
	</entry>
		<entry>
		<author>
			<name>nicorama</name>
					</author>
		<title type="html"><![CDATA[Je pense que je vais m&#8217;arrêter là]]></title>
		<link rel="alternate" type="text/html" href="https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la" />
		<id></id>
		<updated>2008-11-11T16:20:55Z</updated>
		<published>2008-11-11T15:48:10Z</published>
		<category scheme="https://blog.developpez.com/java_rest" term="Java" /><category scheme="https://blog.developpez.com/java_rest" term="RESTful" /><category scheme="https://blog.developpez.com/java_rest" term="Web 2.0" />		<summary type="html"><![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;]]]></summary>
		<content type="html" xml:base="https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la"><![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>
			<link rel="replies" type="text/html" href="https://blog.developpez.com/java_rest/p6769/restful/je_pense_que_je_vais_m_arreter_la#comments" thr:count="2"/>
		<link rel="replies" type="application/atom+xml" href="" thr:count="2"/>
		<thr:total>2</thr:total>
	</entry>
	</feed>
