<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Taraxe &#187; Scala</title>
	<atom:link href="http://taraxe.wordpress.com/category/developpement/scala/feed/" rel="self" type="application/rss+xml" />
	<link>http://taraxe.wordpress.com</link>
	<description>A state of serene excitation</description>
	<lastBuildDate>Sat, 18 May 2013 19:21:58 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='taraxe.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Taraxe &#187; Scala</title>
		<link>http://taraxe.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://taraxe.wordpress.com/osd.xml" title="Taraxe" />
	<atom:link rel='hub' href='http://taraxe.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Play! + Scala et la serialization Json</title>
		<link>http://taraxe.wordpress.com/2011/09/29/play-scala-et-la-serialization-json/</link>
		<comments>http://taraxe.wordpress.com/2011/09/29/play-scala-et-la-serialization-json/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 14:48:54 +0000</pubDate>
		<dc:creator>taraxe</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[heroku]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[play framework]]></category>
		<category><![CDATA[serialization]]></category>

		<guid isPermaLink="false">http://taraxe.wordpress.com/?p=174</guid>
		<description><![CDATA[Dans le cadre d&#8217;un petit projet personnel de dessin de graphes, j&#8217;ai eu l&#8217;occasion de jouer avec le framework Play! C&#8217;est le framework web &#34;hype&#34; du moment dans l&#8217;écosystème Java. Avec le module Scala ajoutant la touche fonctionnelle, la productivité est au rendez vous. Un court billet pour vous parler de la solution de serialization [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=taraxe.wordpress.com&#038;blog=24824827&#038;post=174&#038;subd=taraxe&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Dans le cadre d&rsquo;un petit projet personnel de dessin de graphes, j&rsquo;ai eu l&rsquo;occasion de jouer avec le <a href="http://www.playframework.org/" target="_blank">framework Play!</a> C&rsquo;est le framework web &quot;hype&quot; du moment dans l&rsquo;écosystème Java. Avec le <a href="http://www.playframework.org/modules/scala" target="_blank">module Scala</a> ajoutant la touche fonctionnelle, la productivité est au rendez vous. Un court billet pour vous parler de la solution de serialization Json mise en oeuvre.</p>
<p><span id="more-174"></span></p>
<p>Play! est un framework web pour Java avec le vent en poupe. Il est constitué d&rsquo;une stack complète, pas besoin de conteneur de servlet ni de serveur d&rsquo;application. C&rsquo;est léger, rapide, stateless et ca s&rsquo;inspire très fortement de Rails. On y trouve tout ce dont on a besoin pour développer des applications web : système de templating, ORM (Hibernate), cache, un système de plugin et une communauté fleurissante. Le système de template du module Scala est plutôt cool : un template est une fonction à laquelle on passe des paramètres qui retourne du Html. Nos templates s&rsquo;imbriquent les uns dans les autres via des appels de fonctions : avec la compilation et typage statique c&rsquo;est puissant !</p>
<p>J&rsquo;ai suivi le <a href="http://www.jamesward.com/2011/07/28/setup-play-framework-with-scala-in-intellij" target="_blank">tutoriel de James Ward</a> pour le setup du projet dans IntelliJ (on peut développer avec un editeur de texte, mais à mon gout ca ne remplace pas un puissant IDE).</p>
<p>L&rsquo;exposition de services RESTFull est triviale avec Play!. Le client HTML5 + Js avec JQuery fait ses appels asynchrones et consomme les services en question. Rapidement, le besoin d&rsquo;une solution pour serializer des graphes d&rsquo;objets au format Json s&rsquo;est fait sentir.  Après quelques tests je suis tombé sur le JsonDSL de <a href="https://github.com/lift/lift/tree/master/framework/lift-base/lift-json/" target="_blank">lift-json</a> pour faire du Json en Scala.</p>
<p>La dépendance à ajouter dans votre <strong>dependencies.yml</strong> est la suivante :</p>
<pre class="brush: plain; title: ; notranslate">
require :
    - ...
    - net.liftweb -&gt; lift-json_2.8.1 2.2
</pre>
<p>Voici un exemple de serialization d&rsquo;une instance de Graphe :</p>
<pre class="brush: scala; title: ; notranslate">
def toJson: JObject = {
    import net.liftweb.json.JsonDSL._
    (&quot;nodes&quot;, nodeToPosition.toList.map { n =&gt;
        ((&quot;label&quot;, n._1.name) ~ (&quot;x&quot;, n._2.apply(0)) ~ (&quot;y&quot;, n._2.apply(1)) ~ (&quot;weight&quot;, n._1.weight) ~ (&quot;anchor&quot;,n._1.isFixed))
    }) ~ (&quot;edges&quot;, edges.map { e =&gt;
        ((&quot;source&quot;, e.startNode.name) ~ (&quot;target&quot;, e.endNode.name) ~ (&quot;length&quot;, e.weight))
    })
}
</pre>
<p>L&rsquo;opérateur &quot;~&quot; , équivalent sémantique de la méthode &quot;.~()&quot; permet de construire très simplement la structure de son objet Json.<br />
Ensuite dans le controller on retourne le resultat comme suit :</p>
<pre class="brush: scala; title: ; notranslate">
package controllers

import play.mvc._
import net.liftweb.json.JsonAST
import net.liftweb.json.Printer._
import models.ForceDirectedLayout

object Graphs extends Controller {

    def show(id:String, w:Int = 860, h:Int = 600) = {
        val layout = new ForceDirectedLayout(id).execute(100).scale(w,h)
        Json(compact(JsonAST.render(layout.toJson)))
    }
}
</pre>
<p>Ce qui produit des documents Json de cette forme ci :</p>
<pre><a href="http://taraxe.files.wordpress.com/2011/09/capture-d_c3a9cran-2011-09-29-c3a0-15-27-15.png"><img class="alignnone size-full wp-image-178" title="Json example" src="http://taraxe.files.wordpress.com/2011/09/capture-d_c3a9cran-2011-09-29-c3a0-15-27-15.png?w=640" alt=""   /></a></pre>
<p>Si vous avez connaissance d&rsquo;une meilleure technique je suis preneur, avec <a href="http://jackson.codehaus.org/">Jackson</a> ou <a href="http://code.google.com/p/google-gson/">Gson</a> par exemple.</p>
<p>Pour terminer je voulais pousser la webapp sur <a href="http://www.heroku.com/">Heroku</a> (suite à leur <a href="http://blog.heroku.com/archives/2011/8/29/play/" target="_blank">annonce réjouissante</a>) en suivant <a href="http://www.jamesward.com/2011/08/29/getting-started-with-play-framework-on-heroku" target="_blank">le tuto de James Ward</a> toujours.<br />
Un petit <strong>git push heroku master</strong> mais je reste bloqué sur le message suivant :</p>
<blockquote>
<pre>Counting objects: 154, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (143/143), done.
Connection to 10.86.82.54 closed by remote host.KiB/s
error: pack-objects died of signal 13
error: failed to push some refs to 'git@heroku.com:taraxe.git'</pre>
</blockquote>
<p>A suivre donc&#8230;</p>
<p>A venir dans un prochain billet, je ferai une revue de la nouvelle édition du livre <a title="Apache Maven 2 et 3 sur Pearson" href="http://www.pearson.fr/livre/?GCOI=27440100487310">Apache Maven 2 et 3</a> de Nicolas De Loof et Arnaud Héritier.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/taraxe.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/taraxe.wordpress.com/174/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=taraxe.wordpress.com&#038;blog=24824827&#038;post=174&#038;subd=taraxe&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://taraxe.wordpress.com/2011/09/29/play-scala-et-la-serialization-json/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/082c72bbbaec0eda04cddd3df51c048d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">taraxe</media:title>
		</media:content>

		<media:content url="http://taraxe.files.wordpress.com/2011/09/capture-d_c3a9cran-2011-09-29-c3a0-15-27-15.png" medium="image">
			<media:title type="html">Json example</media:title>
		</media:content>
	</item>
		<item>
		<title>Scala, une rapide introduction</title>
		<link>http://taraxe.wordpress.com/2011/08/29/scala-une-rapide-introduction/</link>
		<comments>http://taraxe.wordpress.com/2011/08/29/scala-une-rapide-introduction/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 16:53:14 +0000</pubDate>
		<dc:creator>taraxe</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[programmation fonctionnelle]]></category>
		<category><![CDATA[s]]></category>

		<guid isPermaLink="false">http://taraxe.wordpress.com/?p=147</guid>
		<description><![CDATA[Scala c&#8217;est beau et ca fait du bien ! Comme disait un ancien collègue : &#34;quand il n&#8217;y a pas de code, il n&#8217;y a pas de bug&#34;. Avec Scala justement, on écrit bien moins de code qu&#8217;en Java, et donc j&#8217;imagine moins de bugs. Quelques rapides exemples pour illustrer le propos d&#8217;un développeur Java [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=taraxe.wordpress.com&#038;blog=24824827&#038;post=147&#038;subd=taraxe&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Scala c&rsquo;est beau et ca fait du bien !</p>
<p>Comme disait un ancien collègue : &quot;quand il n&rsquo;y a pas de code, il n&rsquo;y a pas de bug&quot;. Avec Scala justement, on écrit bien moins de code qu&rsquo;en Java, et donc j&rsquo;imagine moins de bugs. <span id="more-147"></span>Quelques rapides exemples pour illustrer le propos d&rsquo;un développeur Java charmé par ce langage :</p>
<h1>Concision</h1>
<p>Voici comment déclarer une classe avec deux attributs immutables et des contraintes sur ceux ci :</p>
<pre class="brush: java; title: ; notranslate">

class GrassField(val width: Int, val height: Int) {
    require(width &gt; 0 &amp;&amp; height &gt; 0, &quot;Width and Height must be postive integers&quot;)
    override def toString = &quot;Field(&quot; + width + &quot;,&quot; + height + &quot;)&quot;;
}

</pre>
<p>Lire la première ligne d&rsquo;un fichier, extraire deux entiers puis itérer sur le reste 2 lignes par 2 lignes :</p>
<pre class="brush: java; title: ; notranslate">

val lines = Source.fromFile(file).getLines().toTraversable
val fieldDimensions = lines.head.split(' ') map (_.toInt)
val field = new GrassField(fieldDimensions(0),fieldDimensions(1))
lines.tail.toIterator.sliding(2, 2).foreach {...}

</pre>
<h1>Pattern Matching</h1>
<p>Processing d&rsquo;une chaine de caractère lettre par lettre :</p>
<pre class="brush: java; title: ; notranslate">
seq.toCharArray.foreach {
_ match {
    case 'A' =&gt; {...}
    case 'G' =&gt; {...}
    case 'D' =&gt; {...}
    case _ =&gt; throw new IllegalArgumentException(&quot;Invalid instruction, must be either 'A', 'G', 'D'&quot;)
}

</pre>
<h1>Acteurs</h1>
<p>Pour parallèliser l&rsquo;éxécution d&rsquo;une méthode sur chacun des éléments d&rsquo;une liste :</p>
<pre class="brush: plain; title: ; notranslate">
val caller = self
listToProcess foreach (i =&gt; {
    actor {
        caller ! longComputationMethod(i)
    }
})
val results = (&quot;&quot; /: (0 until listToProcess.length)) { (partialResult, i) =&gt;
    receive {
        case r:String =&gt; {
            partialResult + &quot;, &quot; + i
        }
    }
}
</pre>
<h1>Conclusion</h1>
<p>Ca fait drôle au début mais plus on code avec Scala plus on a envie de coder  : au début c&rsquo;est un peu difficile, mais après cela s&rsquo;avère être un bon stimulant neuronal. Ce très rapide billet est un aperçu des fonctionnalités du langage. Je reviendrai dessus à mesure que je descendrai dans du code plus élaboré dans un prochain article. En attendant je vous conseille l&rsquo;<a href="http://typesafe.com/resources/scala-for-the-impatient">excellent PDF &lsquo;Scala For the Impatient</a>&lsquo; de Cay Horstmann distribué gracieusement par <a href="http://blog.typesafe.com/free-pdf-from-typesafe-scala-for-the-impatien-64715">TypeSafe</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/taraxe.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/taraxe.wordpress.com/147/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=taraxe.wordpress.com&#038;blog=24824827&#038;post=147&#038;subd=taraxe&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://taraxe.wordpress.com/2011/08/29/scala-une-rapide-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/082c72bbbaec0eda04cddd3df51c048d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">taraxe</media:title>
		</media:content>
	</item>
		<item>
		<title>Un plugin pour Confluence avec Scala</title>
		<link>http://taraxe.wordpress.com/2011/08/12/un-plugin-pour-confluence-avec-scala/</link>
		<comments>http://taraxe.wordpress.com/2011/08/12/un-plugin-pour-confluence-avec-scala/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 15:51:48 +0000</pubDate>
		<dc:creator>taraxe</dc:creator>
				<category><![CDATA[Confluence]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[AMPS]]></category>
		<category><![CDATA[atlassian]]></category>
		<category><![CDATA[Atlassian SDK]]></category>
		<category><![CDATA[confluence]]></category>
		<category><![CDATA[programmation fonctionnelle]]></category>

		<guid isPermaLink="false">http://taraxe.wordpress.com/?p=118</guid>
		<description><![CDATA[Mon précédent article parlait de teinter la programmation Java d&#8217;un petit style fonctionnel avec la librairie Guava. Pourquoi ne pas nous tourner vers Scala qui intègre les paradigmes de la programmation fonctionnelle et qui compile en bytecode pour la JVM. C&#8217;est ce que nous allons voir aujourd&#8217;hui dans le contexte de Confluence et valider l&#8217;interopérabilité entre Java et Scala. [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=taraxe.wordpress.com&#038;blog=24824827&#038;post=118&#038;subd=taraxe&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Mon précédent <a title="Introduction à GoogleCollections/Guava" href="http://taraxe.wordpress.com/2011/07/22/introduction-a-googlecollectionsguava/">article</a> parlait de teinter la programmation Java d&rsquo;un petit style fonctionnel avec la librairie <a title="Introduction à GoogleCollections/Guava" href="http://taraxe.wordpress.com/2011/07/22/introduction-a-googlecollectionsguava/">Guava</a>. Pourquoi ne pas nous tourner vers <a title="Scala Programming Language" href="http://www.scala-lang.org/" target="_blank">Scala</a> qui intègre les paradigmes de <a href="http://fr.wikipedia.org/wiki/Programmation_fonctionnelle" target="_blank">la programmation fonctionnelle</a> et qui compile en bytecode pour la JVM. C&rsquo;est ce que nous allons voir aujourd&rsquo;hui dans le contexte de Confluence et valider l&rsquo;interopérabilité entre Java et Scala. En plus de ça, Scala est un langage intéressant à de multiples niveaux : sa syntaxe concise, typage statique, un pattern matching puissant, la gestion de la concurrence avec les acteurs&#8230; Bref que du bon.<br />
<span id="more-118"></span><br />
Nous allons utiliser le <a href="http://confluence.atlassian.com/display/DEVNET/Developing+your+Plugin+using+the+Atlassian+Plugin+SDK" target="_blank">tutoriel d&rsquo;Atlassian</a> sur <a title="Atlassian SDK" href="http://confluence.atlassian.com/display/DEVNET/Atlassian+Plugin+SDK+Documentation" target="_blank">leur SDK</a> et écrire une version Scala du plugin généré de base : il contient par défaut une macro et quelques tests comme vous avez pu le voir dans <a title="Un premier plugin pour Confluence" href="http://taraxe.wordpress.com/2011/07/06/developpement-de-plugin-confluence/" target="_blank">le billet sur le dev de plugin Confluence</a>. Nous allons modifier notre plugin pour intégrer Scala, réécrire le code de cette macro en Scala donc.  On n&rsquo;oubliera pas de s&rsquo;assurer que tout fonctionne correctement.</p>
<h1>Génération du plugin</h1>
<p>Avec le SDK d&rsquo;Atlassian <a title="Setup" href="http://confluence.atlassian.com/display/DEVNET/Setting+up+your+Plugin+Development+Environment" target="_blank">correctement installé et configuré</a>, utilisez la commande <code>atlas-create-confluence-plugin</code> pour créer un plugin, nommez le groupId, l&rsquo;artifactId et le packageName comme bon vous semble.</p>
<p>Dans la structure du projet, à code des dossiers src/main et src/test, créer un dossier &quot;scala&quot; à coté de celui nommé &quot;java&quot;. Vous vous en doutez, c&rsquo;est là que nous mettrons nos fichiers sources Scala.</p>
<p>Vous devriez avoir une structure de ce format :</p>
<p><a href="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-11-c3a0-16-38-15.png"><img class="alignnone size-full wp-image-126" src="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-11-c3a0-16-38-15.png?w=640" alt=""   /></a></p>
<h1>Modification du pom.xml</h1>
<p>Il s&rsquo;agit ici d&rsquo;intégrer la dépendance vers la bibliothèque Scala et le plugin <a title="maven-scala-plugin" href="http://scala-tools.org/mvnsites/maven-scala-plugin/" target="_blank">maven-scala-plugin</a> à notre descripteur de projet Maven.</p>
<p>Dans les dépendances, ajoutez l&rsquo;artifact <code>scala-library</code> :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;dependency&gt;
    &lt;groupId&gt;org.scala-lang&lt;/groupId&gt;
    &lt;artifactId&gt;scala-library&lt;/artifactId&gt;
    &lt;version&gt;${scala.version}&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<p>Entre les balises &lt;plugins&gt;&lt;/plugins&gt;, ajouter le plugin maven-scala-plugin :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;plugin&gt;
    &lt;groupId&gt;org.scala-tools&lt;/groupId&gt;
    &lt;artifactId&gt;maven-scala-plugin&lt;/artifactId&gt;
    &lt;executions&gt;
        &lt;execution&gt;
            &lt;goals&gt;
                &lt;goal&gt;compile&lt;/goal&gt;
                &lt;goal&gt;testCompile&lt;/goal&gt;
            &lt;/goals&gt;
        &lt;/execution&gt;
    &lt;/executions&gt;
    &lt;configuration&gt;
        &lt;scalaVersion&gt;${scala.version}&lt;/scalaVersion&gt;
    &lt;/configuration&gt;
&lt;/plugin&gt;
</pre>
<p>Dans les balises &lt;properties&gt;&lt;/properties&gt; ajouter la propriété scala.version :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;scala.version&gt;2.9.0&lt;/scala.version&gt;
</pre>
<p>Ajoutez aussi les repository maven qui distribuent les artifacts nécessaires :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;repositories&gt;
    &lt;repository&gt;
        &lt;id&gt;scala-tools.org&lt;/id&gt;
        &lt;name&gt;Scala-Tools Maven2 Repository&lt;/name&gt;
        &lt;url&gt;http://scala-tools.org/repo-releases&lt;/url&gt;
    &lt;/repository&gt;
&lt;/repositories&gt;

&lt;pluginRepositories&gt;
    &lt;pluginRepository&gt;
        &lt;id&gt;scala-tools.org&lt;/id&gt;
        &lt;name&gt;Scala-Tools Maven2 Repository&lt;/name&gt;
        &lt;url&gt;http://scala-tools.org/repo-releases&lt;/url&gt;
    &lt;/pluginRepository&gt;
&lt;/pluginRepositories&gt;
</pre>
<h1>Traduction</h1>
<p>Créer un fichier ExampleMacro.scala dans le dossier src/main/scala. Voici la version scala de la macro ExampleMacro.java générée en example par le SDK :</p>
<p><a href="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-12-c3a0-17-19-02.png"><img class="alignnone size-full wp-image-135" src="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-12-c3a0-17-19-02.png?w=640" alt=""   /></a></p>
<p>N&rsquo;oubliez pas d&rsquo;effacer la version Java ( src/main/java/ExampleMacro )</p>
<h1>Test</h1>
<p>Dans un terminal avec le répertoire courant dans le dossier du projet, faites <code>mvn confluence:run</code>.<br />
Rendez vous dans votre navigateur web sur à l&rsquo;URL suivante <a href="http://localhost:1990/confluence" target="_blank">http://localhost:1990/confluence</a><br />
Logger vous en admin/admin, puis sur le dashboard, allez dans l&rsquo;espace de démonstration et éditer sa home page : y ajouter la macro <code>sample-plugin-with-scala et valider.</code></p>
<p>Tada!</p>
<p><a href="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-11-c3a0-16-56-31.png"><img class="alignnone size-large wp-image-128" src="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-11-c3a0-16-56-31.png?w=995&#038;h=1024" alt="" width="995" height="1024" /></a></p>
<h1>Conclusion</h1>
<p>Nous avons vu aujourd&rsquo;hui la simplicité déconcertante d&rsquo;ajouter Scala à notre outillage de développement de plugin pour Confluence. L&rsquo;interopérabilité Java/Scala semble bonne (la compilation génère le même bytecode, à l&rsquo;exception de l&rsquo;utilisation de certaines fonctionnalités propres à Scala). Vous n&rsquo;avez plus d&rsquo;excuse pour tout en développant des plugins Confluence monter en compétence sur Scala (et devenir un polyglot programmer!).</p>
<p><a href="https://bitbucket.org/taraxe/sample-plugin-with-scala" target="_blank">Les sources</a> sont disponibles sur <a href="https://bitbucket.org/" target="_blank">BitBucket</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/taraxe.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/taraxe.wordpress.com/118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=taraxe.wordpress.com&#038;blog=24824827&#038;post=118&#038;subd=taraxe&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://taraxe.wordpress.com/2011/08/12/un-plugin-pour-confluence-avec-scala/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/082c72bbbaec0eda04cddd3df51c048d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">taraxe</media:title>
		</media:content>

		<media:content url="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-11-c3a0-16-38-15.png" medium="image" />

		<media:content url="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-12-c3a0-17-19-02.png" medium="image" />

		<media:content url="http://taraxe.files.wordpress.com/2011/08/capture-d_c3a9cran-2011-08-11-c3a0-16-56-31.png?w=995" medium="image" />
	</item>
	</channel>
</rss>
