<?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>@Repository(&#34;djo&#34;) &#187; SpringSource DM Server/S2AP</title>
	<atom:link href="https://blog.developpez.com/djo-mos/pcategory/java/spring/springsource-dm-servers2ap/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/djo-mos</link>
	<description></description>
	<lastBuildDate>Sun, 27 Sep 2009 00:05:37 +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>Sortie de Spring DM Server 2.0 M1</title>
		<link>https://blog.developpez.com/djo-mos/p7434/annonces/sortie_de_spring_dm_server_2_0_m1</link>
		<comments>https://blog.developpez.com/djo-mos/p7434/annonces/sortie_de_spring_dm_server_2_0_m1#comments</comments>
		<pubDate>Thu, 02 Apr 2009 20:01:53 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[SpringSource frappe fort : ils viennent d&#8217;annoncer la sortie du premier milestone de DM Server 2.0. J&#8217;ai pas vu le coup venir : rien qu&#8217;Hier, Rob Harrop a publié un billet où il parle de leurs plans pour Spring DM Server 2, et e lendemain, ils publient un premier milestone &#8230; Voici rapidement les quelques nouveautés apportées par cette version : => Utilisation de Scrum comme processus de développement (c&#8217;est bien comme ça qu&#8217;on l&#8217;appèlle [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>SpringSource frappe fort : ils viennent d&rsquo;annoncer la sortie du premier milestone de DM Server 2.0.<br />
J&rsquo;ai pas vu le coup venir : rien qu&rsquo;Hier, Rob Harrop a publié <a href="http://blog.springsource.com/2009/04/01/springsource-dm-server-roadmap/">un billet</a> où il parle de leurs plans pour Spring DM Server 2, et e lendemain, ils publient un premier milestone &#8230;</p>
<p>Voici rapidement les quelques nouveautés apportées par cette version :<br />
<span id="more-184"></span><br />
=> Utilisation de Scrum comme processus de développement (<em>c&rsquo;est bien comme ça qu&rsquo;on l&rsquo;appèlle hein ?</em>)<br />
=> Premier support de la notion de plans : pensez les features d&rsquo;Eclipse. Je tiens à préciser que j&rsquo;avais abandonné DM Server 1 à cause de la notion de PAR, une sorte de regroupement de bundles dans un archive, ce qui va tout simplement à l&rsquo;encontre de l&rsquo;essence de l&rsquo;OSGi. Avec les plans, un simple descripteur xml d&rsquo;un ensemble de bundles, je crois qu&rsquo;une ré-évaluation des choses s&rsquo;impose <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /><br />
=> Premier support de la notion de cloning : j&rsquo;ai pas encore approfondi ma lecture la dessus, je peux donc pas présenter ce que c&rsquo;est.</p>
<p>Voici maintenant quelques liens clés :<br />
=> <a href="http://blog.springsource.com/2009/04/02/announcing-dm-server-20-m1/">Annonce</a><br />
=> <a href="http://www.springsource.com/download/community?project=SpringSource%20dm%20Server&amp;version=2.0.0.M1">Téléchargement</a><br />
=> <a href="https://issuetracker.springsource.com/secure/RunPortlet.jspa?portletKey=com.pyxis.greenhopper.jira:greenhopper-releasenotes&amp;projectid=10054&amp;fields=,summary&amp;versionId=10140&amp;includeSubs=false">Release notes</a><br />
=> Doc : <a href="http://static.springsource.org/s2-dmserver/2.0.x/getting-started/html/">Getting Started</a>, <a href="http://static.springsource.org/s2-dmserver/2.0.x/user-guide/html/">User Guide</a>, <a href="http://static.springsource.org/s2-dmserver/2.0.x/programmer-guide/html/">Dev Guide</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développez votre première application multi-bundles avec SpringSource Application Platform et eclipse (1)</title>
		<link>https://blog.developpez.com/djo-mos/p5922/eclipse/developpez_votre_premiere_application_mu</link>
		<comments>https://blog.developpez.com/djo-mos/p5922/eclipse/developpez_votre_premiere_application_mu#comments</comments>
		<pubDate>Thu, 19 Jun 2008 15:25:04 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Suite à ce billet : Vos premiers pas avec SpringSource Application Platform et eclipse où j&#8217;avais montré comment configurer le tooling STS avec Eclipse ainsi que la création et le déploiement d&#8217;une application exemple, je vais montrer dans ce billet comment développer une application multi-tiers s&#8217;étalant sur plusieurs bundles. 1. Vue d&#8217;ensemble L&#8217;application que je vais utiliser comme exemple est simpliste : elle ne sert qu&#8217;à afficher une liste de personnes (peu importe comment cette [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Suite à ce billet : <a href="http://blog.developpez.com/djo-mos?title=vos_premiers_pas_avec_springsource_appli">Vos premiers pas avec SpringSource Application Platform et eclipse</a> où j&rsquo;avais montré comment configurer le tooling STS avec Eclipse ainsi que la création et le déploiement d&rsquo;une application exemple, je vais montrer dans ce billet comment développer une application multi-tiers s&rsquo;étalant sur plusieurs bundles.</p>
<p><span id="more-181"></span></p>
<h2 style="text-align: left;">1. Vue d&rsquo;ensemble</h2>
<p>L&rsquo;application que je vais utiliser comme exemple est simpliste : elle ne sert qu&rsquo;à afficher une liste de personnes (peu importe comment cette liste est retrouvée) dans une page web.</p>
<p>Seulement, histoire de faire propre, je vais découper cette application en 4 bundles:</p>
<ol>
<li><strong>domain</strong>: C&rsquo;est un bundle qui définit les objets métier (un seul dans notre cas: Person)</li>
<li><strong>service-api</strong>: C&rsquo;est un bundle qui définit les interfaces (contrats) de la couche métier</li>
<li><strong>service-impl</strong>: C&rsquo;est un bundle qui définit les implémentations des services mais aussi les exporte en tant que services OSGi qui seront consommés par le dernier bundle.</li>
<li><strong>web-frontend</strong>: C&rsquo;est un bundle qui définit le front-end web de l&rsquo;application et qui consomme les services exposés par service-impl</li>
</ol>
<p><strong>N.B.: </strong>Je suppose tout au long de ce billet que le serveur S2AP ainsi que le tooling Eclipse correspondant est déjà en place <a href="http://blog.developpez.com/djo-mos?title=vos_premiers_pas_avec_springsource_appli">comme je le montre ici</a>.</p>
<h2 style="text-align: left;">2. Créer le bundle domain</h2>
<p>Dans Eclipse, lancez le wizard &laquo;&nbsp;New Bundle Project&nbsp;&raquo; :</p>
<p><img src="http://farm3.static.flickr.com/2056/2487301296_2f642edb00_o.png" alt="New Bundle Project" title="" /></p>
<p>Saisissez un nom parlant pour ce bundle (<em>djo.s2ap.demo.domain</em> pour moi) et cliquez sur Next.<br />
Là, et c&rsquo;est une nouveauté dans le tooling S2AP pour Eclipse (sur une <a href="https://issuetracker.springsource.com/browse/PLATFORM-13">suggestion de ma part</a>, merci à Christian Dupuis qui l&rsquo;a implémenté), il est possible de choisir le type du bundle (None ou Web) :</p>
<p><img src="http://farm4.static.flickr.com/3265/2587066329_2d6bf6386d_o.png" alt="Bundle Personality" title="" /></p>
<p>Choissisez None et validez.<br />
Créer un package dans le dossier src (j&rsquo;utilise habituellement le nom du projet comme package de base), et créez une classe Person (forcément, mon type de données préféré <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> )</p>
<blockquote><pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">package djo.s2ap.demo.domain; <br />
&nbsp;<br />
public class Person { <br />
&nbsp; private String name; <br />
&nbsp; private int age; <br />
&nbsp;<br />
&nbsp; public Person(String name, int age) { <br />
&nbsp; &nbsp; super(); <br />
&nbsp; &nbsp; this.name = name; <br />
&nbsp; &nbsp; this.age = age; <br />
&nbsp; } <br />
&nbsp;<br />
&nbsp; public String getName() { <br />
&nbsp; &nbsp; return name; <br />
&nbsp; } <br />
&nbsp;<br />
&nbsp; public void setName(String name) { <br />
&nbsp; &nbsp; this.name = name; <br />
&nbsp; } <br />
&nbsp;<br />
&nbsp; public int getAge() { <br />
&nbsp; &nbsp; return age; <br />
&nbsp; } <br />
&nbsp;<br />
&nbsp; public void setAge(int age) { <br />
&nbsp; &nbsp; this.age = age; <br />
&nbsp; } <br />
&nbsp;<br />
}</div></div>

</pre>
</blockquote>
<p>Je vais me contenter de cette classe comme mon domaine.</p>
<p>Il faut ensuite exporter le package de cette classe pour qu&rsquo;elle soit visible aux autres bundles.<br />
Pour ce faire, localisez le fichier src/META-INF/MANIFEST.MF et double-cliquez la dessus, ce qui ouvre l&rsquo;éditeur de manifest de STS (encore une fonctionnalité <a href="https://issuetracker.springsource.com/browse/PLATFORM-17">proposé par l&rsquo;auteur de ce billet (moi)</a> et implémentée par l&rsquo;equipe STS (re-merci) !).<br />
Dans l&rsquo;éditeur multi-pages qui se lance, localisez la page &laquo;&nbsp;Runtime&nbsp;&raquo; et activer la.<br />
A gauche, vous trouverez une liste présentant les packages exportés par le bundle en question. Cliquez sur le bouton &laquo;&nbsp;Add&nbsp;&raquo; et dans la fenêtre qui s&rsquo;affiche, sélectionnez l&rsquo;unique package présent (djo.s2ap.demo.domain).</p>
<p>Sinon, il est toujours possible de travailler directement sur le manifest en utilisant le contenu suivant:</p>
<blockquote><pre>

<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">Manifest-Version: 1.0 <br />
Bundle-Version: 1.0.0 <br />
Bundle-Name: Domain Bundle <br />
Bundle-ManifestVersion: 2 <br />
Bundle-SymbolicName: djo.s2ap.demo.domain <br />
Export-Package: djo.s2ap.demo.domain</div></div>

</pre>
</blockquote>
<p>Voilà, le premier bundle est prêt.</p>
<h2 style="text-align: left;">3. Créer le bundle service-api</h2>
<p>Comme énoncé plus haut, ce bundle va juste définir les contrats des services (sous forme d&rsquo;interfaces). C&rsquo;est LE pattern OSGi à mon avis, i.e. séparer l&rsquo;interface de l&rsquo;implémentation dans des bundles différents, histoire de pouvoir changer (mettre à jour, corriger des bugs, peaufiner, etc.) l&rsquo;implémentation séparément de son interface mais aussi pour éviter que le consommateur d&rsquo;un service ne dépende de son implémentation.</p>
<p>Dans le cadre de cette application exemple, je vais me contenter d&rsquo;un seul service exposant une seule fonctionnalité qui est de récupérer une liste de personnes.</p>
<p>Commencez par créer un autre bundle nommé &laquo;&nbsp;djo.s2ap.demo.service.api&nbsp;&raquo; dans mon cas (même procédure que pour le bundle domain, choisissez &laquo;&nbsp;None&nbsp;&raquo; comme personality).<br />
Ce bundle aura besoin de voir la classe Person du bundle domain.<br />
Or, justement, j&rsquo;ai exporté le package contenant cette classe. Il ne reste plus qu&rsquo;à importer ce package dans le bundle service.api.</p>
<p>Pour ce faire, localisez et double-cliquez sur le fichier &laquo;&nbsp;src/META-INF/MANIFEST.MF&nbsp;&raquo; du bundle service.api.<br />
Dans l&rsquo;éditeur multi-pages qui s&rsquo;affiche, activez la page &laquo;&nbsp;Dependencies&nbsp;&raquo;.<br />
Dans la liste à gauche (Import Package&nbsp;&raquo;, cliquez sur Add, et localisez le package &laquo;&nbsp;djo.s2ap.demo.domain&nbsp;&raquo; contenant la classe Person (utilisez le filtre):</p>
<p><img src="http://farm4.static.flickr.com/3073/2587263779_de6f479612_o.png" alt="Import Package" title="" /></p>
<p>Sélectionnez ce package et validez.<br />
Ainsi, la classe Person devient visible dans le second bundle.</p>
<p>Créez ensuite un package &laquo;&nbsp;djo.s2ap.demo.service.api&nbsp;&raquo; avec une interface IPersonRepository dont voici le code:</p>
<blockquote><pre>

<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">package djo.s2ap.demo.service.api; <br />
&nbsp;<br />
import java.util.List; <br />
&nbsp;<br />
import djo.s2ap.demo.domain.Person; <br />
&nbsp;<br />
public interface IPersonRepository { <br />
&nbsp; List&lt;Person&gt; getPersonsList(); <br />
}</div></div>

</pre>
</blockquote>
<p>Pour finir, il faut exporter le package qui définit cette interface car l&rsquo;implémentation de ce service aura besoin d&rsquo;y accéder.<br />
Donc, comme montré plus haut, exportez le package &laquo;&nbsp;djo.s2ap.demo.service.api&nbsp;&raquo; en utilisant soit l&rsquo;editeur graphique du manifest ou en jouant directement sur le manifest.</p>
<h2 style="text-align: left;">4. to be continued</h2>
<p>Faute d&rsquo;espace et de temps, je vais m&rsquo;arrêter là pour ce billet et je finirais la chose bientôt dans un autre billet.</p>
<p><ins>Toujours faute de temps, mais aussi à cause du fait que j&rsquo;ai abandonné S2DMS, j&rsquo;arrive pas à finir le second volet <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley" /><br />
J&rsquo;espère au moins pouvoir parler des raisons du pourquoi j&rsquo;ai abandonné cette plateforme (1 raison plus précisément, la notion de PAR)</ins></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sortie de SpringSource DM Server RC 2</title>
		<link>https://blog.developpez.com/djo-mos/p6371/annonces/sortie_de_springsource_dm_server_rc_2</link>
		<comments>https://blog.developpez.com/djo-mos/p6371/annonces/sortie_de_springsource_dm_server_rc_2#comments</comments>
		<pubDate>Thu, 11 Sep 2008 22:30:50 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Le second et dernier release candidate de SpringSource DM Server, anciennement appelé SpringSource Application Platform vient tout juste de sortir. Pour rappel, SpringSource DM Server est une nouvelle génération de serveurs Java offrant OSGi comme modèle de programmation (qui utilise Spring Dynamic Modules en interne). Quelques nouveautés: Renommage de SpringSource Application Platform à SpringSource DM Server Utilisation de Tomcat 6.0.18 Quelques renommage de classes Bug fixes La version finale est prévue dans 2 semaines. A [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Le second et dernier release candidate de <strong><em>SpringSource DM Server</em></strong>, anciennement appelé <em>SpringSource Application Platform</em> vient tout juste de sortir.</p>
<p>Pour rappel, SpringSource DM Server est une nouvelle génération de serveurs Java offrant OSGi comme modèle de programmation (qui utilise Spring Dynamic Modules en interne).</p>
<p>Quelques nouveautés:<br />
<span id="more-183"></span></p>
<ul>
<li>Renommage de SpringSource Application Platform à SpringSource DM Server</li>
<li>Utilisation de Tomcat 6.0.18</li>
<li>Quelques renommage de classes</li>
<li>Bug fixes</li>
</ul>
<p>La version finale est prévue dans 2 semaines.</p>
<p>A noter qu&rsquo;il faut <a href="http://www.springsource.com/beta/dmserver/">s&rsquo;enregistrer dans leur programme Beta</a> pour pouvoir télécharger SpringSource DM Server.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prototype d&#8217;Application Client/Serveur avec Eclipse RCP et S2AP</title>
		<link>https://blog.developpez.com/djo-mos/p6018/eclipse/prototype_d_application_client_serveur_a</link>
		<comments>https://blog.developpez.com/djo-mos/p6018/eclipse/prototype_d_application_client_serveur_a#comments</comments>
		<pubDate>Sat, 05 Jul 2008 00:54:24 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[OSGi]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Juste pour signaler que j&#8217;ai enfin réussi à mettre en place un prototype d&#8217;une application client/serveur full-OSGi où le server est un par tournant dans S2AP et le client est une application Eclipse RCP. Le serveur et le client sont architecturés comme suit: Le serveur est un ensemble de bundles OSGi tournant sur S2AP (beta 8) composé comme suit: un bundle définissant un PAO un bundle définissant l&#8217;interface d&#8217;un DAO un bundle définissant une implémentation [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juste pour signaler que j&rsquo;ai enfin réussi à mettre en place un prototype d&rsquo;une application client/serveur full-OSGi où le server est un par tournant dans S2AP et le client est une application Eclipse RCP.</p>
<p>Le serveur et le client sont architecturés comme suit:</p>
<p><span id="more-159"></span></p>
<ul>
<li>Le serveur est un ensemble de bundles OSGi tournant sur S2AP (beta 8) composé comme suit:
<ul>
<li>un bundle définissant un PAO</li>
<li>un bundle définissant l&rsquo;interface d&rsquo;un DAO</li>
<li>un bundle définissant une implémentation du DAO utilisant Spring JDBC, MySQL et Apache DBCP</li>
<li>un bundle exposant ce DAO pour accès distant via Hessian/Spring</li>
</ul>
</li>
<li>Le client est une application à base d&rsquo;Eclipse RCP (3.4) qui est constitué de :
<ul>
<li>un bundle définissant un PAO (exactement le même que celui deployé dans le serveur)</li>
<li>un bundle définissant l&rsquo;interface d&rsquo;un DAO (exactement le même que celui deployé dans le serveur)</li>
<li>un bundle qui importe le DAO distant (toujours via Hessian/Spring) et l&rsquo;expose en tant que Service OSGi (via Spring DM)</li>
<li>un plug-in qui définit l&rsquo;aplication RCP</li>
<li>un plug-in qui ddéfinit une perspective et une vue affichant la liste des PAOs récupérés par le DAO distant tournant sur le serveur.</li>
</ul>
</li>
</ul>
<p>Ca m&rsquo;a pris 2 jours (plus précisément 2 demi-journées et 1 nuit blanche), et même si le résultat est juste un proof-of-concept, sa mise en place etait vraiment douleureuse.</p>
<p>Je compte donc faire partager cette expérience en montrant, captures, explications et sources à l&rsquo;appui, comment réaliser celà, enfin, si ça intéresse quelqu&rsquo;un <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Par contre, j&rsquo;hésite encore sur le format : soit une série de billets dans ce blog, ou encore un article en bonne et due forme. Toutefois, ça risque de prendre du temps quand même &#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Vos premiers pas avec  Springsource Application Platform et eclipse</title>
		<link>https://blog.developpez.com/djo-mos/p5679/eclipse/vos_premiers_pas_avec_springsource_appli</link>
		<comments>https://blog.developpez.com/djo-mos/p5679/eclipse/vos_premiers_pas_avec_springsource_appli#comments</comments>
		<pubDate>Tue, 13 May 2008 18:22:23 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans ce billet, je vais présenter les taches d&#8217;installation de SpringSource Application Platform (S2AP) ainsi que le tooling Spring sur eclipse, ce qui permet de simplifier énormément le développement d&#8217;applications OSGi. 1.Préparation de l&#8217;environnement 1.1. Téléchargement et installation du serveur S2AP Le serveur S2AP peut être téléchargé ici moyennant l&#8217;inscription dans le programme Beta de SpringSource (rien d&#8217;effrayant: juste un un petit formulaire à remplir, et hop). Notez que la plateforme est divisée en deux [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans ce billet, je vais présenter les taches d&rsquo;installation de SpringSource Application Platform (S2AP) ainsi que le tooling Spring sur eclipse, ce qui permet de simplifier énormément le développement d&rsquo;applications OSGi.<br />
<span id="more-180"></span></p>
<h1 style="text-align: left;">1.Préparation de l&rsquo;environnement</h1>
<h2 style="text-align: left;">1.1. Téléchargement et installation du serveur S2AP</h2>
<p>Le serveur S2AP peut être téléchargé ici moyennant <a href="http://www.springsource.com/beta/applicationplatform/">l&rsquo;inscription dans le programme Beta de SpringSource</a> (rien d&rsquo;effrayant: juste un un petit formulaire à remplir, et hop).<br />
Notez que la plateforme est divisée en deux paquetages (à cause d&rsquo;histoires de licences):<br />
&#8211; springsource-ap-1.0.0.beta2.zip<br />
&#8211; springsource-ap-epl-1.0.0.beta2.zip</p>
<p>Téléchargez les deux paquetages, et à moins que vous ne soyez sur Gnome 2.22 (comme je le suis) qui offre une fonctionnalité de merge super-utile, l&rsquo;installation va être un peu ennuyante:<br />
&#8211; Extraire les deux archives (ils portent le même nom, donc, il faut les extraire dans des dossiers séparés)<br />
&#8211; Déplacer tous les fichiers du second paquetage dans l&rsquo;emplacement adéquat à l&rsquo;intérieur du dossier d&rsquo;extraction du premier paquetage.<br />
&#8211; Voilà. Le User guide de S2AP indique qu&rsquo;il faut renseigner une variable d&rsquo;environnement PLATFORM_HOME mais je ne l&rsquo;ai pas fait, et ça tourne sans problèmes &#8230;</p>
<p>Pour tester si tout s&rsquo;est bien passé, allez au dossier d&rsquo;installation puis au sous dossier bin et lancez startup.sh (ou .bat, selon votre plateforme). Vous devriez avoir dans la console un log similaire à celui-ci:</p>
<blockquote><pre>

<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">[2008-05-12 14:38:41.654] main &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;SPKB0001I&gt; Platform starting. <br />
[2008-05-12 14:38:46.198] main &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;SPKE0000I&gt; Boot subsystems installed. <br />
[2008-05-12 14:38:47.441] main &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;SPKE0001I&gt; Base subsystems installed. <br />
[2008-05-12 14:38:50.554] platform-dm-14 &nbsp; &lt;SPPM0000I&gt; Installing profile 'web'. <br />
[2008-05-12 14:38:53.787] platform-dm-14 &nbsp; &lt;SPPM0001I&gt; Installed profile 'web'. <br />
[2008-05-12 14:38:54.222] platform-dm-1 &nbsp; &nbsp;&lt;SPSC0001I&gt; Starting ServletContainer on port 8080 and SSL port 8443. <br />
[2008-05-12 14:38:55.083] platform-dm-9 &nbsp; &nbsp;&lt;SPPM0002I&gt; Platform open for business with profile 'web'. <br />
[2008-05-12 14:38:56.329] fs-watcher &nbsp; &nbsp; &nbsp;&lt;SPSC1000I&gt; Creating web application '/'. <br />
[2008-05-12 14:38:56.448] async-delivery-thread-1 &nbsp;&lt;SPSC1001I&gt; Starting web application '/'. <br />
[2008-05-12 14:38:56.872] fs-watcher &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;SPDE0010I&gt; Deployment of 'platform.admin.splash- <br />
1.0.0.beta2.war' version '0' completed. <br />
[2008-05-12 14:38:58.281] fs-watcher &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;SPSC1000I&gt; Creating web application '/admin'. <br />
[2008-05-12 14:38:58.579] async-delivery-thread-1 &nbsp;&lt;SPSC1001I&gt; Starting web application '/admin'. <br />
[2008-05-12 14:38:59.405] fs-watcher &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;SPDE0010I&gt; Deployment of 'platform.admin.web- <br />
1.0.0.beta2.war' version '0' completed.</div></div>

</pre>
</blockquote>
<p>Lancez ensuite le navigateur avec l&rsquo;adress localhost:8080, et vous devriez avoir un belle page avec le logo SpringSource.</p>
<p>Arretez le serveur si c&rsquo;est bon (Ctrl+C ou encore en lancant shutdown.sh (ou .bat)), sinon, essayez de ragarder dans le <a href="https://issuetracker.springsource.com/secure/Dashboard.jspa?os_destination=%2Fbrowse%2FPLATFORM">JIRA de S2AP</a> ou encore dans le forum de S2AP (qui ne sont accessibles qu&rsquo;après enregistrement dans ledit programme beta) s&rsquo;il n&rsquo;y a pas de problème similaires.</p>
<h2 style="text-align: left;">1.2. Mise en place du tooling eclipse</h2>
<p>Le tooling eclipse relatif à S2AP consiste en:</p>
<ul>
<li><del>Spring IDE 2.0.5 beta:
<p>http://springide.org/updatesite-weekly</del></p>
<p><ins>Spring IDE 2.0.5 final: Ajoutez l&rsquo;update site suivant dans eclipse:</p>
<p>http://springide.org/updatesite</ins></li>
<li>SpringSource Tool Suite: Ajoutez l&rsquo;update site suivant:
<p>http://static.springsource.com/projects/sts-ap/nightly/</li>
</ul>
<p>Vérifiez ensuite que vous avez les wizards suivants dans New:</p>
<p><img src="http://farm3.static.flickr.com/2337/2486741644_a9e0dea919_o.png" alt="Wizards relatifs à Spring" title="Wizards relatifs à Spring" /></p>
<p>Il faut ensuite ajouter le serveur S2AP dans la liste des serveurs connus d&rsquo;eclipse.<br />
Pour ce faire, dans eclipse, allez dans Window, Preferences, Server, Installed Runtimes, et cliquez sur le bouton Add</p>
<p>Dans la fenêtre qui s&rsquo;affiche, vous trouverez un section SpringSource ainsi qu&rsquo;un type de serveur (adpater) SpringSource AP v1.0. Sélectionnez ce type et cliquez sur &laquo;&nbsp;Next&nbsp;&raquo;:</p>
<p><img src="http://farm4.static.flickr.com/3059/2487301286_110a9578b5_o.png" alt="Add Server 2" title="" /></p>
<p>Dans la page suivante, localisez l&rsquo;emplacement de S2AP et validez.</p>
<p><img src="http://farm3.static.flickr.com/2029/2487229670_3a677c406a_o.png" alt="Add Server 3" title="" /></p>
<h1 style="text-align: left;">2. Développement d&rsquo;applications pour S2AP</h1>
<h2 style="text-align: left;">2.1. Création d&rsquo;un bundle:</h2>
<p>Dans eclipse, Sélectionnez File, New, Other. Dans la liste, localisez la section SpringSource AP et sélectionnez &laquo;&nbsp;Bundle Project&nbsp;&raquo; puis &laquo;&nbsp;Next&nbsp;&raquo; :</p>
<p><img src="http://farm3.static.flickr.com/2056/2487301296_2f642edb00_o.png" alt="New Bundle" title="" /></p>
<p>Saisissez un nom pour le projet et cliquez sur &laquo;&nbsp;Next&nbsp;&raquo;:</p>
<p><img src="http://farm4.static.flickr.com/3293/2487301298_e693872578_o.png" alt="New Bundle" title="" /></p>
<p>Dans la dernière page, veuillez juste à sélectionner le serveur qu&rsquo;on vient de créer dans le drop down &laquo;&nbsp;Target Runtime&nbsp;&raquo; et validez.</p>
<p><img src="http://farm3.static.flickr.com/2198/2487301300_7ca0acd30f_o.png" alt="New Bundle" title="" /></p>
<p>Le projet généré ainsi contient d&rsquo;office un dossier META-INF et un fichier manifest avec une configuration minimale:</p>
<p><img src="http://farm4.static.flickr.com/3221/2487301294_2160be820e_o.png" alt="New Bundle" title="" /></p>
<h2 style="text-align: left;">2.2. Déploiement du bundle:</h2>
<p>Pour déployer le bundle sur le serveur, il faut localiser le serveur S2AP (qu&rsquo;on vient de créer) dans la vue Servers:</p>
<p><img src="http://farm3.static.flickr.com/2360/2488051358_c938cafdb1_o.png" alt="S2AP" title="" /></p>
<p>Dans son menu contexuel, choisissez &laquo;&nbsp;Add and Remove Projects&nbsp;&raquo;, ce qui affiche une double liste:</p>
<p><img src="http://farm3.static.flickr.com/2291/2487234531_5a93e423a9_o.png" alt="Add remove projects" title="" /></p>
<p>qui permet de deployer ou de undeployer les bundles.</p>
<h2 style="text-align: left;">2.3. Contrôle du serveur:</h2>
<p>Comme pour tous les autres serveurs sous eclipse, S2AP se contrôle comme d&rsquo;habitude (via les boutons Start, Stop, etc.) de la vue Servers:</p>
<p><img src="http://farm3.static.flickr.com/2071/2487232119_4efb64e9c3_o.png" alt="Controler S2AP" title="" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Nouvelle génération de serveurs Java EE : SpringSource Application Platform</title>
		<link>https://blog.developpez.com/djo-mos/p5594/annonces/nouvelle_generation_de_serveurs_java_ee</link>
		<comments>https://blog.developpez.com/djo-mos/p5594/annonces/nouvelle_generation_de_serveurs_java_ee#comments</comments>
		<pubDate>Wed, 30 Apr 2008 20:16:56 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[SpringSource vient tout juste de publier la version beta de ce qu&#8217;ils appèlenet Application Platform, un serveur Java EE de nouvelle génération, basé sur l&#8217;OSGi et sur Spring. D&#8217;ailleurs, le noyeau de ce serveur est développé avec Spring Dynamic Modules. => Annonce ici Plus de détails dans des billets ultérieurs.]]></description>
				<content:encoded><![CDATA[<p>SpringSource vient tout juste de publier la version beta de ce qu&rsquo;ils appèlenet Application Platform, un serveur Java EE de nouvelle génération, basé sur l&rsquo;OSGi et sur Spring. D&rsquo;ailleurs, le noyeau de ce serveur est développé avec Spring Dynamic Modules.</p>
<p>=> <a href="http://www.springsource.com/web/guest/products/suite/applicationplatform">Annonce ici</a></p>
<p>Plus de détails dans des billets ultérieurs.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortie de la seconde Beta de SpringSource Application Platform</title>
		<link>https://blog.developpez.com/djo-mos/p5659/annonces/sortie_de_la_seconde_beta_de_springsourc</link>
		<comments>https://blog.developpez.com/djo-mos/p5659/annonces/sortie_de_la_seconde_beta_de_springsourc#comments</comments>
		<pubDate>Fri, 09 May 2008 18:57:18 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[SpringSource vient d&#8217;annoncer (il y&#8217;a une heure) la sortie de la seconde beta de sa plateforme SpringSource Application Platform (S2AP) avec son lot de bugs corrigés. A noter qu&#8217;il faut s&#8217;enregistrer dans leur programme Beta pour pouvoir télécharger la chose.]]></description>
				<content:encoded><![CDATA[<p>SpringSource vient d&rsquo;annoncer (il y&rsquo;a une heure) la sortie de la seconde beta de sa plateforme <a href="http://www.springsource.com/web/guest/products/suite/applicationplatform">SpringSource Application Platform (S2AP)</a> avec son lot de bugs corrigés.</p>
<p>A noter qu&rsquo;il faut <a href="http://www.springsource.com/beta/applicationplatform/membershipform.php">s&rsquo;enregistrer dans leur programme Beta</a> pour pouvoir télécharger la chose.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wicket sur S2AP : ça marche enfin !</title>
		<link>https://blog.developpez.com/djo-mos/p5827/java/spring/wicket_sur_s2ap_ca_marche_enfin</link>
		<comments>https://blog.developpez.com/djo-mos/p5827/java/spring/wicket_sur_s2ap_ca_marche_enfin#comments</comments>
		<pubDate>Wed, 04 Jun 2008 19:57:31 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>
		<category><![CDATA[Wicket]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voilà, tout est dans le titre: je suis enfin arrivé à créer et à deployer mon premier bundle (et non pas war) utilisant Wicket sur SpringSource Application Platform (S2AP), chose qui était non faisable jusqu&#8217;à la beta 5 de S2AP qui apporte la pièce manquante: les fragments web.xml. SpringSource voulait initialement fournir une nouvelle méthode pour la configuration d&#8217;une application web, qui utilise le manifest au lieu de l&#8217;habituel web.xml. Seulement, dans les premières versions [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Voilà, tout est dans le titre: je suis enfin arrivé à créer et à deployer mon premier bundle (<strong>et non pas war</strong>) utilisant Wicket sur SpringSource Application Platform (S2AP), chose qui était non faisable jusqu&rsquo;à la beta 5 de S2AP qui apporte la pièce manquante: les fragments web.xml.</p>
<p><span id="more-177"></span><br />
SpringSource voulait initialement fournir une nouvelle méthode pour la configuration d&rsquo;une application web, qui utilise le manifest au lieu de l&rsquo;habituel web.xml.</p>
<p>Seulement, dans les premières versions (et même jusqu&rsquo;à la plus récente), les paramètres de configuration étaient limités comparé à ceux offerts par web.xml, ce qui a fait que plusieurs frameworks webs ne pouvaient pas être utilisés dans un bundle web de S2AP.</p>
<p>Pour Wicket, ce qui manquait avant, c&rsquo;était:</p>
<ol>
<li>La possibilité de déclarer une servlet/filtre dans le manifest des bundles. Ce point a été adressé (quoi que partiellement) en donnant la possibilité de spécifer des servlets dans le manifest (mais pas les filtres, utilisés par Wicket depuis la version 1.3).</li>
<li>Mais surtout la possibilité de spécifier les init-params des servlets/filtres depuis le manifest.</li>
<li>enfin, les méta-données OSGi dans la distribution wicket.</li>
</ol>
<p>S2AP beta 5 a donc résolu les deux premiers points en donnant la possibilité d&rsquo;utiliser le bon vieux <em>web.xml</em> dans les bundles, ce qui nous permet donc de déclarer le filtre de Wicket, son mapping ainsi que l&rsquo;<em>init-param</em> &laquo;&nbsp;<em>applicationClassName</em>&laquo;&nbsp;.</p>
<p>Le dernier point a lui été adressé par l&rsquo;équipe de Wicket qui ont inclus ledits méta-données OSGi dans les manifest des jars de Wicket 1.4 (disponible actuellement en version &laquo;&nbsp;<em>Milestone 2</em>&laquo;&nbsp;).</p>
<p>Bon, en réalité, il y&rsquo;avaient quelques problèmes dans ces méta-données comme <a href="https://issues.apache.org/jira/browse/WICKET-1645">ici par exemple</a> ou <a href="https://issues.apache.org/jira/browse/WICKET-1649">encore ici</a>, mais l&rsquo;équipe Wicket est suffisamment réactive et rapide pour que ces détails soient réglées en quelques jours.</p>
<p>remarque aussi que l&rsquo;équipe de S2AP est en train d&rsquo;<em>OSGi&rsquo;fier</em> la distribution actuelle de Wicket (1.3.3) (<a href="https://issuetracker.springsource.com/browse/BRITS-11?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel">suivi ici</a>).</p>
<p>Voici maintenant comment créer un bundle <em>Wicket-powered</em>:</p>
<h3 style="text-align: left">Serveur</h3>
<p>Assurez vous que vous avez S2AP beta 5 qui soit installée sur votre disque (&laquo;&nbsp;<em>/home/djo/Java/servers/springsource-ap-1.0.0.beta5/</em>&nbsp;&raquo; dans mon cas).</p>
<h3 style="text-align: left">Installer les jars OSGi&rsquo;fiés de Wicket</h3>
<p>Téléchargez ensuite la distribtion Wicket 1.4 M2 (<a href="http://www.apache.org/dyn/closer.cgi/wicket/1.4-m2">téléchargeable ici</a>) et décompressez la. Copiez le fichier &laquo;&nbsp;wicket-1.4-m2.jar&nbsp;&raquo; du dossier lib vers le dossier &laquo;&nbsp;<em>repository/bundles/usr</em>&nbsp;&raquo; de S2AP (&laquo;&nbsp;<em>/home/djo/Java/servers/springsource-ap-1.0.0.beta5/repository/bundles/usr</em>&nbsp;&raquo; dans mon cas).</p>
<h3 style="text-align: left">Installer les jars OSGi&rsquo;fiés de SLF4J (enfin presque)</h3>
<p>Il nous faut aussi Slf4j, donc, normalement, il faut se rendre dans <a href="http://www.springsource.com/repository/">le respository de SpringSource</a> pour récupérer les jars OSGI&rsquo;fiés de Slf4j et &laquo;&nbsp;Slf4j log4j binding&nbsp;&raquo; et les copier dans le dossier &laquo;&nbsp;<em>repository/bundles/usr</em>&laquo;&nbsp;, mais je vais montrer une autre façon beaucoup plus pratique pour le faire.</p>
<h3 style="text-align: left">Installer le tooling eclipse</h3>
<p>Dans eclipse, assurez vous que le tooling de SpringSource (ainsi que Spring IDE) est mis en place <a href="http://blog.developpez.com/djo-mos?title=vos_premiers_pas_avec_springsource_appli">comme montré ici</a>.</p>
<h3 style="text-align: left">Installer les jars OSGi&rsquo;fiés de SLF4J (pour de vrai)</h3>
<p>Dans la vue Servers, double cliquez sur le serveur S2AP et dans la fenêtre qui s&rsquo;affiche, activer l&rsquo;onglet repository.<br />
Cette vue (éditeur en fait) permet de rechercher et récupérer des jars depuis le repository S2, le tout depuis eclipse.<br />
Effectuez une recherche sur slf4j, cochez SLF4J API et SLF4J LOG4J Binding et cliquez sur download => Et hop, ils seront ajoutés dans le repository de S2AP.</p>
<p><img src="http://farm4.static.flickr.com/3075/2550812967_52d0be0937_o.png" alt="eclipse STS" title="" /></p>
<h3 style="text-align: left">Le manifest</h3>
<p>Créez un nouveau bundle (nommé &laquo;&nbsp;<em>djo.s2ap.wicket</em>&nbsp;&raquo; dans mon cas) et modifiez son manifest comme ceci:</p>
<blockquote><pre>

<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">Manifest-Version: 1.0 <br />
Bundle-Version: 1.0.0 <br />
Bundle-Name: Wick Bundle <br />
Bundle-ManifestVersion: 2 <br />
Web-ContextPath: wicket <br />
Bundle-SymbolicName: djo.s2ap.wicket <br />
Platform-ModuleType: Web <br />
Import-Package: &nbsp;<br />
&nbsp;org.apache.wicket, <br />
&nbsp;org.apache.wicket.markup.html, <br />
&nbsp;org.apache.wicket.markup.html.basic, <br />
&nbsp;org.apache.wicket.model, <br />
&nbsp;org.apache.wicket.protocol.http, <br />
&nbsp;org.apache.wicket.behavior, <br />
&nbsp;org.apache.wicket.ajax, <br />
&nbsp;org.apache.wicket.util.time, <br />
&nbsp;org.slf4j</div></div>

</pre>
</blockquote>
<h3 style="text-align: left">Le fragment de web.xml</h3>
<p>Créez ensuite un dossier WEB-INF dans le dossier src du bundle, et un fichier web.xml ladedans avec ce contenu:</p>
<blockquote><pre>

<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;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; <br />
&lt;web-app xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; <br />
&nbsp; xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot; xmlns:web=&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot; <br />
&nbsp; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot; <br />
&nbsp; id=&quot;WebApp_ID&quot; version=&quot;2.5&quot;&gt; <br />
&nbsp; &lt;display-name&gt;wicket&lt;/display-name&gt; <br />
&nbsp; &lt;filter&gt; <br />
&nbsp; &nbsp; &lt;filter-name&gt;WicketApplication&lt;/filter-name&gt; <br />
&nbsp; &nbsp; &lt;filter-class&gt;org.apache.wicket.protocol.http.WicketFilter&lt;/filter-class&gt; <br />
&nbsp; &nbsp; &lt;init-param&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;param-name&gt;applicationClassName&lt;/param-name&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;param-value&gt;djo.s2ap.wicket.MyApp&lt;/param-value&gt; <br />
&nbsp; &nbsp; &lt;/init-param&gt; <br />
&nbsp; &lt;/filter&gt; <br />
&nbsp; &lt;filter-mapping&gt; <br />
&nbsp; &nbsp; &lt;filter-name&gt;WicketApplication&lt;/filter-name&gt; <br />
&nbsp; &nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; <br />
&nbsp; &lt;/filter-mapping&gt; <br />
&lt;/web-app&gt;</div></div>

</pre>
</blockquote>
<h3 style="text-align: left">L&rsquo;infrastructure Wicket</h3>
<p>Créez un package &laquo;&nbsp;djo.s2ap.wicket&nbsp;&raquo;. dans ce package, on crée comme d&rsquo;habitude pour Wicket une classe pour l&rsquo;application, une classe et une page html pour la page d&rsquo;accueil.</p>
<h4 style="text-align: left">Classe de la page d&rsquo;accueil</h4>
<blockquote><pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">package djo.s2ap.wicket; <br />
&nbsp;<br />
import java.text.DateFormat; <br />
import java.text.SimpleDateFormat; <br />
import java.util.Date; <br />
&nbsp;<br />
import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior; <br />
import org.apache.wicket.markup.html.WebPage; <br />
import org.apache.wicket.markup.html.basic.Label; <br />
import org.apache.wicket.model.LoadableDetachableModel; <br />
import org.apache.wicket.util.time.Duration; <br />
&nbsp;<br />
public class MainPage extends WebPage&lt;MainPage&gt; { <br />
&nbsp; private static final DateFormat df = new SimpleDateFormat(&quot;HH:mm:ss&quot;); <br />
&nbsp;<br />
&nbsp; public MainPage() { <br />
&nbsp;<br />
&nbsp; &nbsp; final Label&lt;String&gt; currentTime = new Label&lt;String&gt;(&quot;time&quot;, <br />
&nbsp; &nbsp; &nbsp; &nbsp; new LoadableDetachableModel&lt;String&gt;() { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; protected String load() { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return df.format(new Date()); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }); <br />
&nbsp; &nbsp; currentTime.add(new AjaxSelfUpdatingTimerBehavior(Duration.ONE_SECOND)); <br />
&nbsp; &nbsp; add(currentTime); <br />
&nbsp; } <br />
}</div></div>

</pre>
</blockquote>
<h4 style="text-align: left">Page HTML de la page d&rsquo;accueil (MainPage.html)</h4>
<blockquote><pre>

<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;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; <br />
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt; <br />
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt; <br />
&lt;head&gt; <br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt; <br />
&lt;title&gt;Test&lt;/title&gt; <br />
&nbsp;<br />
&lt;/head&gt; <br />
&lt;body&gt; <br />
&lt;span wicket:id=&quot;time&quot;&gt;...&lt;/span&gt; <br />
&lt;/body&gt; <br />
&lt;/html&gt;</div></div>

</pre>
</blockquote>
<h4 style="text-align: left">Classe de l&rsquo;application</h4>
<blockquote><pre>

<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">package djo.s2ap.wicket; <br />
&nbsp;<br />
import org.apache.wicket.protocol.http.WebApplication; <br />
&nbsp;<br />
public class MyApp extends WebApplication { <br />
&nbsp;<br />
&nbsp; @Override <br />
&nbsp; public Class getHomePage() { <br />
&nbsp; &nbsp; return MainPage.class; <br />
&nbsp; } <br />
&nbsp;<br />
}</div></div>

</pre>
</blockquote>
<h3 style="text-align: left">Déploiement et test</h3>
<p>Et voilà : reste plus qu&rsquo;à deployer et tester la chose.</p>
<p>En ce qui me concerne, j&rsquo;arrive pas à lancer un bundle depuis eclipse, donc je procède manuellement en exportant le projet du bundle en jar (via le wizard standard d&rsquo;eclipse). Il faut juste faire attention à utiliser le manifest du projet comme manifest du jar.</p>
<p>Je place ensuite le jar généré dans le dossier pickup de s2AP (<em>/home/djo/Java/servers/springsource-ap-1.0.0.beta5/pickup</em>) et je démarres le serveur (depuis eclipse ou via <em>bin/startup.sh</em>).<br />
Tapez ensuite l&rsquo;adresse suivante dans le navigateur:</p>
<p><em>http://localhost:8080/wicket/</em></p>
<p>et hop, j&rsquo;ai une page qui affiche le temps courant en temps réel (enfin presque, rafraichissement ajax chaque seconde).</p>
<h3 style="text-align: left">Sources</h3>
<p>Le jar en question (ainsi que les sources) peuvent être <a href="ftp://ftp-developpez.com/djo-mos/data/blog/djo.s2ap.wicket.jar">téléchargées ici</a>.</p>
<h3 style="text-align: left">TODO</h3>
<p>Dans un futur billet, je vais montrer comment utiliser Spring avec Wicket pour retrouver un service OSGi exporté par un autre bundle.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
