<?xml version="1.0"?>
<rss xmlns:php="http://php.net/xsl" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Définir un ordre de tri personnalisé dans Apache Derby - Chicoree</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby</link><atom:link href="http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby?action=toFeed" rel="self" type="application/rss+xml"/><description><![CDATA[
Il s'avère parfois nécessaire de définir un ordre de tri personnalisé pour les données enregistrées dans une base. Derby manque un peu de souplesse à ce niveau, puisque s'il est possible de changer l'ordre de tri (la collation) utilisé dans une base, il n'est pas possible d'avoir un ordre de tri individualisé au niveau des tables ou des colonnes. Par ailleurs, le collateur utilisé doit être un de ceux fournis par la JVM (Java Virtual Machine – Machine Virtuelle Java.
Un logiciel capable d'interpréter le byte-code Java pour exécuter un programme. 
) .
Restrictif, n'est-ce pas? Heureusement, Java permet d'ajouter à l'environnement d'éxécution un collateur personnalisé – et donc de rendre cet ordre de tri utilisable dans une base Derby. Nous allons donc voir comment mettre en pratique cette technique pour définir un ordre de tri personnalisé dans Apache Derby.
]]></description><item><title>1 Le support</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#Le_support</link><description><![CDATA[<p>A titre d'exemple, nous allons définir ici un ordre de tri insensible aux accents et à la casse (majuscules/minuscules).
</p>]]></description></item><item><title>2 Collateur par défaut</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#Collateur_par_d.C3.A9faut</link><description><![CDATA[<p>Par défaut, Derby utilise un ordre de tri basé sur le <b>codepoint</b> (en simplifiant le <i>nombre</i> qui se cache derrière chaque caractère Unicode) des caractères. Ce qui produit des résultats surprenants:
</p>]]></description></item><item><title>3 Collateur personnalisé</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#Collateur_personnalis.C3.A9</link><description><![CDATA[<p>Derby, dans sa version actuelle (10.5) n'est capable d'utiliser pour le tri (et la recherche) que les collateurs définis dans la <span>JVM<span> (</span><span><i>Java Virtual Machine</i> – Machine Virtuelle Java.
<br></br>Un logiciel capable d'interpréter le <i>byte-code</i> Java pour exécuter un programme. 
<span>) </span></span></span>. Comme nous l'avons dit en introduction, cela serait problématique s'il n'était possible d'y ajouter des <i>extensions</i> sous la forme de <i>services</i> qui mettent en oeuvre des collateurs personnalisés.
</p>]]></description></item><item><title>3.1 Fournisseur de service</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#Fournisseur_de_service</link><description><![CDATA[<p>Ce code n'a rien de complexe. Son rôle étant simplement de permettre à la JVM de savoir quel(s) collateur(s) vous fournissez, et le cas échéant d'y accéder. Pour atteindre ce but, le fournisseur de service repose sur deux méthodes:
</p>]]></description></item><item><title>3.2 Collateur</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#Collateur</link><description><![CDATA[<p>Concernant la définition du collateur, plusieurs stratégies sont possibles. Tout d'abord, vous pouvez définir votre propre ordre de tri <i>à partir de zéro</i> en dérivant une classe de <tt><a><span>Collator</span></a></tt>. Vous pouvez aussi utiliser une instance de la classe <tt><a><span>RuleBasedCollator</span></a></tt> qui permet de définir un ordre de tri à l'aide de règles.
</p>]]></description></item><item><title>3.3 Packager le JAR</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#Packager_le_JAR</link><description><![CDATA[<p>Passons maintenant à l'empaquetage de notre service dans un JAR. La seule différence avec un JAR <i>ordinaire</i> est que nous devons fournir le fichier <i>META-INF/services/java.text.spi.CollatorProvider</i>, et indiquer dedans le <i>nom</i> de notre classe fournissant un service de collation:
</p>]]></description></item><item><title>3.4 Installer le service</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#Installer_le_service</link><description><![CDATA[<p>Installer le service dans la JVM revient à copier notre JAR dans le dossier d'extention correspondant. Le dossier standard est <tt>$JAVA_HOME/lib/ext</tt>. Mais il n'est pas toujours souhaitable de modifier les dossiers <i>standards</i> de Java. Heureusement, il est possible de spécifier un <i>autre</i> dossier d'extension. A l'aide de la propriété <i>java.ext.dirs</i>. Par exemple pour désigner le répertoire courant (. – <i>point</i>):
</p>]]></description></item><item><title>4 En conclusion</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#En_conclusion</link><description><![CDATA[<p>Les explications ont pu vous sembler bien longue! Mais c'est parce que j'ai voulu détailler l'ensemble du processus. En pratique, cela se résume à définir une classe et à respecter le format pour le JAR du service. Quand on l'a fait une fois, il devient très facile de recommencer au besoin...
</p>]]></description></item><item><title>5 Références</title><link>http://www.chicoree.fr/w/D%C3%A9finir_un_ordre_de_tri_personnalis%C3%A9_dans_Apache_Derby#R.C3.A9f.C3.A9rences</link><description/></item></channel></rss>
