<?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>Marwan KHELIF &#187; RIA</title>
	<atom:link href="http://www.mkhelif.fr/category/ria/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mkhelif.fr</link>
	<description>Le blog d&#039;un développeur</description>
	<lastBuildDate>Sun, 25 Jul 2010 21:30:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>GWT 2.0 : les nouvelles fonctionnalités</title>
		<link>http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html</link>
		<comments>http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html#comments</comments>
		<pubDate>Thu, 14 Jan 2010 12:05:54 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/?p=458</guid>
		<description><![CDATA[La version 2.0 de GWT (Google Web Toolkit) est sortie (j’ai un peu de retard à cause du boulot  ) et avec elle de nombreuses améliorations, principalement pour améliorer le développement des applications. Cette nouvelle version est accompagnée d’un outil d’analyse des performances des sites : Speed Tracer, qui donne des pistes d’amélioration de [...]]]></description>
			<content:encoded><![CDATA[<p>La version 2.0 de GWT (<a href="http://www.mkhelif.fr/2008/07/03/gwt-introduction-au-framework.html">Google Web Toolkit</a>) est sortie (j’ai un peu de retard à cause du boulot <img src='http://www.mkhelif.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) et avec elle de nombreuses améliorations, principalement pour améliorer le développement des applications. Cette nouvelle version est accompagnée d’un outil d’analyse des performances des sites : <em>Speed Tracer</em>, qui donne des pistes d’amélioration de l’application.</p>
<h3>Development Mode</h3>
<p>Dans les versions précédentes de GWT, pour tester une application en cours de développement, il y avait le Hosted Mode. C’est une application que l’on lançait depuis son IDE, qui démarrait un serveur Tomcat et qui permettait de tester “rapidement” sont application Web.</p>
<p>En GWT 2.0 le Hosted Mode est remplacé par le In-Browser Development Mode. On installe un plugin (le GWT Developer Plugin) dans son navigateur pour lui permettre de communiquer avec la JVM. Cela permet de bénéficier des différents plugins de son navigateur (Firebug, …) tout en permettant de modifier le code Java en live en rafraichissant la page Web.</p>
<h3>UI Binder</h3>
<p>Un des problèmes majeurs de GWT dans ses versions précédentes est la gestion de l’interface graphique depuis le code Java. La manipulation des Widgets (composants graphiques dans GWT) depuis le code Java pour leurs appliquer des styles CSS ou gérer des événements finit par donner du code difficile à maintenir.</p>
<p>GWT 2.0 apporte une solution plutôt élégante avec l’UI Binder, ça permet de lier un template XML à une classe Java. Au passage, les fichiers CSS et JavaScripts (librairies externes) référençaient depuis le template sont compressées par le compilateur GWT afin d’en réduire la taille finale.</p>
<p>Ainsi, on sépare l’interface graphique (dans les template <em>.ui.xml</em>) et la logique de l’application dans le code Java. </p>
<h3>Code Splitting</h3>
<p>Voilà une fonctionnalité attendue par beaucoup de développeurs GWT. Lorsque l’on développe une application GWT, on se rend vite compte que le fichier JavaScript généré prend vite du poids. Cette fonctionnalité découpe l’application en plusieurs fichiers JavaScript qui seront chargés uniquement lorsque c’est nécessaire en rajoutant quelques lignes de codes. </p>
<h3>Layout par contraintes</h3>
<p>Beaucoup d’applications Web qui se basent sur JavaScript utilisent des widgets qui sont positionnées dans la page grâce à des calculs qui peuvent ralentir l’affichage de l’application.</p>
<p>À l’inverse, GWT 2.0 génère le rendu final en utilisant le CSS de la page, celui-ci est généré à la compilation et non plus pendant l’affichage de la page ce qui réduit considérablement le temps de chargement.&#160; </p>
<h3>ClientBundle</h3>
<p>Je présentais dans mon billet : <a href="http://www.mkhelif.fr/2009/10/20/guide-doptimisation-de-vos-applications-web.html">Guide d’optimisation de vos applications Web</a> une méthode pour réduire le temps de chargement d’une page en utilisant des images sprites.</p>
<p>GWT est capable depuis la version 1.4 de faire tout cela automatiquement grâce aux ImageBundle. Toutes les images référencées sur disque étaient réunies en une seule est GWT utilisé la technique des sprites pour afficher les images convenablement. Avec GWT 1.5/1.6, un projet de l’incubateur permettait de faire la même chose avec à peu près n’importe quels fichiers.</p>
<p>GWT 2.0 introduit cette notion avec les ClientBundle. Par exemple, vous pouvez références tous vos fichiers CSS, GWT va alors les regrouper en un seul fichier, le minimiser et le rendre disponible pour être mis en cache. GWT gère aussi l’internationalisation ainsi vous pouvez gérer vos ClientBundle pour chaque locale.</p>
<h3>Speed Tracer</h3>
<p>Cette nouvelle version sort avec une extension pour Google Chrome : Speed Tracer. Cette extension analyse l’exécution de l’application Web en cours. Plutôt que de longues explications, voilà la vidéo de présentation de Speed Tracer.</p>
<p align="center"><em>Présentation de Speed Tracer</em></p>
<p align="center"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Sn_3rJaexKc&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param> <embed src="http://www.youtube.com/v/Sn_3rJaexKc&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object></p>
<h3>Story of Your Compile</h3>
<p>SOYC fournit de nombreux détails sur la compilation de chaque partie de l’application GWT : la taille, les dépendances, temps de compilation… Cela permet d’orienter ses efforts pour diviser le code grâce Code Splitting</p>
<h3>Traces dans IE 6</h3>
<p>Internet Explorer ne fournit pas les traces lorsqu’une exception JavaScript est levée, ce qui peut être très embêtant lors d’une phase de debug sur ce navigateur…</p>
<p>Avec GWT 2.0 vous obtenez maintenant la trace obfusquée (ou non en fonction de la compilation choisie) JavaScript qui peut être convertie en trace Java avec nom de classe et numéro de ligne.</p>
<h3>Conclusion</h3>
<p>Ce billet ne présente que les améliorations les plus importantes, mais il y à de très nombreuses évolutions : optimisation du compilateur, évaluation directe des réponses RPC (réduction du temps de déserialisation), propriété de deffered binding conditionnelles, …</p>
<p>GWT devient de plus en plus un framework “productif” : la plupart des problèmes qu’un développeur rencontre lors du développement d’une application Web qui utilise JavaScript, sont résolus très simplement.</p>
<p>Pensez-vous que cette version 2.0 de GWT va permettre au framework de gagner des parts de marché face à ses concurrents comme Flex?</p>
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html" title="Google : GWT version 1.6 et consorts">Google : GWT version 1.6 et consorts</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html" title="Première utilisation du plugin Eclipse GWT">Première utilisation du plugin Eclipse GWT</a></li>
<li><a href="http://www.mkhelif.fr/2009/09/07/ruby-on-rails-dployer-une-application-sur-tomcat-avec-jruby.html" title="Ruby on Rails : d&eacute;ployer une application sur Tomcat avec JRuby">Ruby on Rails : d&eacute;ployer une application sur Tomcat avec JRuby</a></li>
<li><a href="http://www.mkhelif.fr/2009/08/21/tests-en-charge-dec2-gae-et-azure.html" title="Tests en charge d&rsquo;EC2, GAE et Azure">Tests en charge d&rsquo;EC2, GAE et Azure</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/11/gwt-16-quoi-de-neuf.html" title="GWT 1.6 : quoi de neuf ?">GWT 1.6 : quoi de neuf ?</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" title="GWT : le futur hosted mode">GWT : le futur hosted mode</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Première utilisation du plugin Eclipse GWT</title>
		<link>http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html</link>
		<comments>http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html#comments</comments>
		<pubDate>Fri, 10 Apr 2009 15:30:35 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html</guid>
		<description><![CDATA[Suite à mon premier billet qui présentait Google Web Toolkit, je vais maintenant vous présenter la nouvelle version de GWT et comment créer un premier projet en utilisant le plugin Eclipse.
Mise en place de l&#8217;environnement de développement
Pour commencer à développer une application GWT et/ou GAE (Google App Engine), il faut télécharger la dernière version de [...]]]></description>
			<content:encoded><![CDATA[<p>Suite à mon premier billet qui présentait <a href="http://www.mkhelif.fr/2008/07/03/gwt-introduction-au-framework.html" target="_blank">Google Web Toolkit</a>, je vais maintenant vous présenter la nouvelle version de GWT et comment créer un premier projet en utilisant le plugin Eclipse.<span id="more-246"></span></p>
<h2>Mise en place de l&#8217;environnement de développement</h2>
<p>Pour commencer à développer une application GWT et/ou GAE (Google App Engine), il faut <a href="http://www.eclipse.org/downloads/" target="_blank">télécharger la dernière version de Eclipse</a>.</p>
<p>Une fois Eclipse installé et démarré, il faut installer le plugin GWT/GAE de Google. Pour cela allez dans le menu &laquo;&nbsp;<em>Help / Software updates&#8230;</em>&laquo;&nbsp;. Allez dans l&#8217;onglet &laquo;&nbsp;<em>Available Software</em>&nbsp;&raquo; et ajouter un nouveau site (&nbsp;&raquo;<em>Add site&#8230;&nbsp;&raquo;</em>) et entrez l&#8217;URL : http://dl.google.com/eclipse/plugin/3.4.</p>
<p>Sélectionnez alors les éléments <strong>Plugin</strong> et <strong>SDKs</strong>, puis cliquez sur &laquo;&nbsp;<em>Install</em>&laquo;&nbsp;. Une fois l&#8217;installation terminée, vous devez redémarrer Eclipse. Là une nouvelle barre d&#8217;outils est apparue :</p>
<p align="center"><a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-toolbar.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-toolbar-thumb.png" border="0" alt="gwt-toolbar" width="104" height="37" /></a></p>
<p>Le premier bouton sert à créer une nouvelle application Web GWT/GAE, le second à compiler une projet GWT et le troisième à déployer une application GAE dans le cloud Google.</p>
<p>Voilà votre environnement de développement est prêt à être utiliser.</p>
<h2>Création de mon premier projet</h2>
<p>Pour créer un nouveau projet cliquez sur le bouton <a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-button-new.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-button-new-thumb.png" border="0" alt="gwt-button-new" width="16" height="16" /></a>. Cela va démarrer l&#8217;assistant de création de projet :</p>
<p align="center"><a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-new-project.png"></a><a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-new-project1.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-new-project-thumb.png" border="0" alt="gwt-new-project" width="442" height="569" /></a></p>
<p>Les principaux champs à renseigner sont le nom du projet : <strong>GWTDemo</strong>, et le package racine de l&#8217;application : <strong>fr.mkhelif.gwt.demo</strong>. Pour l&#8217;exemple je n&#8217;ai sélectionné que GWT, je ferais un autre billet sur GAE.</p>
<h2>Structure du projet</h2>
<p>Une fois le projet créé, voilà la structure que l&#8217;on obtient :</p>
<p align="center"><a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-structure.png"></a><a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-structure1.png"></a><a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-structure2.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-structure-thumb.png" border="0" alt="gwt-structure" width="362" height="319" /></a></p>
<p>On voit donc un nouveau dossier <strong>war</strong>, c&#8217;est celui-ci qui représente l&#8217;archive WAR qui sera exportée/déployée. Lors de la compilation du projet, les fichiers seront créés dans un sous-dossier de celui-là. Le répertoire <strong>lib</strong> du <strong>WEB-INF</strong> contient la librairie nécessaire au fonctionnement des service GWT-RPC sur le serveur.</p>
<p>On peut voir que le dossier <strong>public</strong> du package par défaut à disparu. Maintenant, toutes les ressources (images, css, &#8230;) doivent être placées dans le répertoire war à l&#8217;instar d&#8217;une application Web classique.</p>
<p>Notre nouveau projet contient par défaut deux fichiers : <strong>GWTDemo.html</strong> et <strong>GWTDemo.css</strong>. Le fichier HTML sert à charger l&#8217;application GWT et le fichier css représente le style de l&#8217;application.</p>
<p>Au niveau du répertoire de sources <strong>src</strong>, on retrouve les packages <strong>client</strong> et <strong>server</strong>, et le fichier <strong>GWTDemo.gwt.xml</strong>. Au niveau de ce fichier, il n&#8217;y a pas de changements notables.</p>
<p>Le nouveau projet contient un exemple de service RPC : <strong>GreetingService</strong>. Voilà le code de l&#8217;interface du service :</p>

<div class="wp_codebox"><table><tr id="p2463"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p246code3"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">fr.mkhelif.gwt.demo.client</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.user.client.rpc.RemoteService</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.google.gwt.user.client.rpc.RemoteServiceRelativePath</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * The client side stub for the RPC service.
 */</span>
@RemoteServiceRelativePath<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;greet&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> GreetingService <span style="color: #000000; font-weight: bold;">extends</span> RemoteService <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">String</span> greetServer<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>On remarque que l&#8217;interface étend toujours <strong>RemoteService</strong>, par contre une nouvelle annotation est présente : <em>@RemoveServiceRelativePath(&nbsp;&raquo;greet&nbsp;&raquo;)</em>. Cette annotation permet de s&#8217;affranchir au niveau du code client d&#8217;enregistrer l&#8217;URL de la servlet du service :</p>

<div class="wp_codebox"><table><tr id="p2464"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p246code4"><pre class="java" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>ServiceDefTarget<span style="color: #009900;">&#41;</span> service<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setServiceEntryPoint</span> <span style="color: #009900;">&#40;</span>GWT.<span style="color: #006633;">getModuleBaseURL</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;greet&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Par contre il n&#8217;y a aucune différence au niveau de son implémentation et de son clone asynchrone.</p>
<h2>Compilation du projet</h2>
<p>Voilà le projet est créé, il faut maintenant le compiler en cliquant sur le bouton <a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-button-compile.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-button-compile-thumb.png" border="0" alt="gwt-button-compile" width="16" height="16" /></a>. Le wizard suivant apparait :</p>
<p align="center"><a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-compile.png"></a><a href="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-compile1.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://www.mkhelif.fr/wp-content/uploads/2009/04/gwt-compile-thumb.png" border="0" alt="gwt-compile" width="442" height="536" /></a></p>
<p>Il suffit de sélectionner le projet GWT, le niveau de log du compilateur et le style de sortie du JavaScript compilé. Sélectionnez ensuite les points d&#8217;entrées de votre application GWT, dans notre exemple il n&#8217;y en a qu&#8217;un.</p>
<p>On peut remarquer que grâce au plugin on peut spécifier des arguments de compilation. Le paramètre <em>localWorkers</em> permet de définir le nombre de workers utilisés pour compiler les permutations JavaScript. D&#8217;autres options sont disponibles mais ne concerne que les dossiers de compilation : <em>workDir</em>, <em>war</em> et <em>extra</em>.</p>
<p>Ayant un dual-core, je demande au compilateur d&#8217;utiliser 2 workers pour compiler. Le gain de temps est d&#8217;environ 30% : 28 secondes sans l&#8217;option et 19 secondes avec.</p>
<h2>Utilisation de l&#8217;application</h2>
<p>Une fois l&#8217;application GWT compilée, il faut la tester grâce au hosted mode. Il n&#8217;y a pas de grande différence au niveau du hosted mode, sauf que maintenant il est possible de modifier le serveur utilisé par GWT pour démarrer l&#8217;application.</p>
<p>On remarque un nouveau bouton <strong>Restart Server</strong> dans la fenêtre du hosted mode. Ce bouton permet de redémarrer le serveur, et donc de redéployer le WAR, sans avoir à relancer le hosted mode.</p>
<h2>Conclusion</h2>
<p>C&#8217;est un très beau coup de pub qu&#8217;à fait Google en nous servant en même temps le support de Java par Google App Engine, la version 1.6 de GWT et un plugin Eclipse pour gérer très facilement le tout. Cela va donner un coup de boost aux développeurs qui étaient encore hésitant sur la fiabilité de GWT.<br />
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html" title="GWT 2.0 : les nouvelles fonctionnalités">GWT 2.0 : les nouvelles fonctionnalités</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html" title="Google : GWT version 1.6 et consorts">Google : GWT version 1.6 et consorts</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" title="GWT : le futur hosted mode">GWT : le futur hosted mode</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html" title="RIA : quel framework choisir?">RIA : quel framework choisir?</a></li>
<li><a href="http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html" title="GWT : version 1.5 disponible">GWT : version 1.5 disponible</a></li>
<li><a href="http://www.mkhelif.fr/2008/07/07/gwt-crer-un-service-rpc.html" title="GWT : Créer un service RPC">GWT : Créer un service RPC</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google : GWT version 1.6 et consorts</title>
		<link>http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html</link>
		<comments>http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 08:55:12 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html</guid>
		<description><![CDATA[Ça y est, la version 1.6 officielle de GWT est enfin disponible après deux releases candidates (RC). Les nouveautés annoncées sont bien présentes. Parmi les nouveautés les plus importantes :

Une refonte de l&#8217;architecture d&#8217;une application GWT pour qu&#8217;elle corresponde à celle d&#8217;un WAR. Cette nouvelle architecture est plus intuitive pour développer une application complète (testée [...]]]></description>
			<content:encoded><![CDATA[<p>Ça y est, la <a href="http://code.google.com/intl/fr-FR/webtoolkit/download.html" target="_blank">version 1.6 officielle de GWT</a> est enfin disponible après deux releases candidates (RC). <a href="http://www.mkhelif.fr/2008/12/11/gwt-16-quoi-de-neuf.html" target="_blank">Les nouveautés annoncées</a> sont bien présentes. Parmi les nouveautés les plus importantes :</p>
<ul>
<li>Une refonte de l&#8217;architecture d&#8217;une application GWT pour qu&#8217;elle corresponde à celle d&#8217;un WAR. Cette nouvelle architecture est plus intuitive pour développer une application complète (testée avec le <a href="http://code.google.com/p/cypal-studio/" target="_blank">plugin Eclipse Cypal Studio</a>).</li>
<li>Une parallélisation du compilateur permet sur une machine multi-coeurs de diminuer sensiblement la durée de compilation. Maintenant, la compilation peut aussi être distribuée entre plusieurs machines.</li>
<li>Une nouvelle approche de la gestion de événements par <em>Handler</em>. Pour avoir testé cette nouvelle implémentation, on se rapproche beaucoup plus de la gestion des événements Swing.</li>
</ul>
<p>En marge de GWT, Google App Engine, la plateforme de déploiement des applications Web de Google, accepte désormais les applications Java dans un environnement Java 6. Cet environnement comprend les API suivantes : <a href="http://java.sun.com/jdo/index.jsp">Java Data Objects</a> (JDO), <a href="http://java.sun.com/developer/technicalArticles/J2EE/jpa/">Java Persistence API</a> (JPA) et <a href="http://java.sun.com/products/javamail/" target="_blank">JavaMail API</a>.</p>
<p>Par ailleurs, Google a aussi développé un <a href="http://code.google.com/intl/fr-FR/eclipse/" target="_blank">plugin Eclipse</a> pour les développeurs GWT et Google App Engine. Ce plugin contient :</p>
<ul>
<li><a href="http://code.google.com/intl/fr-FR/eclipse/docs/creating_new_webapp.html" target="_blank">Un assistant de création d&#8217;applications Web</a> spécifique pour GWT ou Google App Engine.</li>
<li><a href="http://code.google.com/intl/fr-FR/eclipse/docs/appengine_deploy.html" target="_blank">Un assistant de déploiement</a> de votre application dans le cloud de Google.</li>
<li>Une coloration syntaxique de votre code JSNI (JavaScript Native Interface). Très utile, surtout lorsqu&#8217;on à pris l&#8217;habitude de coder avec une coloration de commentaire&#8230;</li>
</ul>
<p>Divers autres fonctionnalités sont disponibles avec ce plugin, mais je ne les ai pas encore testé.</p>
<p>Source : <a href="http://googlewebtoolkit.blogspot.com/2009/04/introducing-gwt-16-and-friends.html" target="_blank">Introducing GWT 1.6 and friends</a>.<br />
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html" title="GWT 2.0 : les nouvelles fonctionnalités">GWT 2.0 : les nouvelles fonctionnalités</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html" title="Première utilisation du plugin Eclipse GWT">Première utilisation du plugin Eclipse GWT</a></li>
<li><a href="http://www.mkhelif.fr/2009/09/07/ruby-on-rails-dployer-une-application-sur-tomcat-avec-jruby.html" title="Ruby on Rails : d&eacute;ployer une application sur Tomcat avec JRuby">Ruby on Rails : d&eacute;ployer une application sur Tomcat avec JRuby</a></li>
<li><a href="http://www.mkhelif.fr/2009/08/21/tests-en-charge-dec2-gae-et-azure.html" title="Tests en charge d&rsquo;EC2, GAE et Azure">Tests en charge d&rsquo;EC2, GAE et Azure</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/11/gwt-16-quoi-de-neuf.html" title="GWT 1.6 : quoi de neuf ?">GWT 1.6 : quoi de neuf ?</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" title="GWT : le futur hosted mode">GWT : le futur hosted mode</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT 1.6 : quoi de neuf ?</title>
		<link>http://www.mkhelif.fr/2008/12/11/gwt-16-quoi-de-neuf.html</link>
		<comments>http://www.mkhelif.fr/2008/12/11/gwt-16-quoi-de-neuf.html#comments</comments>
		<pubDate>Thu, 11 Dec 2008 10:44:04 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/2008/12/11/gwt-16-quoi-de-neuf.html</guid>
		<description><![CDATA[Ça y est la roadmap pour la version 1.6 de GWT a été publiée sur le blog officiel de GWT. Aucune date précise quand à la sortie de cette version, mais elle est annoncée pour le premier trimestre 2009.
Voilà les nouvelles fonctionnalités pour cette version :

Nouvelle structure de déploiement : l&#8217;objectif étant de permettre un [...]]]></description>
			<content:encoded><![CDATA[<p>Ça y est <a href="http://code.google.com/intl/fr/webtoolkit/makinggwtbetter.html#roadmap" target="_blank">la roadmap</a> pour la version 1.6 de GWT a été publiée sur <a href="http://googlewebtoolkit.blogspot.com/2008/12/whats-ahead-for-google-web-toolkit_10.html" target="_blank">le blog officiel de GWT</a>. Aucune date précise quand à la sortie de cette version, mais elle est annoncée pour le premier trimestre 2009.</p>
<p>Voilà les nouvelles fonctionnalités pour cette version :</p>
<ul>
<li>Nouvelle structure de déploiement : l&#8217;objectif étant de permettre un déploiement plus simple des WARs sur un serveur d&#8217;applications. Il s&#8217;agit surtout d&#8217;une restructuration dont voici <a href="http://code.google.com/p/google-web-toolkit/wiki/WAR_Design_1_6" target="_blank">la spécification</a>.</li>
<li>Jetty sera utilisé à la place de Tomcat (j&#8217;en parlais d&#8217;en <a href="http://www.mkhelif.fr/2008/10/21/gwt-16-tomcat-ou-jetty.html" target="_blank">un billet précédent</a>). Une architecture plus modulable du hosted mode permettra de changer le serveur utilisé.</li>
<li>Uniformisation des événements : les listeners actuels seront dépréciés et les nouveaux seront uniformisés pour tous les widgets.</li>
<li>Intégration du <a href="http://code.google.com/intl/fr/docreader/#p=google-web-toolkit-incubator&amp;s=google-web-toolkit-incubator&amp;t=Spinner" target="_blank">DatePicker</a> et du <a href="http://code.google.com/intl/fr/docreader/#p=google-web-toolkit-incubator&amp;s=google-web-toolkit-incubator&amp;t=LazyPanel" target="_blank">LazyPanel</a> depuis l&#8217;incubateur GWT. Le DatePicker est comme son nom l&#8217;indique un widget permettant de sélectionner des dates (<a href="http://collectionofdemos.appspot.com/demo/com.google.gwt.demos.spinner.SpinnerDemo/SpinnerDemo.html" target="_blank">démo du DatePicker</a>). Le LazyPanel permet de charger un composant uniquement lorsqu&#8217;on en a besoin (appel à la méthode <em>setVisible (true)</em>), ça permet de gagner du temps lors de l&#8217;initialisation de l&#8217;application.</li>
<li>Optimisation des String : les StringBuilder seront optimisés pour chaque navigateurs grâce au deferred binding (optimisation à la compilation).</li>
<li>Optimisation du compilateur GWT : réduction du temps de compilation.</li>
</ul>
<p>Et celles qui sont prévues pour la suite :</p>
<ul>
<li>Découpage du code JavaScript généré en plusieurs fichiers. Le développeur pourra spécifier des points de césures qui permettront au compilateur de découper le code généré en plusieurs fichiers. Cela permettra évidemment d&#8217;éviter au client de télécharger toute l&#8217;application GWT en un seul fichier. Ceci lié au LazyPanel, les applications GWT devraient gagner en rapidité de chargement.</li>
<li>Analyse du code compilé, appelée Story Of Your Compile (SOYC)  : rapport permettant aux développeurs de savoir quelle classe génère le plus de code JavaScript.</li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" target="_blank">Sélection du navigateur à utiliser pour le hosted mode</a>.</li>
<li><a href="http://code.google.com/p/google-web-toolkit-incubator/wiki/UiBinder" target="_blank">Ui Binder</a> : création des composants par déclaration, permet de séparer le layouting des composants (géré dans un fichier XML) de leur lien avec le modèle (géré dans le code Java).</li>
<li>Client Bundle : généralisation du deferred binding (utilisé actuellement dans les Image Bundle) aux autres ressources statiques (css : CSSRessource, texte : TextRessource, image : ImageRessource).</li>
<li>Optimisation du protocole RPC.</li>
</ul>
<p>EDIT: <a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html">La version 1.6 de GWT est sortie.</a><br />
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html" title="GWT 2.0 : les nouvelles fonctionnalités">GWT 2.0 : les nouvelles fonctionnalités</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html" title="Google : GWT version 1.6 et consorts">Google : GWT version 1.6 et consorts</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html" title="Première utilisation du plugin Eclipse GWT">Première utilisation du plugin Eclipse GWT</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" title="GWT : le futur hosted mode">GWT : le futur hosted mode</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html" title="RIA : quel framework choisir?">RIA : quel framework choisir?</a></li>
<li><a href="http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html" title="GWT : version 1.5 disponible">GWT : version 1.5 disponible</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2008/12/11/gwt-16-quoi-de-neuf.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GWT : le futur hosted mode</title>
		<link>http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html</link>
		<comments>http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html#comments</comments>
		<pubDate>Tue, 09 Dec 2008 09:42:05 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html</guid>
		<description><![CDATA[Architecture : Out Of Process Hosted Mode (OOPHM)

La future version 2.0 de GWT nous annonce une grande amélioration du hosted mode. Pour rappel le hosted mode permet aux développeurs d&#8217;application GWT de pouvoir débugger leur code dans un navigateur embarqué sans avoir à passer par la compilation du Java en JavaScript.
La version actuelle du hosted [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><em>Architecture : Out Of Process Hosted Mode (OOPHM)</em></p>
<p align="center"><a href="http://www.mkhelif.fr/wp-content/uploads/2008/12/oophm.png"><img src="http://www.mkhelif.fr/wp-content/uploads/2008/12/oophm-thumb.png" alt="oophm" width="476" height="344" /></a></p>
<p>La future version 2.0 de GWT nous annonce une grande amélioration du hosted mode. Pour rappel le hosted mode permet aux développeurs d&#8217;application GWT de pouvoir débugger leur code dans un navigateur embarqué sans avoir à passer par la compilation du Java en JavaScript.</p>
<p>La version actuelle du hosted mode ne permet pas de sélectionner le navigateur à utiliser (par défaut : IE sur Windows, Mozilla sur Linux et WebKit sur Mac). Cette nouvelle mouture permettra donc, à l&#8217;aide de plugins, de s&#8217;intégrer dans &laquo;&nbsp;tous&nbsp;&raquo; les navigateurs.</p>
<p>Ces plugins communiqueront par TCP avec la JVM de GWT et comme maintenant le code JavaScript ne sera pas généré ce qui permettra de débugger le code Java.</p>
<p>Source : <a href="http://www.dng-consulting.com/blogs/index.php/2008/12/06/une-daeacute-mo-du-futur-mode-hostaeacut?blog=1" target="_blank">DNG Consulting</a> (regardez <a href="http://www.youtube.com/watch?v=qjdmht2Gs6Q&amp;eurl=http://www.dng-consulting.com/blogs/index.php/2008/12/06/une-daeacute-mo-du-futur-mode-hostaeacut?blog=1" target="_blank">la vidéo</a> ça donne envie).<br />
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html" title="GWT 2.0 : les nouvelles fonctionnalités">GWT 2.0 : les nouvelles fonctionnalités</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html" title="Première utilisation du plugin Eclipse GWT">Première utilisation du plugin Eclipse GWT</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html" title="Google : GWT version 1.6 et consorts">Google : GWT version 1.6 et consorts</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html" title="RIA : quel framework choisir?">RIA : quel framework choisir?</a></li>
<li><a href="http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html" title="GWT : version 1.5 disponible">GWT : version 1.5 disponible</a></li>
<li><a href="http://www.mkhelif.fr/2008/07/07/gwt-crer-un-service-rpc.html" title="GWT : Créer un service RPC">GWT : Créer un service RPC</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RIA : quel framework choisir?</title>
		<link>http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html</link>
		<comments>http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html#comments</comments>
		<pubDate>Fri, 03 Oct 2008 16:00:53 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html</guid>
		<description><![CDATA[En tant que développeur je m&#8217;intéresse de près ou de loin aux différents frameworks RIA qui font leur apparition. Entre GWT, Flex, JavaFX (uniquement en béta), Silverlight, etc&#8230;on est souvent perdu dans la jungle des frameworks&#8230;
Xebia vient de rendre les résultats du concours entre les différentes technologies. Les différents développeurs devaient créer un gestionnaire de [...]]]></description>
			<content:encoded><![CDATA[<p>En tant que développeur je m&#8217;intéresse de près ou de loin aux différents frameworks RIA qui font leur apparition. Entre GWT, Flex, JavaFX (uniquement en béta), Silverlight, etc&#8230;on est souvent perdu dans la jungle des frameworks&#8230;</p>
<p>Xebia vient de rendre les résultats du concours entre les différentes technologies. Les différents développeurs devaient créer un gestionnaire de playlists web avec les différentes fonctionnalités : tri par catégories, artistes, albums, &#8230;</p>
<p>Le vainqueur est Flex grâce à sa maturité (richesse des composants, simplicité, &#8230;).</p>
<p>Voici le lien des résultats : <a title="http://blog.xebia.fr/2008/10/03/ria-contest-flex-silverlight-gwt-echo3-javafx/" href="http://blog.xebia.fr/2008/10/03/ria-contest-flex-silverlight-gwt-echo3-javafx/">http://blog.xebia.fr/2008/10/03/ria-contest-flex-silverlight-gwt-echo3-javafx/</a></p>
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html" title="GWT 2.0 : les nouvelles fonctionnalités">GWT 2.0 : les nouvelles fonctionnalités</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html" title="Première utilisation du plugin Eclipse GWT">Première utilisation du plugin Eclipse GWT</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html" title="Google : GWT version 1.6 et consorts">Google : GWT version 1.6 et consorts</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" title="GWT : le futur hosted mode">GWT : le futur hosted mode</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
<li><a href="http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html" title="GWT : version 1.5 disponible">GWT : version 1.5 disponible</a></li>
<li><a href="http://www.mkhelif.fr/2008/07/07/gwt-crer-un-service-rpc.html" title="GWT : Créer un service RPC">GWT : Créer un service RPC</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT : version 1.5 disponible</title>
		<link>http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html</link>
		<comments>http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html#comments</comments>
		<pubDate>Tue, 02 Sep 2008 08:20:14 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html</guid>
		<description><![CDATA[Ça y est la version 1.5 du framework GWT (Google Web Toolkit) est enfin disponible. Voici la liste des nouveautés :

Gestion (enfin?) de Java 5 : génériques, autoboxing, énumérations, boucle foreach, imports statiques&#8230;
Le compilateur GWT ignore désormais les annotations non reconnues (JPA en particulier) ce qui permet d&#8217;utiliser ses beans directement dans l&#8217;UI.
Support des classes [...]]]></description>
			<content:encoded><![CDATA[<p>Ça y est la version 1.5 du framework GWT (Google Web Toolkit) est enfin disponible. Voici la liste des nouveautés :</p>
<ul>
<li>Gestion (enfin?) de Java 5 : génériques, autoboxing, énumérations, boucle foreach, imports statiques&#8230;</li>
<li>Le compilateur GWT ignore désormais les annotations non reconnues (<strong>JPA</strong> en particulier) ce qui permet d&#8217;utiliser ses beans directement dans l&#8217;UI.</li>
<li>Support des classes <em>StringBuilder</em>, <em>TreeMap</em>, <em>LinkedHashMap</em> et autres classes standards.</li>
<li>Gestion des assertions en activant le flag <em>-ea</em>.</li>
</ul>
<p>Voici un lien vers toutes <a href="http://googlewebtoolkit.blogspot.com/2008/08/gwt-15-now-available.html" target="_blank">les nouveautés de la version 1.5 de GWT</a>.<br />
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html" title="GWT 2.0 : les nouvelles fonctionnalités">GWT 2.0 : les nouvelles fonctionnalités</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html" title="Première utilisation du plugin Eclipse GWT">Première utilisation du plugin Eclipse GWT</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html" title="Google : GWT version 1.6 et consorts">Google : GWT version 1.6 et consorts</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" title="GWT : le futur hosted mode">GWT : le futur hosted mode</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html" title="RIA : quel framework choisir?">RIA : quel framework choisir?</a></li>
<li><a href="http://www.mkhelif.fr/2008/07/07/gwt-crer-un-service-rpc.html" title="GWT : Créer un service RPC">GWT : Créer un service RPC</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GWT : Créer un service RPC</title>
		<link>http://www.mkhelif.fr/2008/07/07/gwt-crer-un-service-rpc.html</link>
		<comments>http://www.mkhelif.fr/2008/07/07/gwt-crer-un-service-rpc.html#comments</comments>
		<pubDate>Mon, 07 Jul 2008 16:05:59 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/2008/07/07/gwt-crer-un-service-rpc.html</guid>
		<description><![CDATA[Le framework GWT permet depuis le client JavaScript de faire des appels RPC (Remote Procedure Call ou appels de procédures distantes) au serveur GWT.
L&#8217;objectif est de permettre au JavaScript client d&#8217;exécuter des méthodes sur le serveur et d&#8217;en récupérer le résultat. Tout cela de façon totalement asynchrone (Ajax). Les échanges entre le client et le [...]]]></description>
			<content:encoded><![CDATA[<p>Le framework GWT permet depuis le client JavaScript de faire des appels RPC (Remote Procedure Call ou appels de procédures distantes) au serveur GWT.</p>
<p>L&#8217;objectif est de permettre au JavaScript client d&#8217;exécuter des méthodes sur le serveur et d&#8217;en récupérer le résultat. Tout cela de façon totalement asynchrone (<strong>A</strong>jax). Les échanges entre le client et le serveur sont faites de façon asynchrone car la plupart des navigateurs n&#8217;accordent qu&#8217;un seul Thread pour exécuter le JavaScript.</p>
<p><span id="more-67"></span></p>
<h3>Infrastructure RPC</h3>
<p>Pour permettre à JavaScript de faire des appels RPC il faut écrire le service côté serveur et la vue qu&#8217;en a le client. Le code d&#8217;un service RPC est séparé en deux packages : <em>fr.mkhelif.gwt.client</em> et <em>fr.mkhelif.gwt.server</em>.</p>
<p>Dans ce tutoriel nous allons créer un service <strong>Hello</strong> qui va tout simplement dire bonjour.</p>
<h5>Package client</h5>
<p>Le package client doit contenir les interfaces décrivant les méthodes du service.</p>

<div class="wp_codebox"><table><tr id="p6711"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p67code11"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * @author Marwan KHELIF
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> HelloService <span style="color: #000000; font-weight: bold;">extends</span> RemoteService <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> sayHello <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// HelloService</span></pre></td></tr></table></div>

<p>Voilà le code du service côté client qui sera utilisé pour effectuer des appels RPC en JavaScript.</p>
<p>On crée alors une interface qui sera utilisé par GWT pour effectuer les appels asynchrone. Cette interface est identique à celle que l&#8217;on vient d&#8217;écrire sauf que toutes les méthodes doivent retourner <strong>void</strong> et posséder un dernier argument en plus.</p>

<div class="wp_codebox"><table><tr id="p6712"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p67code12"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * @author Marwan KHELIF
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> HelloServiceAsync <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> sayHello <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name, AsyncCallback callback<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// HelloServiceAsync</span></pre></td></tr></table></div>

<p>La classe AsyncCallBack contient deux méthodes qui permettent de gérer le résultat de l&#8217;appel :</p>
<pre>public void onSuccess (Object result)
public void onFailure (Throwable ex)
</pre>
<h5>Package server</h5>
<p>Le package server (peut être nommé différemment) contient le code des services définis dans le package client.</p>
<p>Voilà donc notre implémentation du service <strong>Hello</strong> :</p>

<div class="wp_codebox"><table><tr id="p6713"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p67code13"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * @author Marwan KHELIF
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HelloServiceImpl <span style="color: #000000; font-weight: bold;">extends</span> RemoteServiceServlet <span style="color: #000000; font-weight: bold;">implements</span> HelloService <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> sayHello <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Hello &quot;</span> <span style="color: #339933;">+</span> name <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;!&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// sayHello ()</span>
<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// HelloService</span></pre></td></tr></table></div>

<p>Voilà notre service est prêt à fonctionner, il faut maintenant le rendre disponible aux clients. Pour cela il faut modifier le fichier de l&#8217;application GWT : <em>MyApplication.gwt.xml</em></p>

<div class="wp_codebox"><table><tr id="p6714"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p67code14"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;module<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #808080; font-style: italic;">&lt;!-- Inherit GWT --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;inherits</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;com.google.gwt.user.User&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!-- Available Services --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet</span> <span style="color: #000066;">path</span>=<span style="color: #ff0000;">&quot;/hello&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;fr.mkhelif.gwt.server.HelloServiceImpl&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/module<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Voilà notre service RPC est prêt à l&#8217;emploi.</p>
<h3>Échange de données</h3>
<p>Afin d&#8217;échanger des données entre le client (JavaScript) et le serveur (Java) il faut sérialiser les données pour qu&#8217;elles puissent transiter par le protocole HTTP. La sérialisation fournie avec GWT est différente de celle de Java.</p>
<p>Un type d&#8217;objet peut être utilisé en paramètre ou en retour d&#8217;une méthode de Service si c&#8217;est :</p>
<ol>
<li>
<div>un type primitif : int, char, byte, double, boolean&#8230;</div>
</li>
<li>
<div>un objet de type : String, Date ou un wrapper de type primitif (Double, Long, Integer, Float, Boolean, &#8230;).</div>
</li>
<li>
<div>un tableau d&#8217;objets sérialisables.</div>
</li>
<li>
<div>une classe utilisateur qui implémente <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/user/client/rpc/IsSerializable.html" target="_blank">com.google.gwt.user.client.rpc.IsSerialisable</a> ou <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html" target="_blank">java.io.Serialisable</a>.</div>
</li>
</ol>
<p align="justify">Dans notre exemple nous n&#8217;utilisons que le type String, il n&#8217;y a donc aucun problème de sérialisation.</p>
<h3>Appel d&#8217;un service GWT</h3>
<p align="justify">Une fois notre service crée, il faut effectuer des appels a sa méthode <em>sayHello</em>. Pour cela il faut demander à GWT de nous donner une référence vers ce service puis on appelle la méthode.</p>
<h5>Instanciation du service</h5>
<p align="justify">Pour instancier le service il suffit d&#8217;appeler :</p>

<div class="wp_codebox"><table><tr id="p6715"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p67code15"><pre class="java" style="font-family:monospace;">HelloServiceAsync service <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>HelloServiceAsync<span style="color: #009900;">&#41;</span> GWT.<span style="color: #006633;">create</span> <span style="color: #009900;">&#40;</span>HelloService.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p align="justify">Le cast de HelloService vers HelloServiceAsync est toujours sûr car l&#8217;objet Proxy créé implémente l&#8217;interface asynchrone.</p>
<h5>Association du service à l&#8217;URL</h5>
<p align="justify">Une fois notre service instancié il faut le lier avec le point d&#8217;entrée du service sur le serveur : <em>/hello</em>. Pour cela on effectue l&#8217;appel suivant :</p>
<pre>((ServiceDefTarget) service).setServiceEntryPoint (GWT.getModuleBaseURL () + "/hello");</pre>
<p align="justify">Voilà le service est mappé avec le serveur, on peut effectuer l&#8217;appel à la méthode.</p>
<h5>Appel d&#8217;une méthode de service</h5>
<p align="justify">Pour appeler la méthode du service :</p>

<div class="wp_codebox"><table><tr id="p6716"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p67code16"><pre class="java" style="font-family:monospace;">service.<span style="color: #006633;">sayHello</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Marwan KHELIF&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> AsyncCallBack <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onFailure <span style="color: #009900;">&#40;</span><span style="color: #003399;">Throwable</span> caught<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Traitement en cas d'erreur</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onFailure ()</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onSuccess <span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> result<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Traitement en cas de succès</span>
		<span style="color: #003399;">Window</span>.<span style="color: #006633;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#41;</span> result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onFailure ()</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p align="justify">Voilà la méthode a été appelée sur le service RPC.</p>
<h3>Conclusion</h3>
<p>Les services RPC est l&#8217;un des points les plus importants du framework GWT. Ils permettent d&#8217;effectuer très simplement des appels au serveur en JavaScript et ainsi mettre à jour l&#8217;interface graphique grâce aux données.</p>
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html" title="GWT 2.0 : les nouvelles fonctionnalités">GWT 2.0 : les nouvelles fonctionnalités</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html" title="Première utilisation du plugin Eclipse GWT">Première utilisation du plugin Eclipse GWT</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html" title="Google : GWT version 1.6 et consorts">Google : GWT version 1.6 et consorts</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" title="GWT : le futur hosted mode">GWT : le futur hosted mode</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html" title="RIA : quel framework choisir?">RIA : quel framework choisir?</a></li>
<li><a href="http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html" title="GWT : version 1.5 disponible">GWT : version 1.5 disponible</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2008/07/07/gwt-crer-un-service-rpc.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>GWT : Introduction au framework</title>
		<link>http://www.mkhelif.fr/2008/07/03/gwt-introduction-au-framework.html</link>
		<comments>http://www.mkhelif.fr/2008/07/03/gwt-introduction-au-framework.html#comments</comments>
		<pubDate>Thu, 03 Jul 2008 14:48:03 +0000</pubDate>
		<dc:creator>mkhelif</dc:creator>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://www.mkhelif.fr/?p=66</guid>
		<description><![CDATA[Je travaille actuellement sur un plugin pour le logiciel NeoLoad permettant d&#8217;enregistrer des requêtes RPC effectuer par le framework GWT (Google Web Toolkit). Je vais donc en profiter pour présenter ce framework.

Qu&#8217;est ce que GWT?
Google Web Toolkit est un framework qui permet de créer un RIA (Rich Internet Application) sans avoir à écrire des centaines [...]]]></description>
			<content:encoded><![CDATA[<p>Je travaille actuellement sur un plugin pour le logiciel <a href="http://www.neotys.fr/" target="_blank">NeoLoad</a> permettant d&#8217;enregistrer des requêtes RPC effectuer par le framework GWT (<a href="http://code.google.com/webtoolkit/" target="_blank">Google Web Toolkit</a>). Je vais donc en profiter pour présenter ce framework.</p>
<p><span id="more-66"></span></p>
<h3>Qu&#8217;est ce que GWT?</h3>
<p>Google Web Toolkit est un framework qui permet de créer un RIA (Rich Internet Application) sans avoir à écrire des centaines de lignes de JavaScript. GWT est un compilateur qui génére à partir de code source Java des fichiers JavaScript, XML et HTML.</p>
<p>Pour rendre dynamique le site vous pouvez ajouter une couche client-serveur RPC (Remote Protocol Call) entre le JavaScript côté client et le Java côté serveur. Cela permet de faire transiter par HTTP des objets Java entre le client et le serveur et des objets JSON entre le serveur et le client.</p>
<p>Afin de simplifier les étapes de tests et de débug, GWT fourni une JRE permettant d&#8217;exécuter l&#8217;application en local : <strong>Hosted Mode</strong>. Ceci évite la compilation de l&#8217;application et le déploiement sur le serveur.</p>
<p>GWT a donc pour but principal de simplifier et d&#8217;unifier le développement d&#8217;application Web : le développeur crée les classes Java nécessaire à l&#8217;application et GWT s&#8217;occupe du reste.</p>
<h3>Le compilateur GWT</h3>
<p>Dans cet objectif le compilateur GWT génère du code Javascript compatible pour la plupart des navigateurs : Firefox (version 1 à 3), IE (version 6 et 7), Safari (version 2) et Opéra (version 9).</p>
<p>Le code Java écrit par le développeur doit être compatible Java 1.4 minimum. GWT simule le comportement d&#8217;une JRE pour générer le Javascript, mais seulement certaines classes de l&#8217;API sont supportées : <a href="http://code.google.com/webtoolkit/documentation/jre.html" target="_blank">classes supportées par GWT</a>.</p>
<h3>Démarrage de l&#8217;application GWT</h3>
<h5>Chargement des paramètres du navigateur</h5>
<p>Afin d&#8217;avoir une application qui fonctionne peu importe les paramètres de l&#8217;utilisateur (langue, version du navigateur, &#8230;) GWT va générer à la compilation un fichier JavaScript par type de navigateur supporté et par langue de l&#8217;application.</p>
<p>Lorsqu&#8217;un utilisateur accède à la page d&#8217;acceuil de l&#8217;application GWT va charger le fichier JavaScript correspondant à la configuration de l&#8217;utilisateur.</p>
<h5>Page HTML</h5>
<p>La page HTML d&#8217;entrée dans l&#8217;application ne contient qu&#8217;une frame vide qui va charger le JavaScript adéquat selon la configuration de l&#8217;utilisateur.</p>

<div class="wp_codebox"><table><tr id="p6618"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p66code18"><pre class="html" style="font-family:monospace;">&lt;html&gt;
	&lt;head&gt;
&nbsp;
		&lt;!-- Chargement du script généré par GWT --&gt;
		&lt;script language='javascript' src='com.mkhelif.gwt.hello.Hello.nocache.js'&gt;&lt;/script&gt;
	&lt;/head&gt;
&nbsp;
	&lt;body&gt;
		&lt;!-- Gestion de l'historique par GWT --&gt;
		&lt;iframe src=&quot;javascript:''&quot; id=&quot;__gwt_historyFrame&quot; style=&quot;width:0;height:0;border:0&quot;&gt;&lt;/iframe&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>L&#8217;application démarre en plusieurs étapes :</p>
<ol>
<li>Chargement de la page HTML par le navigateur.</li>
<li>Chargement et exécution du JavaScript <em>.nocache.js</em>.</li>
<li>Le code JavaScript récupère la configuration du navigateur et récupère à partir d&#8217;une table (générée par GWT) le nom du fichier HTML à utiliser.</li>
<li>Le JavaScript crée alors une frame cachée qui est insérée à la fin du <strong>body</strong> de la page.</li>
<li>Lorsque le fichier HTML est chargée l&#8217;application est démarée.</li>
</ol>
<h3>Fichiers générés par le compilateur</h3>
<h5>Fichier JavaScript <em>.nocache.js</em></h5>
<p>Ce fichier permet de chargée une version de l&#8217;application compatible avec le navigateur du client.</p>
<p>Ce fichier contient une table avec en clé la configuration du client et en valeur l&#8217;URL du fichier HTML à charger. Par exemple ce fichier contiendra une entrée avec &#8216;Firefox en français&#8217;, &#8216;IE en anglais&#8217;, &#8216;Opera en allemand&#8217;, &#8230;</p>
<p>Chaque navigateur ayant une interprétation du JavaScript différent, cela permet de tirer parti de toutes les spécificités du navigateur.</p>
<p>Ce fichier <em>nocache</em> doit être re-téléchargé par le navigateur à chaque chargement de la page car il est recréé lorsque l&#8217;on recompile l&#8217;application. Cependant le nom ne change pas.</p>
<h5>Fichier HTML <em>.cache.html</em></h5>
<p>Ces fichiers HTML (il y en à un par navigateur et par langue) contient uniquement le JavaScript compressé de l&#8217;application. Le fichier JavaScript n&#8217;est pas envoyé directement car certains navigateur ne supporte pas le JavaScript compressé. Il est donc inclus dans du HTML afin d&#8217;éviter les problèmes de compatibilité.</p>
<p>Chaque fichier HTML a pour nom la signature MD5 de son contenu afin d&#8217;éviter que plusieurs fichiers HTML aient le même nom. Ainsi si vous modifiez le code de votre application, les fichiers n&#8217;auront pas le même nom.</p>
<p>Ces fichiers étant différents à chaque compilation, ils peuvent être mis en <em>cache</em> par le navigateur. D&#8217;où leurs noms <em>cache.html</em>.</p>
<h5>Fichier <em>.gwt.rpc</em></h5>
<p>Si votre application utilise des appels RPC vers le serveur et que les requêtes utilisent les objets Java que vous avez créé, ces objets doivent être sérialisés pour pouvoir transiter par le protocole HTTP.</p>
<p>Ces fichiers définissent quels objets doivent être sérialisés et leur politique de sérialisation.</p>
<h3>Conclusion</h3>
<p>Voilà une première introduction au framework GWT. Ce framework est très prometteur car il permet de s&#8217;abstraire de tous les problèmes que l&#8217;on rencontre pendant le développement d&#8217;une application AJAX.</p>
<h3>Pour suivre votre lecture</h3>
<ul class="related_post">
<li><a href="http://www.mkhelif.fr/2010/01/14/gwt-2-0-les-nouvelles-fonctionnalits.html" title="GWT 2.0 : les nouvelles fonctionnalités">GWT 2.0 : les nouvelles fonctionnalités</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/10/premire-utilisation-du-plugin-eclipse-gwt.html" title="Première utilisation du plugin Eclipse GWT">Première utilisation du plugin Eclipse GWT</a></li>
<li><a href="http://www.mkhelif.fr/2009/04/08/google-gwt-version-16-et-consorts.html" title="Google : GWT version 1.6 et consorts">Google : GWT version 1.6 et consorts</a></li>
<li><a href="http://www.mkhelif.fr/2008/12/09/gwt-le-futur-hosted-mode.html" title="GWT : le futur hosted mode">GWT : le futur hosted mode</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/23/gwt-librairie-open-flash-chart.html" title="GWT : librairie Open Flash Chart">GWT : librairie Open Flash Chart</a></li>
<li><a href="http://www.mkhelif.fr/2008/10/03/ria-quel-framework-choisir.html" title="RIA : quel framework choisir?">RIA : quel framework choisir?</a></li>
<li><a href="http://www.mkhelif.fr/2008/09/02/gwt-version-15-disponible.html" title="GWT : version 1.5 disponible">GWT : version 1.5 disponible</a></li>
</ul>
       ]]></content:encoded>
			<wfw:commentRss>http://www.mkhelif.fr/2008/07/03/gwt-introduction-au-framework.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
