Recherche

Coder's IO

Tag

Tools

Java au quotidien épisode 3

 

Aujourd’hui, je vais vous parler d’une méthode disponible dans l’API Guava que je trouve très pratique pour adresser des problématiques de partitionnement d’ensemble.
Je vois deux cas d’utilisations de cette méthode (tiré d’un cas réel) : 

– gérer de la pagination,
– Spring batch ( en mode partitionnement).

Cette fameuse méthode fait partie de la classe Lists. Elle a la signature suivante : 
public static <T> List<List<T>> partition(List<T> list,int size)

Elle permet à partir d’une liste typée et de la définition d’une taille, d’obtenir un ensemble de listes d’une taille correspondant à la taille définie en paramètre (sauf éventuellement pour la dernière ;-)). Chacune des listes contient un sous-ensemble de la liste passée en paramètre.

Si l’on prend, par exemple, le premier cas de figure évoqué au début de l’article, sur la gestion d’une pagination, on peut se rendre compte de tout l’intérêt d’une telle méthode.
Dans certain cas, cette gestion est faite à la mano  :

//   En paramètre page courante, nombre d'élément par page

   final List<MyElement> elementList = ElementProvider.getAllElement(/*some parameters*/);
   totalRecords = elementList.size();
   offset = rows * (page – 1);
   // Let's avoid showing a blank page, back to first one.
   if (totalRecords < offset) {
offset = 0;
page = 1;
   }
int start = offset, end, size;
List<MyElement> selectedElements;
do {
size = rows > totalRecords – start ? totalRecords – start : rows;
end = start + size;
selectedElements = size > 0 ? elementList.subList(start, end) : new LinkedList<MyElement>();
doSomething(selectedElements);
start = end;
} while (selectedElements.size() < size && rows == size);

                                                            
Sans vraiment regarder le détail du code ci-dessus (tiré de la vraie vie), on s’aperçoit que la complexité est là.
On pourrait remplacer ce code par le suivant : 

 final List<MyElement> elementList = ElementProvider.getAllElement(/*some parameters*/);

List<MyElement> currentElements = Lists.partition(elementList, nbElemeByPage).get(idxCurrentePage);

Remarque : certaines vérifications pour sécuriser le code seront tout de même nécessaires. Néanmoins celles-ci ne remettront pas en cause la simplicité du code

On voit que le code est beaucoup plus clair et concis.

L’autre cas concernant Spring Batch est clairement adapté. 
Pour rappel, l’utilisation du partitionnement au sein de spring batch permet de répartir sur plusieurs agents le traitement d’un ensemble de données. En entrée de l’unité de traitement spring Batch, un ensemble. Cet ensemble est découpé en parts égales et distribuées à plusieurs agents (distants ou locaux) pour effectuer de manière cloisonnée et en parallèle un traitement à partir des données.

Dans ce cas, l’utilisation de la méthode de partitionnement est plus qu’évidente.

Voila j’espère que ce court article vous aura fait découvrir un outil qui vous sera utile dans votre quotidien…

A vos marques, prêt ? .. Partitionnez !

#Java #guava #partition #tools

Java et sa boite à outils

Le JDK fournit un ensemble d’outils intéressants lors de son installation. Ces outils répondent à différents besoins.
Ces outils sont généralement peu connus. Nous sommes (trop) habitués à utiliser nos IDEs préférés et à ne pas fouiner dans les répertoires du JDK.

Voici donc une liste (non exhaustive) décrivant les outils principaux fournis en standard :

Les outils les plus connus :
appletviewer : Permet de tester une applet sans navigateur,
jar : création et gestion de fichier .jar,
java : Lanceur de la JVM (le jre ne sera plus supporté),
javac : Compilateur de code source -> bytecode,
javadoc : générateur de la javadoc à partir du code source,
rmic : Générateur des stubs et skeletons pour un contexte distribué,
rmiregistry : Service d’enregistrement de référence d’objet distant

Les outils liés à la sécurité :
keytool : Gestion des certificats et des keytools,
jarsigner : Permet de signer et vérifier un jar

Les outils liés au déploiement :
pack200 : Optimisation de la compression des jars,

Il existe de outils qui sont au stade expérimental. Ces outils n’ont pas la garantie d’être supportés dans les futures releases du langage.

Les outils de monitoring :
JConsole : Visualisation des indicateurs CPU / Mémoire / Threads / JMX d'une JVM,
jps : Visualisation du status des process dans la JVM,
jstat : Visualisation d’information statistique sur la JVM,

Les outils d’analyse de problème :
jinfo : Fournit des informations sur un process en particulier,
jhat : Visualisation dans une page web du heap dump file,
jmap : Visualisation de l’espace mémoire de la JVM,
jstack : Visualisation de la stack trace d’un thread

Les outils de scripting :
jrunscript : Script shell pour le langage Java.

La liste ci-dessus n’est pas exhaustive, elle donne un petit aperçu

Pour une bonne culture générale sur le langage Java, il est intéressant de prendre connaissance de ces outils.

#java #outils #tools #jdk #jconsole

Propulsé par WordPress.com.

Retour en haut ↑

Concevoir un site comme celui-ci avec WordPress.com
Commencer