<?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>Jmini Dev &#187; Demo</title>
	<atom:link href="https://blog.developpez.com/jmini/pcategory/demo/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/jmini</link>
	<description></description>
	<lastBuildDate>Wed, 05 Nov 2014 05:00:21 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Eclipse Scout: obtenir une version web mobile de son application</title>
		<link>https://blog.developpez.com/jmini/p12150/eclipse/eclipse-scout/eclipse-scout-mobile</link>
		<comments>https://blog.developpez.com/jmini/p12150/eclipse/eclipse-scout/eclipse-scout-mobile#comments</comments>
		<pubDate>Fri, 26 Jul 2013 05:27:05 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[Eclipse Scout]]></category>
		<category><![CDATA[Mcqs]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/jmini/?p=133</guid>
		<description><![CDATA[La version 3.9 d’Eclipse Scout livrée avec Kepler (nom du release train Eclipse 2013) permet d’obtenir une version mobile de son application. Je viens de porter ma petite application de QCM (série d’articles sur mcqs, site du projet, tutoriel – premiers pas avec Eclipse Scout) sur cette nouvelle version me permettant ainsi d’obtenir une déclinaison [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>La version 3.9 d’<a href="http://eclipse.org/scout/">Eclipse Scout</a> livrée avec Kepler (nom du release train Eclipse 2013) permet d’obtenir une version mobile de son application. Je viens de porter ma petite application de QCM (<a href="http://blog.developpez.com/jmini/pcategory/demo/mcqs">série d’articles sur mcqs</a>, <a href="http://code.google.com/a/eclipselabs.org/p/mcqs/">site du projet</a>, <a href="http://jmini.developpez.com/eclipse_scout/articles/premiers_pas/">tutoriel – premiers pas avec Eclipse Scout</a>) sur cette nouvelle version me permettant ainsi d’obtenir une déclinaison mobile de mon application. </p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/mcqs_mobile.png" alt="Version mobile de MCQS dans un iPhone" width="388" height="809" class="size-full wp-image-134" /></p>
<p>C’est une possibilité de plus qui confirme la stratégie multi front-end d’Eclipse Scout. En effet la même application peut-être rendue sous différente forme : application desktop, application web et maintenant application web mobile.<br />
<span id="more-133"></span></p>
<p>Depuis toujours, une idée principale d’Eclipse Scout consiste en une surcouche pour définir l’application qui soit indépendante de toute librairie graphique (SWT ou Swing). Les formulaires ainsi que les champs qu’ils contiennent sont définis dans un modèle d’application qui sera rendu sous forme d’interface graphique à l’exécution. Cette technique permet d’obtenir plusieurs déclinaisons de la même application :</p>
<p>Version SWT :</p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/mcqs_swt.png" alt="Version SWT de MCQS" width="583" height="590" class="aligncenter size-full wp-image-136" /></p>
<p>Version Swing :</p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/mcqs_swing_rayo.png" alt="Version Swing de MCQS" width="571" height="572" class="aligncenter size-full wp-image-137" /></p>
<p>Version web :</p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/mcqs_web.png" alt="Version Web de MCQS" width="574" height="575" class="aligncenter size-full wp-image-138" /></p>
<p>Le mobile étant une plateforme différente, il a fallu ajouter une étape supplémentaire lors du rendu. Les composants sont adaptés pour tenir compte des spécifiés de la plateforme. Voici quelques exemples :</p>
<p><strong>Smartfield :</strong></p>
<p>Le smartfield est un champ assez puissant : à la manière d’un combo-box, il permet de choisir parmi plusieurs choix. Il est également possible de saisir du texte dans le champ pour réduire les choix proposés. En version mobile, pour reproduire toutes ces possibilités, il a fallu ajouter une vue annexe sur la droite.</p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_smartfield_desktop.png" alt="SmartField Desktop" width="382" height="247" class="aligncenter size-full wp-image-140" /></p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_smartfield_mobile.png" alt="SmartField Mobile" width="643" height="444" class="aligncenter size-full wp-image-141" /></p>
<p><strong>Absence de menu contextuel :</strong></p>
<p>L’action proposée dans le menu contextuel apparait sous forme de bouton sous la table.</p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_contextmenu_desktop.png" alt="Menu contextuel Desktop" width="477" height="495" class="aligncenter size-full wp-image-142" /></p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_contextmenu_mobile.png" alt="Menu contextuel mobile" width="320" height="444" class="aligncenter size-full wp-image-143" /></p>
<p><strong>Représentation des tableaux :</strong></p>
<p>La largeur offerte par le téléphone est limitée. La hauteur des lignes d’un tableau doit être suffisante pour permettre une sélection avec le doigt « sélection touch ». Du coup, les colonnes d’un tableau sont rassemblées sous forme de lignes dans une cellule plus haute. Les colonnes d’une ligne du tableau vont être représentées dans un formulaire annexe accessible en sélectionnant une cellule dans la liste mobile.</p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_table_desktop.png" alt="Table Desktop" width="521" height="506" class="aligncenter size-full wp-image-144" /></p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_table_mobile.png" alt="Table Mobile" width="644" height="444" class="aligncenter size-full wp-image-145" /></p>
<p>L’action principale du menu contextuel (celle qui aurait été proposée en double cliquant sur la ligne du tableau) et qui correspond souvent à l’opération d’édition se retrouve déportée en haut à droite. Les opérations restantes sont disponibles dans un menu supplémentaire.</p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_table_action_desktop.png" alt="Menu dans table Desktop" width="479" height="495" class="aligncenter size-full wp-image-146" /></p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_table_action_mobile.png" alt="Menu dans table Mobile" width="320" height="444" class="aligncenter size-full wp-image-147" /></p>
<p><strong>Masquer certaines fonctionnalités :</strong></p>
<p>Toutes les fonctionnalités ne font pas forcément sens sur mobile. Pour mon application, j’ai décidé de masquer la représentation sous forme graphique (déjà rudimentaire dans la version desktop) en supprimant l’onglet correspondant.</p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_tabs_desktop.png" alt="Onglets Desktop" width="625" height="463" class="aligncenter size-full wp-image-150" /></p>
<p><img src="http://blog.developpez.com/jmini/files/2013/07/scout_tabs_mobile.png" alt="Onglets Mobile" width="320" height="444" class="aligncenter size-full wp-image-151" /></p>
<p><strong>En conclusion</strong></p>
<p>Cette transformation du modèle applicatif permet d’adapter le rendu web aux spécificités du mobile. Évidement l’application obtenue n’est pas aussi efficace qu’un développement dédié, mais le résultat est plus que convainquant par rapport au temps investi.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un fragment NoDB pour le serveur de mon application Eclipse Scout</title>
		<link>https://blog.developpez.com/jmini/p10851/eclipse/eclipse-scout/fragment_nodb_serveur_eclipse_scout</link>
		<comments>https://blog.developpez.com/jmini/p10851/eclipse/eclipse-scout/fragment_nodb_serveur_eclipse_scout#comments</comments>
		<pubDate>Sat, 17 Mar 2012 12:23:07 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[Eclipse Scout]]></category>
		<category><![CDATA[Mcqs]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les applications Eclipse Scout reposent sur un registre de service. Ces services sont définis par une interface, placé dans le plug-in shared accessible côté client comme côté serveur. L’appel à l’un de ces services s’effectue toujours de la même manière: IQuestionsListProcessService service = SERVICES.getService(IQuestionsListProcessService.class); Côté client, deux cas se présentent: * une implémentation est disponible [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Les applications Eclipse Scout reposent sur un registre de service. Ces services sont définis par une interface, placé dans le plug-in shared accessible côté client comme côté serveur. L’appel à l’un de ces services s’effectue toujours de la même manière:</p>
<p><code class="codecolorer text default"><span class="text">IQuestionsListProcessService service = SERVICES.getService(IQuestionsListProcessService.class);</span></code></p>
<p>Côté client, deux cas se présentent:<br />
* une implémentation est disponible côté client. Dans ce cas elle est retournée par cet appel.<br />
* l’implémentation se trouve côté serveur. Dans ce cas, un proxy est retourné, et l’appel à la fonction est transmis au serveur par Eclipse Scout. </p>
<p>Ce registre de services gère plusieurs implémentations pour une même interface. Il est possible de définir une priorité pour donner un ordre entre les implémentations.</p>
<p>D’où <a href="http://blog.developpez.com/jmini/p10257/demo/sakilapp/sans-base-de-donnees-utilisation-priorit/">mon idée de septembre dernier</a> de proposer pour chaque service une implémentation se passant de la base de données. Dans ce cas il n’y a plus de persistance des informations, mais dans le cas de démonstration ou de tests cela peut être suffisant.</p>
<p>Je l’ai mis en oeuvre pour mon <a href="http://code.google.com/a/eclipselabs.org/p/mcqs/">application MCQS</a>.</p>
<p>Depuis <a href="http://code.google.com/a/eclipselabs.org/p/mcqs/source/detail?r=730a1a58a314586eb416ca663fba129faadc3574">ce commit</a>, je dispose maintenant d’un fragment <a href="http://code.google.com/a/eclipselabs.org/p/mcqs/source/browse/#git%2Forg.eclipselabs.mcqs.server.nodb.frament">org.eclipselabs.mcqs.server.nodb.frament</a> qui propose une implémentation des services avec une priorité plus haute. Lorsque le fragment est chargé avec le serveur (ce qui est le cas avec le produit <a href="http://code.google.com/a/eclipselabs.org/p/mcqs/source/browse/#git%2Forg.eclipselabs.mcqs.server%2Fproducts%2Fnodb">server/products/nodb</a>), ce sont ses implémentations qui ont la priorité.</p>
<p>Ce n’est pas encore tout à fait parfait, car pour faire les choses proprement il ne faudrait pas avoir de dépendance à la base de données dans le plug-in serveur principal, mais dans un deuxième fragment (et utiliser l’un ou l’autre).</p>
<p>Mon fragment NoDB est rudimentaire. Il ne garde rien en mémoire, ce qui devrait être possible.</p>
<p>Dans tous les cas, c’est un bon cas d’exemple de l’annotation <strong>@Priority</strong> que l’on peut ajouter sur chacun des services.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Personnaliser son application Eclipse Scout</title>
		<link>https://blog.developpez.com/jmini/p10717/eclipse/eclipse-scout/personnaliser_application_eclipse_scout</link>
		<comments>https://blog.developpez.com/jmini/p10717/eclipse/eclipse-scout/personnaliser_application_eclipse_scout#comments</comments>
		<pubDate>Sat, 18 Feb 2012 08:20:38 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[Eclipse Scout]]></category>
		<category><![CDATA[Mcqs]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Donner une apparence finie à son application est une étape importante. Certains petits détails témoignent du soin apporté à l’application (ou de son bâclage dans le cas contraire). Par défaut, une application Eclipse Scout contient un certain nombre d’images qui sont des «place-holders» pour l’application finale. Il s’agit de tous les remplacer pour avoir une [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Donner une apparence finie à son application est une étape importante. Certains petits détails témoignent du soin apporté à l’application (ou de son bâclage dans le cas contraire).</p>
<p><img src="http://blog.developpez.com/media/splash-scout.png" width="452" height="282" alt="Splash screen - Eclipse Scout" /></p>
<p>Par défaut, une application Eclipse Scout contient un certain nombre d’images qui sont des «place-holders» pour l’application finale. Il s’agit de tous les remplacer pour avoir une application à l’apparence correcte.</p>
<p><img src="http://blog.developpez.com/media/splash-mcqs.png" width="452" height="282" alt="Splash screen - Mcqs" /></p>
<p><span id="more-19"></span><br />
<strong>Splash Screen</strong><br />
Affiché lors du chargement de l’application, il permet à l’utilisateur de savoir qu’il doit patienter et qu’il se passe quelque chose.</p>
<p>Il suffit d’ajouter un fichier splash.xxx à la racine du plug-in de lancement (Swing ou SWT en fonction du moteur de rendu choisi. Pour SWT sans changer les réglages par défaut de l’application RPC, il faudra utiliser un fichier bmp). Ne pas oublier de l’inclure dans le ficher build.properties (dans la catégorie binary build).</p>
<p><strong>Logo</strong><br />
Ce logo (grand) est notamment affiché dans la fenêtre «à propos de cette application».</p>
<p><img src="http://blog.developpez.com/media/about_dialog.png" width="400" height="318" alt="About dialog - Mcqs" /></p>
<p>Voir <a href="http://wiki.eclipse.org/Scout/HowTo/Exchange_Default_Images">ce tutoriel</a>.</p>
<p><strong>Icône</strong><br />
L’icône est également un élément important.</p>
<p><img src="http://blog.developpez.com/media/icon-mcqs.png" width="148" height="129" alt="Icone - Mcqs" /></p>
<p>Voir ce <a href="http://www.eclipse.org/forums/index.php/t/263221/" title=" Specific Application Icon">sujet de forum</a>. </p>
<p><strong>Page de téléchargement sur le serveur</strong><br />
Lorsque l’on se connecte en HTTP sur le serveur où est déployée l’application, on obtient une page de téléchargement. Il est important de personnaliser cette page.</p>
<p>La page en question se trouve dans le plug-in de l’application server sous /resources/html. </p>
<p><img src="http://blog.developpez.com/media/download_page-mcqs.png" width="400" height="391" alt="Page de téléchargement - Mcqs" /></p>
<p>Je n’ai pas fait beaucoup de modifications sur cette page, mais mon idée est de toute façon de proposer un installateur (voir ci après). J’ai donc laissé le texte en anglais et la description correspondant à une application windows.</p>
<p><strong>Installation</strong><br />
La prochaine étape va consister à se préoccuper de l’installation d’un produit fini. Il doit être possible:<br />
* d’installer ou de choisir une base de données Derby.<br />
* de configurer l’adresse à laquelle les clients devront se connecter.<br />
&#8230;</p>
<p>Encore un peu de travail en perspective&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>config.ini et setter dans Eclipse Scout</title>
		<link>https://blog.developpez.com/jmini/p10494/demo/eclipse_scout_config_ini_et_setter</link>
		<comments>https://blog.developpez.com/jmini/p10494/demo/eclipse_scout_config_ini_et_setter#comments</comments>
		<pubDate>Mon, 14 Nov 2011 16:39:09 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[Demo]]></category>
		<category><![CDATA[Eclipse Scout]]></category>
		<category><![CDATA[Mcqs]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les applications Eclipse Scout sont opérationnelles dès leur création à l’aide du template initial, mais pour bien comprendre leur fonctionnement, il y a pas mal de petits détails. Je voulais obtenir un code indépendant de la configuration de la base de données, c&#8217;est-à-dire utiliser le fichier config.ini (qui doit de toute façon être mis à [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Les applications Eclipse Scout sont opérationnelles dès leur création à l’aide du template initial, mais pour bien comprendre leur fonctionnement, il y a pas mal de petits détails.</p>
<p>Je voulais obtenir un code indépendant de la configuration de la base de données, c&rsquo;est-à-dire utiliser le fichier <code class="codecolorer text default"><span class="text">config.ini</span></code> (qui doit de toute façon être mis à jour leur d’un changement d’environnement).<br />
<span id="more-13"></span></p>
<p>Fidèle à sa logique, Eclipse Scout propose d’étendre la classe <code class="codecolorer text default"><span class="text">AbstractSqlService</span></code> pour définir la configuration d’accès à la base de données.</p>
<p>Il existe une propriété privée <code class="codecolorer text default"><span class="text">m_jdbcMappingName</span></code> qui est accessible par des getters et des setters publics. Dans la classe fille, il est d’usage d’indiquer une constante dans la fonction <code class="codecolorer text default"><span class="text">getConfigured*()</span></code> correspondante (<code class="codecolorer text default"><span class="text">getConfiguredJdbcMappingName()</span></code> dans ce cas). C’est ce que la perspective Eclipse fait si l’on utilise la «Scout Properties View».</p>
<p><img src="http://blog.developpez.com/media/object_properties_view_db.png" width="485" height="251" alt="Object Properties View - Sql Service" /></p>
<p>Le code correspondant:</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">@Override <br />
protected String getConfiguredJdbcMappingName() { <br />
&nbsp; return &quot;jdbc:derby:/Users/jebr/code/mcq/mcq_db.derby&quot;; <br />
}</div></div>
<p>À l’initialisation, cette valeur va être lue et devenir la valeur courante (accessible ensuite par le getter traditionnel).</p>
<p>Pourtant il existe une autre manière d’initialiser cette valeur. Il est possible d’utiliser dans le fichier config.ini une ligne respectant ce pattern:</p>
<p><code class="codecolorer text default"><span class="text">&lt;Qualified Name&gt;#&lt;Setter name without set prefix&gt;=&lt;value&gt;</span></code></p>
<p>Ainsi dans notre cas:<br />
<code class="codecolorer text default"><span class="text">org.eclipselabs.mcqs.server.services.common.sql.McqDerbySqlService#JdbcMappingName=jdbc:derby:/Users/jebr/code/mcq/mcq_db.derby</span></code></p>
<p>C’est magique&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les dépôts APT pour les installations sous Ubuntu, c&#8217;est génial!</title>
		<link>https://blog.developpez.com/jmini/p10428/divers/depots_apt_installation_ubuntu_genial</link>
		<comments>https://blog.developpez.com/jmini/p10428/divers/depots_apt_installation_ubuntu_genial#comments</comments>
		<pubDate>Mon, 24 Oct 2011 06:45:12 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[SakilApp]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Comme googlecode propose maintenant l&#8217;utilisation de Git et que son intégration dans Eclipse fonctionne bien grâce à EGit, je viens de réaliser non sans mal la migration de SVN à Git pour mon projet Sakilapp. Il existe évidemment un outil pour faire la conversion: git-svn Malheureusement sur mon Mac, il me manquait je ne sais [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Comme googlecode propose maintenant l&rsquo;utilisation de Git et que son intégration dans <a href="http://blog.developpez.com/jmini/p10102/eclipse/premieres-impressions-de-egit/">Eclipse fonctionne bien grâce à EGit</a>, je viens de réaliser non sans mal la migration de SVN à Git pour mon projet <a href="http://sakilapp.net/">Sakilapp</a>. Il existe évidemment un outil pour faire la conversion: <tt>git-svn</tt></p>
<p><img src="http://blog.developpez.com/media/svn_to_git.png" width="560" height="134" alt="Migration de SVN à Git" /></p>
<p>Malheureusement sur mon Mac, il me manquait je ne sais trop quoi (visiblement une bibliothèque Perl qui n’est pas installée, ou pas au bon endroit). Je ne suis pas un grand fan de toutes ces installations, j’aime les choses qui marchent en un clic (je crois que c’est pour cela que j’ai un Mac). Je me demandais ce que j’allais faire, et j’ai eu l’idée de ressortir un ordi sous Ubuntu&#8230;</p>
<p><span id="more-2"></span></p>
<p>J’ai alors ressorti un petit Notebook (un Eee Pc) sur lequel tourne un Ubuntu 10.04 (Netbook Edition).</p>
<p><img src="http://blog.developpez.com/media/Ubuntu_Desktop.jpg" width="600" height="351" alt="Ubuntu 10.04 Netbook Edition" /></p>
<p>Je ne l’avais plus utilisé depuis plusieurs mois, mais tout fonctionne toujours aussi bien.  Git était déjà installé, mais il manquait <tt>git-svn</tt>&#8230; Un petit tour du côté du <em>Gestionnaire de paquets Synaptic</em>, un clic dans la case <tt>git-svn</tt> et c’est tout&#8230; </p>
<p><img src="http://blog.developpez.com/media/Ubuntu_Synaptic.jpg" width="600" height="336" alt="Gestionnaire de paquets Synaptic" /></p>
<p>Pour moi qui ne suis pas un expert, c’est vraiment d’une simplicité bluffante. J’imagine que tout se télécharge, s’installe et se met à jour au bon endroit.</p>
<p>Il me semble que c’est vraiment un avantage des distributions Linux sur les autres systèmes d’exploitation.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Version sans base de données, utilisation de @Priority</title>
		<link>https://blog.developpez.com/jmini/p10257/demo/sakilapp/sans_base_de_donnees_utilisation_priorit</link>
		<comments>https://blog.developpez.com/jmini/p10257/demo/sakilapp/sans_base_de_donnees_utilisation_priorit#comments</comments>
		<pubDate>Tue, 06 Sep 2011 21:32:43 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[SakilApp]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La rentrée, l’occasion de relancer ma série d’articles sur Sakilapp. Aujourd’hui, un point sur une idée: l’utilisation du mécanisme de priorité dans les services pour proposer une version sans base de données de sakilapp. C’est un cas un petit peu particulier: je voulais pouvoir utiliser (pour des tests, pour des démonstrations) mon application sans sa [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>La rentrée, l’occasion de relancer ma <a href="http://blog.developpez.com/jmini/c2867/demo/sakilapp/">série d’articles</a> sur <a href="http://sakilapp.net/">Sakilapp.</a> Aujourd’hui, un point sur une idée: l’utilisation du mécanisme de priorité dans les services pour proposer une version sans base de données de sakilapp.<br />
<span id="more-18"></span></p>
<p>C’est un cas un petit peu particulier: je voulais pouvoir utiliser (pour des tests, pour des démonstrations) mon application sans sa base de données. Il ne s’agit pas d’une version hors ligne, car il n’y a pas de sauvegarde des modifications, ni de synchronisation par la suite.</p>
<p><strong>Comment cela marche ?</strong></p>
<p>C’est assez simple: j’ai implémenté une deuxième version de mon OutlineService pour le catalogue (DBMockOutlineService classe qui implémente ICatalogOutlineService). Le service est déclaré dans mon fichier plugin.xml</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">&lt;plugin&gt; <br />
&nbsp; &lt;extension point=&quot;org.eclipse.scout.service.services&quot;&gt; <br />
&nbsp; &nbsp; &lt;!-- ... --&gt; <br />
&nbsp; &nbsp; &lt;service class=&quot;net.sakilapp.server.services.outline.DBMockCatalogOutlineService&quot; session=&quot;net.sakilapp.server.ServerSession&quot; factory=&quot;org.eclipse.scout.rt.server.services.ServerServiceFactory&quot;/&gt; <br />
&nbsp; &lt;/extension&gt; <br />
&lt;!-- ... --&gt; <br />
&lt;/plugin&gt;</div></div>
<p>Pour donner la priorité à mon service (version DBMock) il suffit d’ajouter l’annotation @Priority avec une valeur supérieure aux autres implémentations du service.</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">@Priority(100) <br />
public class DBMockCatalogOutlineService extends AbstractService implements ICatalogOutlineService { <br />
&nbsp; //... <br />
}</div></div>
<p>Il s’agit enfin d’ajouter quelques valeurs fixes dans les fonctions qui alimentent les tables pages de l’outline catalogue.</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">public Object[][] loadActors(SearchFilter filter) throws ProcessingException { <br />
&nbsp;<br />
&nbsp; Object[][] result = new Object[][]{ <br />
&nbsp; &nbsp; &nbsp; new Object[]{18, &quot;DAN&quot;, &quot;TORN&quot;, DateUtility.parse(&quot;2006-02-01&quot;, &quot;yyy-MM-dd&quot;)}, <br />
&nbsp; &nbsp; &nbsp; new Object[]{26, &quot;RIP&quot;, &quot;CRAWFORD&quot;, DateUtility.parse(&quot;2006-02-25&quot;, &quot;yyy-MM-dd&quot;)} <br />
&nbsp;<br />
&nbsp; }; <br />
&nbsp; return result; <br />
}</div></div>
<p>Il me reste encore un petit peu de travail: ajouter ces services dans un plug-in séparé. De cette manière, je pourrais me créer un lanceur avec ces services. Cela me permettra de fonctionner sans la base de données.</p>
<p>PS: J’ai passé une partie de l’été à rédiger un article de référence sur Eclipse Scout en Français&#8230; Plus de nouvelles très bientôt.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accès au catalogue de films</title>
		<link>https://blog.developpez.com/jmini/p10030/demo/sakilapp/acces_au_catalogue_de_films</link>
		<comments>https://blog.developpez.com/jmini/p10030/demo/sakilapp/acces_au_catalogue_de_films#comments</comments>
		<pubDate>Wed, 08 Jun 2011 13:34:18 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[SakilApp]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai commencé l&#8217;application SakilApp par la vue permettant l&#8217;accès au catalogue de films. Cet article illustre comment les tables de la base de données se retrouvent dans l&#8217;application. MySQL fournit un fichier sakila.mwb qui permet grâce à MySQL Workbench, de visualiser la base de données. Pour le moment les tables de movie database sont couvertes [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai commencé l&rsquo;application <a href="http://www.sakilapp.net">SakilApp</a> par la vue permettant l&rsquo;accès au catalogue de films. Cet article illustre comment les tables de la base de données se retrouvent dans l&rsquo;application.<br />
<span id="more-17"></span></p>
<p>MySQL fournit un fichier <strong>sakila.mwb</strong> qui permet grâce à <a href="http://www.mysql.fr/products/workbench/">MySQL Workbench</a>, de visualiser la base de données. Pour le moment les tables de <em>movie database</em> sont couvertes (il manque les tables <code class="codecolorer text default"><span class="text">`inventory`</span></code> et <code class="codecolorer text default"><span class="text">`film_text`</span></code>, et il n&rsquo;est pas possible de modifier la table <code class="codecolorer text default"><span class="text">`language`</span></code>) </p>
<p><img src="http://blog.developpez.com/media/sakila-movie-database.png" width="647" height="540" alt="Sakila - movie database - EER Diagram" /></p>
<p>Cette partie de la base représente trois entités : les films, les catégories et les acteurs. Les films sont les plus importants et les plus nombreux. Ils une relation N:M avec les catégories (via la table <code class="codecolorer text default"><span class="text">`film_category`</span></code>) et avec les acteurs (via la table <code class="codecolorer text default"><span class="text">`film_actor`</span></code>). D&rsquo;ou l&rsquo;idée de proposer un accès aux films de différentes manière : soit directement à l&rsquo;aide d&rsquo;une recherche, soit en commençant par sélectionner une catégorie ou un acteur.</p>
<p><a href="http://blog.developpez.com/media/catalog-outline.png"><img src="http://blog.developpez.com/media/catalog-outline.png" width="650" height="439" alt="SakilApp - Catalog Outline - Eclipse Scout" /></a></p>
<p>Dans la fenêtre principale (proposée en standard par <a href="http://www.eclipse.org/scout/">Eclipse Scout</a>) on trouve :</p>
<ul>
<li>Sur la gauche se trouve une arborescence de dossiers permettant plusieurs type d&rsquo;accès (directe, par catégorie, par acteur).</li>
<li>Le contenu des dossiers au centre (films, catégories ou acteurs). Lorsque le contenu est important une recherche doit être effectuée. </li>
<li>En bas, un formulaire pour effectuer ces recherches.</li>
</ul>
<p>Techniquement, cette fenêtre principale utilise les concepts de d&rsquo;Eclipse Scout. Cette vue est définie dans un <a href="http://wiki.eclipse.org/Scout/Concepts/Outline">Outline</a> (<code class="codecolorer text default"><span class="text">CatalogOutline</span></code>). L’arborescence de dossiers est constituée de pages (on trouve une <a href="http://wiki.eclipse.org/Scout/Concepts/TablePage">TablePage</a> par entités : <code class="codecolorer text default"><span class="text">FilmsTablePage</span></code>, <code class="codecolorer text default"><span class="text">CategoriesTablePage</span></code>, <code class="codecolorer text default"><span class="text">ActorsTablePage</span></code>). Les données sont chargées via un <a href="http://wiki.eclipse.org/Scout/Concepts/Outline_Service">OutlineService</a> (<code class="codecolorer text default"><span class="text">CatalogOutlineService</span></code>) </p>
<p><img src="http://blog.developpez.com/media/outline-action.png" width="624" height="373" alt="SakilApp - AbstractMenu - Eclipse Scout" /></p>
<p>Pour chaque dossier des fonctions d&rsquo;ajout, d&rsquo;édition et de suppression du contenu sont proposées à travers des menus. L&rsquo;édition et l&rsquo;ajout des différentes entités est réalisée à travers différents formulaires qui sont ouvert dans des fenêtres modales. La base de données impose que certaines valeurs ne reste pas nulle (propriété <code class="codecolorer text default"><span class="text">NOT NULL</span></code>). Dans Eclipse Scout, les champs correspondant apparaissent en gras et le formulaire ne peut être être fermé tant que les champs sont vides.</p>
<p>Techniquement les menus (Classe filles de <a href="http://wiki.eclipse.org/Scout/Concepts/Menu">AbstractMenu</a>) sont défini dans les différentes tables concernées. Pour chaque entités un <a href="http://wiki.eclipse.org/Scout/Concepts/Form">Form</a> est défini (<code class="codecolorer text default"><span class="text">FilmForm</span></code>, <code class="codecolorer text default"><span class="text">CategoryForm</span></code>, <code class="codecolorer text default"><span class="text">ActorForm</span></code>).</p>
<p><img src="http://blog.developpez.com/media/fields.png" width="682" height="325" alt="Eclipse Scout - Fields" /></p>
<p>La base de donnée (surtout sa structure) définie précisément les caractéristiques de certains champs. On trouve certains type particuliers (texte, nombre, date). On trouve aussi des choix limités: définit par les sets (par exemple <code class="codecolorer text default"><span class="text">`film`.`special_features`</span></code>) ou par les enums (par exemple <code class="codecolorer text default"><span class="text">`film`.`rating`</span></code>). Et aussi des références vers d&rsquo;autres table (comme la langue du film qui référence la table <code class="codecolorer text default"><span class="text">`language`</span></code>). Eclipse Scout propose différents type de champs pour permettre une saisie simple et efficace (<a href="http://wiki.eclipse.org/Scout/Concepts/DateField">DateField</a>, <a href="http://wiki.eclipse.org/Scout/Concepts/SmartField">SmartField</a>&#8230;). Les options pour les champs <code class="codecolorer text default"><span class="text">`rating`</span></code> et <code class="codecolorer text default"><span class="text">`special_features`</span></code> sont défini dans des <a href="http://wiki.eclipse.org/Scout/Concepts/CodeType">CodeType</a> (<code class="codecolorer text default"><span class="text">RatingCodeType</span></code>, <code class="codecolorer text default"><span class="text">SpecialFeatureCodeType</span></code>). Pour le choix de la langue, la table language est disponible à travers un <a href="http://wiki.eclipse.org/Scout/Concepts/LookupCall">LookupCall</a> et un <a href="http://wiki.eclipse.org/Scout/Concepts/Lookup_Service">LookupService</a> (<code class="codecolorer text default"><span class="text">LanguageLookupCall</span></code> and <code class="codecolorer text default"><span class="text">LanguageLookupService</span></code>). </p>
<p>La suite au prochain épisode&#8230;</p>
<p><strong>Disclaimer :</strong><br />
Je travaille pour <em>BSI Business System Integration AG</em>, la société créatrice du framework Eclipse Scout. Les propos tenus ici n&rsquo;engagent que moi. Cet article a été écrit en dehors de mon temps de travail et n&rsquo;a pas été relu par mon employeur.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Une application pour un loueur de film</title>
		<link>https://blog.developpez.com/jmini/p10020/demo/sakilapp/une_application_pour_un_loueur_de_film</link>
		<comments>https://blog.developpez.com/jmini/p10020/demo/sakilapp/une_application_pour_un_loueur_de_film#comments</comments>
		<pubDate>Sun, 29 May 2011 11:04:56 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[SakilApp]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Suivant mon idée de présenter Eclipse Scout à travers un cas concret, je me suis dit que le challenge consisterait à partir d&#8217;une base de donnée existante. Premièrement cela me permet d&#8217;avoir un cas concret (le besoin est défini, on est pas dans une simple démonstration). Deuxièmement cela limite le périmètre des fonctionnalités. Troisièmement cela [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Suivant <a href="http://blog.developpez.com/jmini/p9995/demo/sakilapp/project-g-new-g-scout-project/">mon idée</a> de présenter <a href="http://eclipse.org/scout/">Eclipse Scout</a> à travers un cas concret, je me suis dit que le challenge consisterait à partir d&rsquo;une base de donnée existante. Premièrement cela me permet d&rsquo;avoir un cas concret (le besoin est défini, on est pas dans une simple démonstration). Deuxièmement cela limite le périmètre des fonctionnalités. Troisièmement cela permet d&rsquo;utiliser le framework avec une base qui n&rsquo;a pas été faite pour lui. Le code source est évidement disponible, publié sous licence Apache.<br />
<span id="more-16"></span></p>
<p>J&rsquo;ai retenu la base de données <a href="http://dev.mysql.com/doc/sakila/en/sakila.html">Sakila</a>, proposé par MySql en démonstration des fonctionnalités de MySQL 5. A vrai dire je n&rsquo;ai pas fait de grosse étude de marché pour faire mon choix. J&rsquo;ai découvert cette base en m&rsquo;intéressant à MySQL. Elle est suffisamment complète pour qu&rsquo;il y ait un intérêt (22 tables, clé primaire et clé externes, vues, trigger,  procédures&#8230;). La lecture de <a href="http://blog.developpez.com/sqlpro/p9136/langage-sql-norme/mysql-un-sgbdr-poudre-aux-yeux/">cette analyse des manques de MySQL</a>, me fait penser que MySQL n&rsquo;est pas forcément un bon choix pour ce genre d&rsquo;application, mais cette base existe aussi pour PosgreSQL (<a href="http://pgfoundry.org/projects/dbsamples/">pagila</a>) et je privilégie la simplicité d&rsquo;utiliser un outil que je connais. </p>
<p><img src="http://blog.developpez.com/media/sakilapp_splash_screen.jpg" width="452" height="282" alt="SakilApp - Splash screen" /></p>
<p>Cette base de données sert à gérer l&rsquo;activité d&rsquo;un loueur de DVD (gestion d&rsquo;un catalogue de films, de différents magasins avec leurs équipes et leur clients, ainsi que l&rsquo;activité au quotidien).</p>
<p>Ce sera donc le projet et l&rsquo;application SakilApp. L&rsquo;idée est de pouvoir visualiser et éditer toutes les informations contenues dans la base de données, en suivant la manière du framework. Je souhaiterais illustrer et commenter mes choix, tout en aboutissant à un produit fini.</p>
<p>Mon premier objectif est que toutes les informations de la base de données soient accessibles et éditables dans l&rsquo;application. Il y a cependant du potentiel pour des développements après cette première version. Par exemple optimiser l&rsquo;interface graphique pour une utilisation dans une boutique de location de film, ou encore intégrer dans l&rsquo;application des fonctionnalités de reporting.</p>
<p><img src="http://blog.developpez.com/media/sakilapp_catalog_outline.jpg" width="600" height="326" alt="SakilApp - Catalogue" /></p>
<p>Je souhaite également proposer un accès au code source. J&rsquo;ai donc ouvert <a href="http://code.google.com/p/sakilapp/">un projet sur google code</a> contenant les projets de mon workspace Eclipse. Lorsque le projet sera plus avancé, j&rsquo;espère également pouvoir mettre à disposition l&rsquo;application sous sa forme compilée.</p>
<p>Le code est sous licence <a href="http://www.opensource.org/licenses/apache2.0.php">Apache 2</a>, pour que chacun puisse y avoir accès. Je n&rsquo;en suis vraiment qu&rsquo;au début du développement, et ne conserve pas forcément le code correspondant aux articles. Il s&rsquo;agit surtout pour moi de faire des expériences et des essais, tout en illustrant les articles que je publie.</p>
<p><strong>Disclaimer :</strong><br />
Je travaille pour <em>BSI Business System Integration AG</em>, la société créatrice du framework Eclipse Scout. Les propos tenus ici n&rsquo;engagent que moi. Cet article a été écris en dehors de mon temps de travail et n&rsquo;a pas été relu par mon employeur.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Project &gt; New&#8230; &gt; Scout Project</title>
		<link>https://blog.developpez.com/jmini/p9995/eclipse/eclipse-scout/new_scout_project</link>
		<comments>https://blog.developpez.com/jmini/p9995/eclipse/eclipse-scout/new_scout_project#comments</comments>
		<pubDate>Fri, 20 May 2011 16:34:28 +0000</pubDate>
		<dc:creator><![CDATA[jmini]]></dc:creator>
				<category><![CDATA[Eclipse Scout]]></category>
		<category><![CDATA[SakilApp]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Il y a un an j&#8217;ai découvert le framework Eclipse Scout dans le cadre de mon travail. De nombreux projets de ma société sont basés sur ce framework. En parallèle 2010 est aussi l&#8217;année où cette contribution a été accepté comme projet par la fondation Eclipse&#8230; Après plusieurs mois pour franchir toutes les étapes du [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Il y a un an j&rsquo;ai découvert le framework <a href="http://www.eclipse.org/scout/">Eclipse Scout</a> dans le cadre de mon travail. De nombreux projets de ma société sont basés sur ce framework. En parallèle 2010 est aussi l&rsquo;année où cette contribution a été accepté comme projet par la fondation Eclipse&#8230; Après plusieurs mois pour franchir toutes les étapes du <a href="http://www.eclipse.org/projects/dev_process/development_process.php">Eclipse Development Process</a>, le code source est disponible sur les serveurs de la fondation sous licence EPL et Eclipse Scout fait parti du <em>release train</em> <a href="http://wiki.eclipse.org/Indigo/Simultaneous_Release_Plan">Eclipse Indigo</a>.<br />
<span id="more-15"></span></p>
<p>Eclipse Scout est un framework qui permet de créer rapidement des applications (plutôt de type client / serveur). L&rsquo;idée est de simplifier au maximum la barrière d&rsquo;entrée pour créer des applications sur la plateforme Eclipse.</p>
<p><img src="http://blog.developpez.com/media/Gallery-Scout-Application.jpg" width="550" height="342" alt="Une application Eclipse Scout" /></p>
<p>Un tel objectif ne va pas sans faire des choix et introduire de nombreux concepts. Certains peuvent parfois sembler limitant (mais devraient couvrir la majorité des besoins), d&rsquo;autres sont assez puissants (comme le choix de la librairie de rendu : SWT, Swing, web&#8230;). Quoi qu&rsquo;il en soit, il manque pour le moment un certain nombre de publications et d&rsquo;exemples pour mettre Eclipse Scout à la porté de tous ceux qui veulent s&rsquo;y intéresser. </p>
<p>Je pense que ce framework peut correspondre à certains besoins&#8230; Mon idée est de partager sur ce blog ma découverte et d&rsquo;en présenter suffisamment pour donner à d&rsquo;autre l&rsquo;envie de partir à la découverte. Mon intuition est qu&rsquo;il faut donner des exemples et les expliquer. J&rsquo;ai envie de repartir de zero et de voir comment le framework permet de construire une application qui exploiterait une base de données existante. </p>
<p><img src="http://blog.developpez.com/media/New-Eclipse-Scout-Project.png" width="334" height="110" alt="New Eclipse Scout Project" /></p>
<p>Au delà du code et des exemples, Eclipse Scout c&rsquo;est aussi beaucoup d&rsquo;autre chose : rendre open-source un projet pré-existant dans une entreprise, travailler avec la fondation Eclipse, esssayer de bâtir une communauté. J&rsquo;espère avoir aussi le temps de parler de tout cela sur ce blog.</p>
<p><strong>Disclaimer :</strong><br />
Je travaille pour <em>BSI Business System Integration AG</em>, la société créatrice du framework Eclipse Scout. Les propos tenus ici n&rsquo;engagent que moi. Cet article a été écrit en dehors de mon temps de travail et n&rsquo;a pas été relu par mon employeur.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
