mardi 29 mai 2012
[Java JEE Tunisie ] TunisJUG organise son second évènement développeur, avec le soutien de OXIA
Après le succès de la première rencontre (24/04/2012) à l'ISG, TunisJUG organise son deuxième évènement à l'INSAT (Institut National des Sciences Appliquées et de Technologie), le
jeudi 12 avril 2012
Lancement du Tunisian Java User Group de TnJUG le 24 Avril à l’Institut Supérieur de Gestion à Tunis
Si vous êtes développeur Java, cet événement est dédié pour vous. C’est une occasion pour commencer à échanger des idées et discuter des avancées technologiques de la plateforme Java.
Programme :
17h00 – 17h30 : Ouverture et réception des invités.
17h30 – 18h45 : Java : History, present and future : Khaled Ben Driss (OXIA)
18h45 – 19h00 : Pause Café + Rencontre entre les Funs de Java.
19h00 – 19h30 : Présentation d’Exo: Ali Hamdi.
19h30 – 21h00 : FeedBack JUG : Nantes JUG + Présentation Cloud: retour d’expérience d’un développeur (Sujet du thème Devox 2012) : Tugdual Grall.
Source
http://www.tnjug.co.cc/?p=51
adresse
institut supérieur de gestion
41, Avenue de la Liberté, Cité Bouchoucha, Le Bardo 2000 -, Gouvernorat de Tunis 2000, Tunisie
mardi 21 février 2012
[Java Groovy Grails Cloud] Grails 2.0 : un Ruby on Rails à base de Java (Groovy)
La version 2.0 de Grails est désormais disponible depuis quelques semaines.
Il s'agit qu'une évolution de la version 1.3 et non d'une version majeure, ça aurait pu être Grails 1.4. Mais apparemment, le nombre de modifications a inspiré les concepteurs à passer vers la version 2.0 :
- Groovy 1.8,
- Spring 3.1,
- Hibernate 3.6
- Servlet 3.0
- La migration vers le framework JS, JQuery en remplacment de Prototype
- La possibilité de réaliser de la génération de code (dynamqiue ou statci) dite scaffolding Html 5,
- La migration vers une API de test unitaires à base de groovy Spock,
- L'ajout du mode XA pour les transaction entre deux bases de données
- le reverse engineering d'une base existante seront désormais possibles,
En plus des dizaines de plugins (WS, …), de la compatibilité avec le PaaS de Google GAE (Google appengine, Cloud computing), Grails 2.0 fait une ouverture vers le mode noSQL avec le support de la base de données MongoDB
samedi 11 septembre 2010
[Java 7] Java 7 sortira en retard : attendu à la mi-2012, et rien sur la “Java Cloud Edition”
La sortie de Java 7 est prévue pour 2012.
C’est ce que vient d’annoncer Mark Reinhold, l’Architect en Chef du "Java Platform Group" chez Oracle : “Our present best estimate is that we could complete, test, and stabilize the planned work in time for a release around the middle of 2012. “
Oui, Java 7 sortira ! Mais en retard !!
Pourquoi ce retard, lorsqu’on sait pertinemment, qu’Oracle est “obligé" de soutenir java ?
Oracle dit qu’elle doit tout re-vérifier !
Plausible, pour quelqu’un qui vient « d’hériter » de quelques 6 millions de lignes de codes
.
Mark Reinhold, présente deux scenarii
| Plan A: | JDK 7 (tel que définit actuellement) | mi 2012 |
| Plan B: | JDK 7 (sans Lambda (closures), Jigsaw (modularisation)…) | mi 2011 |
| JDK 8 (avec Lambda (closures), Jigsaw (modularisation, ++ | fin 2012 |
De toute façon, aucun n’est satisfaisant.
La version 7 de Java, qui a pris du retard en tant que langage de programmation (par rapport à C# 4 par exemple), sortira sans véritable innovation (heureusement que la communauté continue d’innover avec Scala, Groovy, Grails …. )
La véritable inquiétude reste que Java 7, sortira en 2012 sans aucune ambition pour le cloud computing…!!
Java 7 sans ambition pour le Cloud computing
A sa sortie en 2012, java 7 ne proposera pas de modèle de programmation native adapté au cloud computing (sans framework à la rescousse). Il n’est pas prévu de sortir « Java Cloud Edition » (dans la jargon java, JCE est déjà associé à Java Cryptography Extension).
Rappelons qu’en 2012, Java 6, lancé le 11 décembre 2006, fêterait ça 6ième année.
A l’époque du premier planning de Java7, personne ne faisait le lient entre Java et le cloud computing, ni avec le PaaS (Platform as a Service) !, d’autant plus que ces derniers ne faisait partie du Buz techno de l’époque.
Google trends
Besoin d’une version cloud de Java : Java Cloud Edition (JCE)
Il est temps de saisir l’opportunité de créer un tournant dans le modèle de programmation Java et de lui donner une orientation plus franche vers les besoins du cloud computing et le web 2.0.
La question à se poser est : quand est ce qu’Oracle saisira l’aspiration d’une grande partie des 9 millions de développeurs java (6 miilions de développeurs en 2007) à capitaliser sur leur expérience et se préparer à l’émergence du développement d’application pour le Cloud computing.
En plus de Java SE et de java EE , la communauté Java doit disposer d’une Java Cloud Edition : standardiser la solution du multi-tenacy, de sécurité, de l’accès aux données, de la gestion du cache, …
L’idéal serait la standardisation des PaaS et l’unification des modèles de programmation pour le cloud et sur site (on-premise).
Malheureusement ce n’est pas encore dans le planning de java chez Oracle…
lundi 6 septembre 2010
[cloud Azure] Windows Azure SDK pour les développeurs Java (windowsazure4j)
Indirectement, à travers un projet open source, Microsoft fait un clin d’œil aux développateurs Java pour les attirer vers son offre PaaS Azure.
Il s’agit du projet http://www.windowsazure4j.org/ : un projet open source pour fournir un kit de développement pour Windows Azure et Windows Azure Storage ( Blobs, Tables & files d'attente).
Ce projet permet aux développeurs Java de profiter de la plate-forme Microsoft Services Cloud - Windows Azure et fournit un modèle cohérent de programmation pour Windows Azure Storage (Blobs, Tables & files d'attente).
Le Windows Azure SDK for Java permet, à toute application développée sur Java, d'accéder aux stockage Windows Azure, à la puissance de calcul et aux interfaces de gestion de la plateforme en faisant abstraction du Protocol REST pour
Ainsi, ce que propose le projet :
· des classes Java pour Windows Azure Blobs, Tables & files d'attente (pour les opérations CRUD)
· des classes utiles pour l’abstraction du dialogue avec le protocole http, REST et la gestion des erreurs.
· Le support du logging et de l’instrumentation
Pour que ce modèle d’usage du PaaS pour Java, puisse concurrencer les autres offres du marché (Google, Spring/vmaware et Force.com), il va falloir que Microsoft montre un soutient indéfectible pour ce type de projet.
Notons que le choix de la licence “Apache 2.0”, pour le projet, a été très judicieux …
A suivre …
mardi 18 mai 2010
Alfresco présente Activiti BPMN 2 : 1er moteur BPMN 2.0 open source sous licence Apache
En avril, dernier, lorsqu’on a parlé, dans ce blog, du départ de deux membres importants quittent l’équipe JBPM, nous avons annoncé que Tom Baeyens et Joram Barrez promettent, sur le blog de Joram Barrez, le lancement imminent d’un nouveau Moteur BPM basé sur la norme BPMN 2.0 sous la licence apache.
Une partie de l’annonce était « We’re building a new BPM platform that’s architected for new IT requirements. It will be Apache licensed and it will run BPMN 2.0 natively ! »
C’est annoncé !!,
C’est sous les couleurs de Alfresco, le Leader de l’ECM open source, que les deux “mousquetaires du BPM” proposent ce nouveau moteur, nommé Activiti.
Activiti va rendre le Business Process Management (BPM) une commodité.
il a au moins la particularité d’être le 1er moteur BPM (et en plus BPMN 2.0) open source sous licence Apache.
Activiti un moteur BPM
La première version alpha d’Activiti intègre les fonctionnalités suivantes :
- Activiti Engine – Fichier JAR contenant la machine virtuelle de processus et l’implémentation du langage de processus BPMN ;
- Activiti Probe – Console d’administration système permettant de commander le moteur Activiti ;
- Activiti Explorer – Application utilisateur permettant de gérer facilement les listes de tâches et d’exécuter les tâches de processus ;
- Activiti Modeler – Outil de modélisation des processus BPMN 2.0 via un navigateur, basé sur Ajax, destiné aux analystes métier.
Selon Tom Baeyens, « Activiti va véritablement bouleverser le paysage BPM », explique Tom Baeyens. « Avec sa licence Apache et sa richesse fonctionnelle,
A l’instar de l’approche de Micorsoft avec WPF 4.0 chez les développeurs .Net, l’équipe d’Activiti, va essayer de déclencher une large adoption de la technologie BPM chez les développeurs Java.
Activiti est ainsi à même de s’imposer comme l’implémentation standard du BPM et du BPMN.
Remarquons l’utilisation du moteur de modélisation web SIGNAVIO, pour la modélisation.
Il est prévisible que ce moteur de BPM, Activiti deviendra le moteur de gestion des processus métier par défaut d’Alfresco.
bravo pour cette initiative, à la sauce Apache, une licence business frendly …
étape suivante : tester et mettre à l’épreuve…
site web
http://www.activiti.org/RichFaces 3.3.3 supporte JSF 2.0 : la version est disponible
L'équipe de RichFaces vient d'annoncer la sortie de la version 3.3.3 final de RichFaces.
Cette version est une étape importante pour l’équipe RichFaces et Jboss : RichFaces 3.3.3 amène un support (certes basic, mais suffisant) pour JSF 2.0.
Bien que cette version a stabilisé lees composants pour le support de la norme JSF 2.0, il n’est pas encore conseillée de passer en production en JSF 2.0, sauf si on souhaite être le premier.
Affaire à suivre …
Télécharger RichFaces 3.3.3 http://www.jboss.org/richfaces/download.html
mardi 4 mai 2010
Tuning JVM et GC (Garbage collector) : La permanent generation
Question : quelle est le rôle de la permanent permanent generation
Ce travail a été réalisé en collaboration avec Hamed KOUBAA, Architect SOA.
Permanent generation ?
Rappelons que la zone permanent generation définit une zone de mémoire qui accueille des objets permanents. Elle contient la définition des classes Java, qui sont chargées au démarrage de la JVM et au cours de l'exécution de l'application.
Il arrive parfois que cette zone soit trop petite et provoque un blocage de votre application. Dans ce cas le message de l'exception
• OutOfMemoryException : PermGen space.
Il n'y a pas de collectes dans cette zone.
introduction
L’objectif de cet atelier est de sensibiliser au choix des espaces mémoires de la JVM, basée sur un GC générationnel. Nous avons appliques au JDK de SUN.
Le principe de l’atelier est simple : utiliser l’application java2D (inclus dans la jdk %java_home%/demo/jfc/Java2D) avec des paramètres différents de la JVM et interpréter les résultats obtenus.
pré requis
Les expérimentations de ce tutorial peuvent être réalisé sous Solaris, Linux et Windows : là où le JDK Hotspot de Sun fonctionne.
Il suffit d’Installer une JDK ultérieure à la version 5.0.
Les tests ont été réalisés avec JDK 1.0.0 build 17.
Noter que le JDK qui inclut des "démos" est nécessaire - la JRE n'est pas suffisante.
Configurer les variables d’environnement JAVA_HOME
- télécharger si besoin visualgc .
Maintenant vous êtes prêt pour démarrer l’atelier.
Une génération permanente trop petite
Pour cet exercice, on réinitialise la taille maximale du Heap à notre standard de 16 MB. Nous gardons la jeune génération à notre optimale 4 MB.
Et maintenant, nous introduisons perm gen tuning en le fixant à 1 Mb.
-XX:PermSize=1m -XX:MaxPermSize=1m -XX:NewSize=4m -XX:MaxNewSize=4m -Xms16m -Xmx16m
- agrandir la fenêtre du java2D et observer le résultat
Le log de l’application montre qu’il y a une exception outOfMemory PerGen
Interprétation
Comment pouvez-vous savoir quand la permanent generation est trop petite?
Si l'application ne démarre pas ou se bloque avec une exception mémoire
Pourquoi une permanent generation qui est trop petit un problème?
Si la génération permanente est trop faible il n'y aura pas assez de place pour la JVM pour charger les bocaux et classfiles qui composent l'application elle-même.
La génération permanente est spéciale parce qu'elle contient des données utilisées par la machine virtuelle pour décrire les objets qui ne disposent pas d'une équivalence au niveau du langage Java. Par exemple, les objets décrivant les classes et les méthodes sont stockées dans la génération permanente.
Une génération permanente ayant la bonne taille
Maintenant nous avons fixé la permanent generation à 17 Mo (au lieu de 1 Mo pour l'exercice précédent). Le Heap d'ensemble et la taille des nouvelle génération reste la même à 16 Mo et 4 Mo, respectivement.
-XX:PermSize=17m -XX:MaxPermSize=17m -XX:NewSize=4m -XX:MaxNewSize=4m -Xms16m -Xmx16m
Interprétation :
Comment connaissez-vous la permanent generation a une taille adéquate?
Lorsque vous trouvez que le programme s'exécute avec une marge confortable de l'espace gen Perm.
Puis-je laisser la JVM déterminer la bonne taille permanent generation?
Bien sûr, en fait, vous pouvez définir les valeurs maximales de la permanent generation et laisser la JVM déterminer la taille adéquate selon le besoin, mais toujours sans dépasser cette taille max.
Pourquoi le tuning de la permanent generation est important?
Le tuning de la permanent generation est important si le contrôle de la consommation mémoire globale est important et que vous voulez obtenir un gain de performances supplémentaires en éliminant le temps de redimensionnement de la permanent generation.
jeudi 29 avril 2010
Tuning JVM et GC (Garbage collector) young generation : influence de la taille de la young generation (3/3)
Question : comment se manifeste l’effet d’une young generation de taille acceptable
Ce travail a été réalisé en collaboration avec Hamed KOUBAA, Architect SOA.
Introduction
L’objectif de cet atelier est de sensibiliser au choix des espaces mémoires de la JVM, basée sur un GC générationnel. Nous avons appliques au JDK de SUN.
Le principe de l’atelier est simple : utiliser l’application java2D (inclus dans la jdk %java_home%/demo/jfc/Java2D) avec des paramètres différents de la JVM et interpréter les résultats obtenus.
pré requis
Les expérimentations de ce tutorial peuvent être réalisé sous Solaris, Linux et Windows : là où le JDK Hotspot de Sun fonctionne.
Il suffit d’Installer une JDK ultérieure à la version 5.0.
Les tests ont été réalisés avec JDK 1.0.0 build 17.
Noter que le JDK qui inclut des "démos" est nécessaire - un JRE n'est pas suffisant.
Configurer les variables d’environnement JAVA_HOME
- télécharger si besoin visualgc .
Maintenant vous êtes prêt pour démarrer l’atelier.
Une jeune génération ayant la bonne taille
Dans cet exemple nous essayons de fixer la bonne taille de la jeune génération.
Rappelons que la valeur adéquate de la young generation dépend de l'application exécutée.
Il s'agit probablement d'une plage de valeurs acceptables.
Pour cet exemple, nous maintenons la taille maximale du Heap à 16 MB, mais nous fixons la jeune génération à 4 MB
-XX:NewSize=4m -XX:MaxNewSize=4m -Xms16m -Xmx16m
- une fois l’application lancée, cliquez rapidement sur l’onglet transform > dans le carrée transform anim (celui en bas), augmenter le nombre d’objets de string et d’images animés au maximum. (à l’instar des autres exemples)
- ce qui suit est l’état de visualGC après une minute et demie d’observation
Interprétation
Si les temps de GC sont plus petite, cela peut signifier que nous avons réussi notre paramétrage (même si c’est encore tôt pour juger car la JVM peut bien se comporter dans des petit délais, puis elle change de comportement au cours de l’exécution)
Comment connaissez-vous que la jeune génération est bien ajuster?
Quand ce n'est pas trop petit ou trop grand ;-)
Bien entendu, la diminution des temps de CG est une bonne indication.
Remarques
Maintenant vous avez une compréhension des zones de mémoire HotSpot que vous avez réellement vu en exécutant Visual GC.
Vous avez une idée sur le paramétrage du young génération.
Astuce :
Pour Lignes directrices générales pour le dimensionnement de la jeune génération:
* Le ratio maximal entre la jeune génération (young generation) et le Heap ne doit pas dépasser les 45%
Si vous dépassez ce ratio alors il ya un risque que la jeune génération entière contient des objets vivants qu'ils ne pouvaient pas tous être promu à la old generation.
Généralement pour les applications clientes on commence par un pourcentage de 25%.
Pour les applications serveur on commence généralement par un pourcentage de 10% du Heap.
On augmente le taux selon les besoins.
Conclusion et perspectives :
Nous avons traités l’impact des principaux paramètres de la JVM
-XX:PermSize, -XX:MaxPermSize, -XX:NewSize, -XX:MaxNewSize, -Xms, -Xmx
une idée sur les indicateurs d’une JVM mal paramétrer : détecter quand le young generation, le old generation ou la permanet generation sont trop petit ou trop grand.
Plus la taille de la young generation est grande plus les collectes mineures sont rares.
Cependant, lorsque la taille du heap est peu extensible, cela va diminuer la taille de la tenured generation ce qui aura pour conséquence d'augmenter la fréquence des collectes majeures.
Un conseil :
L’étape suivante consiste à voir l’effet des autres paramètres de la JVM tq (disableExplicitGC, agressiveheap, printCompilation, concurrentGarbageCollection …Etc) utilisant d’autres exemples et en appliquant à votre application.
mardi 27 avril 2010
Tuning JVM et GC (Garbage collector) young generation : influence de la taille de la young generation 2/3
Question : quelle est l’influence d’une young generation ayant une taille trop grande
Ce travail a été réalisé en collaboration avec Hamed KOUBAA, Architect SOA.
pré requis
Les expérimentations de ce tutorial peuvent être réalisé sous Solaris, Linux et Windows : là où le JDK Hotspot de Sun fonctionne.
Il suffit d’Installer une JDK ultérieure à la version 5.0.
Les tests ont été réalisés avec JDK 1.0.0 build 17.
Noter que le JDK qui inclut des "démos" est nécessaire - un JRE n'est pas suffisant.
Configurer les variables d’environnement JAVA_HOME
- télécharger si besoin visualgc .
Maintenant vous êtes prêt pour démarrer l’atelier.
Une jeune génération trop grande
Pour cette partie, nous maintenons la taille maximale du Heap à 16 MB.
Et nous fixons la taille de la « jeune génération » à 5,5 MB. (Souvenez-vous dans l’exemple précédent nous avons mis la jeune génération à seulement 1 Mo)
-XX:NewSize=5500k -XX:MaxNewSize=5500k -Xms16m -Xmx16m
La suite de la présentation est identique à ce qui a été fait précédemment
Lancer la démo Java2D
Lancer visualGC
- une fois l’application Java2D lancée, cliquez rapidement sur l’onglet transform > dans le carrée transform anim (celui en bas), augmenter le nombre d’objets de string et d’images animés au maximum.
- ce qui suit est l’état de visualGC après une minute et demie d’observation
Pour cet exemple, nous avons eu 70 collections mineures (contre 160 dans l'exercice précédent), 48 collections complètes « full » (contre 16) et nous avons passé un total de 3 seconds. Bref, 3,33% (contre 1,66%) de la durée totale en GC.
(NB: ces chiffres différent selon la machine sur laquelle on exécute, mais la tendance est la même)
NB :
Il est à noter que pour cet exemple la jeune génération n’est pas de grande taille.
Interprétation
Notez que l’effet en dents de scie n’est plus clair. Vous pouvez remarquer également que l’application «saccade » en raison du fait que chaque GC mineur prend plus de temps (collection de 5,5 Mo au lieu de 1 Mo).
Même si vous avez moins de GC, ils prennent beaucoup de temps quand ils se produisent.
Pourquoi une jeune génération « trop grande » constitue un problème?
Si la jeune génération est trop grande, les pauses des collectes GC mineur risquent d’être plus longues (ce qu’on appelle Stop the world). Cela se manifeste, par exemple, par un “affichage saccadée” pour les applications clientes.
NB : les valeurs fixés ont un but pédagogique d’illustration …
vendredi 23 avril 2010
Tuning JVM et GC (Garbage collector) young generation : influence de la taille de la young generation 1/3
Question : quelle est l’influence d’une young generation de petite taille
Ce travail a été réalisé en collaboration avec Hamed KOUBAA, Architect SOA.
introduction
L’objectif de cet atelier est de sensibiliser au choix des espaces mémoires de la JVM, basée sur un GC générationnel. Nous avons appliques au JDK de SUN.
Fixer la taille des zones mémoire de la JVM dépend de l’application, du cycle de création d’objets de l’application et nécessite une compréhension « détaillée» du fonctionnement du GC.
Les paramètres à donner à la JVM soutenant une d’une application Batch ne sont pas les mêmes que ceux d’une application web transactionnelle.
Afin d’illustrer les effets de la taille des zones mémoires de la JVM, nous avons délibérément utilisé un exemple simple et disponible : la fameuse démo Swing Java2D.
Le principe de l’atelier est simple : utiliser l’application java2D (inclus dans la jdk %java_home%/demo/jfc/Java2D) avec des paramètres différents de la JVM et interpréter les résultats obtenus.
pré requis
Les expérimentations de ce tutorial peuvent être réalisé sous Solaris, Linux et Windows : là où le JDK Hotspot de Sun fonctionne.
Il suffit d’Installer une JDK ultérieure à la version 5.0.
Les tests ont été réalisés avec JDK 1.0.0 build 17.
Noter que le JDK qui inclut des "démos" est nécessaire - un JRE n'est pas suffisant.
Configurer les variables d’environnement JAVA_HOME
- télécharger si besoin visualgc .
Maintenant vous êtes prêt pour démarrer l’atelier.
Manipulation des espaces mémoires de la jeune génération(young generation):
L’espace mémoire de la jeune génération (young generation) est constituer de la zone dite « Eden » plus deux espaces dits « survivor ».
L’objectif de cette partie de l’atelier est de savoir :
· Comment utiliser l’interface graphique de java perf pour lancer l'application Java 2D Demo et surveiller son rendement avec Visual GC.
· où trouver la ligne de commande qui règle les paramètres de la JVM
· Comment reconnaître si la jeune génération est trop petite, trop grande, avec une taille adéquate
Une jeune génération trop petite
Commencer par fixer la configuration suivante (appelé dans la suite LesCamandesGC)
-XX:NewSize=1m -XX:MaxNewSize=1m -Xms16m -Xmx16m -XX:MaxTenuringThreshold=0
Ces valeurs sont utilisées uniquement pour mettre l’accent sur les effets des paramètres du GC.
Lancer l'application Java 2D %java_home%/demo/jfc/Java2D avec cette commande
> java LesCamandesGC -jar Java2Demo.jar
- déterminer son identifiant de la machine virtuelle (VMID). La commande est « jps »
Ensuite utiliser ce VMID pour exécuter le programme jstat et recueillir des statistiques de base GC
- lancer l’application visual GC (télécharger si besoin visualgc ).
Visual GC donne un excellent aperçu de ce qui se passe dans la JVM. Lorsque vous combinez cette visualisation des statistiques supplémentaires recueillies pendant l'essai vous pouvez jauger la performance de l'application cible
L’application visualGC est composée de 3 volets :
1) Visual GC : Affiche les informations des applications de base comme le temps écoulé du processus et un certain nombre de statique (par exemple les options de ligne de commande).Notez que les zones d'écran représentant les Perm gen, Old gen, Eden et les espaces survivor (S0 et S1) sont dimensionnées proportionnellement à la capacité maximale des espaces.
2) Graph : Affiche des statistiques au fur et à mesure qu'elles évoluent dans le temps. Pour tous les exercices, l'intervalle d'échantillonnage a été choisie pour être une seconde.
3) Survivor Space histogramme : Le panneau histogramme affiche un aperçu de la répartition par âge des objets dans l'espace survivor actif après la dernière collection de la jeune génération. L'écran est composé de 32 régions de taille identique, un pour chaque âge objet possible.
Suite …
- Cliquez rapidement sur l’onglet transform > dans le carrée transform anim (celui en bas), augmenter le nombre d’objets de string et d’images animés au maximum.
Cette manipulation est importante pour obtenir l’effet recherché. En effet, les applications graphiques de l’onglet « transform » sont bien adaptés pour l'expérimentation du tuning de la JVM car ils créent beaucoup d'objets temporaires.
Faire un imprime-écran du visualGC après une minute et demie d’observation et essayer d’analyser le résultat.
Pour cet exemple, nous avons eu 160 collections mineures (c'est la jeune génération), 16 collections complètes « full » (c’est l'ancienne génération) et nous avons passé près de 1,5 secondes au garbage collection (cad un total de 1,66% de la durée totale en GC).
Interprétation :
Comment savoir si la jeune génération est trop petit?
| - Le premier indice est le pattern en dents de scie dans l’old generation. (NOTE: la vitesse à laquelle les objets sont générés dépend du matériel spécifique que vous utilisez ... Dans certains cas, ceci peut prendre plus temps pour se manifester .)
| |
| certains objets qui sont encore en vie sont directement promu vers l'ancienne génération (la jeune génération est trop petite …).
|
- Un autre indice est le grand nombre de GC de type mineur, dans un petit espace de temps.
NB : Pour forcer l’observation de ce comportement, nous pouvons utilisé la config suivante ;
-XX:NewSize=1m -XX:MaxNewSize=1m -Xms16m -Xmx16m -XX:MaxTenuringThreshold=0
Pourquoi une jeune génération trop petite est un problème?
La collection des anciennes générations est généralement plus chère que les collections des jeunes générations.
En trouvant la taille appropriée de la jeune génération, on permet au GC mineurs, qui sont plus rapides, de nettoyer les objets temporaire en ne laissant passer que les objets encore vivant pour être promus en « old generation ».
NB : Vous pourriez vous demander, pourquoi ne nous fixons-XX: MaxTenuringThreshold = 0?
Avec ce paramétrage, nous demandons essentiellement à la JVM de promouvoir tout objet qui est vivant au cours d'un GC mineur à l’old generation.
à utiliser uniquement pour des besoins de démo!
Mais, pour des applications batch, où la majorité des objets sont “de type old” un MaxTenuringThreshold de petite taille peut aider ….mardi 20 avril 2010
Quel avenir pour Java chez Oracle, après le départ de James Gosling
Extrait de l’article sur le Journal du Net : Quel avenir pour Java chez Oracle, après le départ de James Gosling (le père du langage)
James Gosling, le créateur du langage de programmation Java, a démissionné de Oracle, il a annoncé sur son nouveau blog le vendredi.
Un nouveau signe de la prise en main du langage par Oracle.
James Gosling, n’a pas expliqué les raisons de sa démission pour ne pas créer des vagues !!
en conclusion : Java est tellement stratégique pour Oracle pour qu’elle freine sa lancé …
vendredi 16 avril 2010
Tuning JVM et GC (Garbage collector) : Avantages du "generational collection"
Un des avantages du "generational collection" est qu'il peut rendre les pauses causés par les GC plus courtes en ne rassemblant pas toutes les générations à la fois.
Rappelons que lorsque la demande d'allocation de mémoire ne peut être satisfaite,
• le GC déclenche d'abord "une collecte mineure", qui rassemble seulement la plus jeune génération. Puisque plusieurs des objets dans la jeune génération seront déjà morts (le collecteur copiant n'a pas besoin d'examiner les objets morts), les pauses mineures de GC peuvent être courtes et peuvent souvent reprendre un espace significatif du Heap.
• Si la collecte mineure libère assez d'espace du heap, le programme peut reprendre immédiatement.
• Mais, si ce n'est pas le cas, le GC procède à la collecte des générations plus élevées jusqu'à ce qu'assez de mémoire ait été reprise (une Full collection).
• Si le GC, ne peut reprendre assez de mémoire après une "Full collection", il augmentera la taille du heap, ou il lèvera une Erreur OutOfMemoryError
Les paramètres les plus connues sont :
-XX:PermSize, -XX:MaxPermSize, -XX:NewSize, -XX:MaxNewSize, -Xms, -Xmx
| -XX:PermSize | La taille de la génération permanente |
| -Xms | La taille initiale du Heap |
| -Xmx | La taille maximale du Heap |
| -XX:MinHeapFreeRatio | Pourcentage de l'espace libre minimum au sein d'une collection. Le GC accroît ou réduit la taille des collections pour tenter de préserver cette proportion. Par défaut elle est souvent de 40% (dépend de la plate-forme). |
| -XX:MaxHeapFreeRatio | Pourcentage de l'espace libre maximum au sein d'une collection. Le GC accroît ou réduit la taille des collections pour tenter de préserver cette proportion. Par défaut elle est souvent de 70% (dépend de la plate-forme). |
| -XX:NewRatio | Un ratio est utilisé qui indique le rapport entre la taille de la tenured gen et la young gen. Ce ratio est ensuite appliqué sur la valeur de l'option Xmx qui fixe la taille totale du heap. -XX:NewRatio=n ou n est un nombre entier. Si n vaut 3 alors la young gen est 3 fois plus petite que la tenured generation. |
| -XX:NewSize | Fixe la taille de la young gen -XX:NewSize = 4m fixe la taille la young generation à 4 MO. |
| -XX:MaxNewSize | Fixe la taille maximale de la young gen - XX:NewSize = 40m fixe la taille maximale la young generation à 40MO. |
• Les commandes en –X ne sont pas documentées !!!
· java –X
Dans la suite nous allons montrer l’importance des choix des valeurs de certains de ces paramètres
samedi 10 avril 2010
Java : James Gosling Quitte Oracle (SUN)
Le père de Java démissionne d’Oracle (SUN)
James Gosling, le créateur du langage de programmation Java, a démissionné de Oracle, il a annoncé sur son blog (nouveau) le vendredi.
Un nouveau signe de la prise en main du langage par Oracle.
James Gosling, n’a pas expliqué les raisons de sa démission ( déposé le 02/04/2010), pour ne pas créer des vagues !!
Sage décision
Que cache l’avenir pour Java ?
Un “nouveau sang” ne peut faire que du bien (s’il reste compatible …)
De toutes les façons, Java est tellement stratégique pour Oracle pour qu’elle freine sa lancé …et lance (à la hâte) un nouveau Blog
Voici le nouveau blog de James Gosling
http://nighthacks.com/roller/jag/category/Java
une partie de son annonce (historique):
| Friday April 9, 2010 | |
| Yes, indeed, the rumors are true: I resigned from Oracle a week ago (April 2nd). I apologize to everyone in St Petersburg who came to TechDays on Thursday expecting to hear from me. I really hated not being there. As to why I left, it's difficult to answer: just about anything I could say that would be accurate and honest would do more harm than good. The hardest part is no longer being with all the great people I've had the privilege to work with over the years. I don't know what I'm going to do next, other than take some time off before I start job hunting. |
jeudi 8 avril 2010
Tuning JVM et GC (Garbage collector) : Rappel sur les generational garbage collectors
Question : quelle est la spécificité des GC (Garbage collector) générationnel
La technique employée pour les Garbage collector, depuis la JVM 1.2, est appelée "generational garbage collection" combine ces deux techniques pour tirer le meilleur parti des différents algorithmes du GC.
Ainsi, le heap (tas) est divisé en plusieurs zones basées sur l'âge d'un objet. Les différentes générations sont nettoyées (Garbage collection) séparément en utilisant des algorithmes de collection différents.
La mortalité enfantine des objets
L’idée est basée sur le constat de la mortalité enfantine des objets. La majorité des objets ont une durée de vie très courte "mortalité enfantine". Une étude statistique a montré que 80-98% des objets nouvellement alloués, meurent en quelques million d'instructions. Une autre a montré que 80-98% des objets nouvellement alloués, meurent avant qu'un autre Megabyte a été alloué.
Ce constat a un grand impact sur les algorithmes choisis pour le GC.
Generational collector
Ainsi un GC de type "Generational collector" divise le heap en plusieurs zones (générations).
Le objets sont créés, systématiquement, dans une zone dédiée dite young generation(dédié aux jeunes objets).
Les objets qui répondent à des critères de promotion, tels qu'avoir survécu à un certain nombre de collectes (lire GC), sont alors promus à la zone dédiée aux générations plus anciennes.
Cette zone est dite older generation (ou Tenured).
Un "generational collector" est libre d'employer une stratégie différente de collecte pour ses différentes zones et d'exécuter la collecte des "garbage" sur les générations séparément.
Dans la suite, nous utilisons les termes « anglais » afin de faciliter le lien avec les paramètres.
Le tuning de la JVM est le choix des paramètres
La JVM présente quelques dizaines de paramètres, permettant le tuning des performances.
Le plus important est de se fixer des objectifs et de conaitre sa cible.
Voici, quelques éléments à considérer, lors des choix des paramètres de chacune des zones mémoire constituant le Heap :
-
Durée de Pause : Est ce que le collecteur arrête le programme pour réaliser la collecte (dit stop-the-world)? Pour combien de temps? Est ce que la durée des pauses peut être limitée ?
-
Prédictibilité des pauses : Est ce les pauses causées par le GC peuvent être programmées à des périodes convenables à l'utilisateur du programme et non lorsque le GC le décide?
-
Usage CPU : Quel pourcentage de la CPU est consommé par le GC?
-
Utilisation de la Mémoire : Certains GC nécessite l'usage d'espace mémoire non accessible par l'utilisateur du programme, ce qui augmente la taille totale de la mémoire utilisée. La taille utilisée est supérieur à la mémoire nécessaire réellement au programme.
-
Interaction avec la mémoire virtuelle : Pour les systèmes qui n'ont pas beaucoup de mémoire physique, une opération de GC peut nécessiter une interaction avec la mémoire virtuelle ce qui dégrade les performances.
-
Interaction avec le Cache : Même pour les applications dont le heap peut résider dans la mémoire le GC aura comme impact de "flasher" les données utilisées par le programme, à cet instant, en dehors du cache, ce qui dégrade les performances
Suite de l’article sur les paramètres de la JVM, permettant le tuning des performances, dans les prochains postes ….
mardi 23 mars 2010
Ehcache 2.0 LE cache open source : Terracotta annonce la nouvelle version
Depuis peu sous le giron de Terracotta, Ehcache montre les signes d’un projet encore dynamique.
EHcache est le cache objet le plus populaire de la communauté open source. Son couplage avec Terracotta en fait une solution de cache de « classe entreprise ». EHcache est utilisé dans un vaste éventail d'applications pour booster les performances. Il est souvent associé à Hibernate. Il permet de décharger la base de données et simplifier la montée en charge.
J’ai eu le « plaisir « de l’activer (la version 1.2.3), récemment sur un projet :
· Aucun changement dans mon application (à part qq ligne sur la définition Hibernate)
· Des résultats immédiats : une amélioration nette des performances (l’application comporte un grand nombre de paramètres et de nomenclatures)
Bien que la version 1.x d’Ehcache soit robuste, éprouvée et complète des fonctionnalités, La nouvelle version Ehcache 2.0 était très attendue. Les améliorations les plus attendues sont :
- Le support de Hibernate 3.3 SPI caching plugin ›
- Le support de JTA ›
- La possibilité de changer la configuration dynamiquement à l’exécution avec JMX
Signalons la nouvelle offre apparue récement :ehcache-monitor (en beta)(décrit comme « ‘ Enterprise-class monitoring and management for development and production”
Ehcache est disponible sous la License Apache 2 et reste activement soutenu par Terracotta, Inc. Il est inclus dans l’offre de Terracotta scalability.
Terracotta souhaite « marquer son territoire » face à la montée de Jboss et son infinispan à ne pas confondre avec Jboss Cache.
vendredi 12 mars 2010
Tuning des applications Java EE : Formation pratique au tuning de la JVM et Tomcat
Présentation
Dans le cadre de cycle de ATT (Advanced Technology Training), un nouveau workshop est programmé pour le 24/25 mars 2010, à Tunis.
Il s’agit workshop pratique sera dédié à une formation pratique au tuning de la Java Virtual Machine et destinée aux administrateurs d’applications Java et aux développeurs.
Ce Workshop intensif de 2 jours est le fruit de plusieurs années d’expérience de OXIA dans la mise en ouvre d’application Java EE et l’utilisation de Java dans un environnement serveur et pour des applications critiques (Banque, télécom …).
Son objectif est permettre à l’administrateur de serveurs d’applications Java EE, de mieux appréhender le tuning des applications Java (JVM) les volé technique et méthodologique. Les cas pratiques sont appliqués à Tomcat.
Les ateliers pratiques utiliseront des outils open source de profiling JVM et le serveur d’application, ainsi, que le paramétrage avancé, la résolution des remontées d’erreurs dans un environnement de production (inspiré de ITIL).
objectifs
Etre capable de choisir les paramètres de la virtual machine pour une application en production
Connaitre les étapes du Processus et Engineering de Performance
Connaitre les outils permettant de mettre ouvre le processus
Quelques sujets traités:
· Présentation de langage Java et Configuration de l’environnement
· Notion de Performance / Tuning
· Architecture de la JVM
· Options d’utilisation : les paramètres les plus importants
· Tuning de la JVM
· Gestion de la mémoire «Garbage collecting» : les générations
· Diagnostics : Gestion des erreurs
· Java en environnement de production :
· Container Web
· Serveurs d’applications
· Processus et Engineering de Performance
· Les étapes
· Comment faire ?
Les outils utilisés
Les ateliers utiliseront des outils open source pour :
· Etude du garabage collector
· Mesure de temps de réponse
· Simulation d’utilisateurs web et d’une montée en charge
· Profilers
· Etude du cycle de création des objets dans la JVM
· Détermination des fuites de mémoire
Lieu : Tunis Date : 24, 25 mars contact : info@oxia-group.com Tél : +21671282700
-----------------
Sujets sur l’étude de performance :
- Est-ce que vous voulez connaitre ce que fait votre application coté base de données : employer un espion (open source)
- Performance Engineering Process & Solutions (PEP&S) : Partie 2
- La nouvelle version 3.0 de SOAPUI améliore le test des services REST
- Performance Engineering Process & Solutions : PEP&S
- Améliorer la performance de vos travaux de fin de journée par “JDBC Batch” et Spring
- Application web : la différence entre Mesure de performance, montée en charge et vitesse d’exécution
- Are the data from the GoogleApp Engine Dashbord valid?
- Quel crédit donner aux résultats affichés par le DashBoard de GoogleApp Engine (GAE) ?
- InfraRED : un outil de suivi des temps de réponse d’application J2EE, de monitoring et diagnostique de problèmes de performance.
jeudi 18 février 2010
JSF2.0 & Richfaces : la version 3.3.3 CR1 de Richfaces supporte JSF 2.0
Avec la sortie officielle des spécifications JSF 2.0 comme partie de la norme Java EE 6, les implémentations classiques de JSF commencent à l’adopter.
Richfaces avait annoncé le premier son intention de suivre la totalité de la norme JSF 2.0 dans la version 4.0.
Mais, devancent le lancement official de la version 4.0, la version 3.3.3 RC1 , de Richfaces supporte une partie de la spécification JSF 2.0.
Il s’agit d’un signale fort concernant la concurrence acharnée dans le domaine (IceFaces, …)
Richfaces 3.3.2 : une version aboutie
Je reconnais que la version 3.3.2 de Richfaces, couplée avec Facelets 1.1, est une implémentation aboutie de JSF 1.2. J’ai pu vérifier ce constat, récemment, dans un projet exploitant Richfaces et des composants flex : Aucun besoin de javaScript bien que l’interface soit très dynamique et l’usage d’ajax généralisé.
Rappelions que la version 3 de Richfaces supporte essentiellement les spécifications 1.2 de JSF.
Richfaces 3.3.3 & JSF 2.0 :Limitations
Attention : On pourra lire les avertissement suivants sur le wiki de Richfaces : http://community.jboss.org/wiki/RichFaces333andJSF20
Limitations List
RichFaces 3.3.3 does not support JSF 2 built-in facelets (VDL)
Facelets 1.1.15 should still be used because of dependencies in RichFaces from the Tag Handlers classes.
JSF 2 native ajax problems
f:ajax
As RichFaces 3.3.3 does not supports VDL - it does not support any new tags like f:ajax, h:outputScript and so on.
JSF ajax java script api
As JSF 2 currently does not provide a mechanism of cleaning Script objects for components removed by ajax - huge memory leaks could arise on updates RF components via JSF native ajax.
JSR-303 support
JSF 2 does not registering Bean validators while runned in compatibility mode (with VDL turned off and external facelets used.). This is not RichFaces 3.3.3 limitation but should be considered during porting applications to JSF 2.
https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1518 - issue at mojarra tracker.
Annotations Scanning
During initialization JSF 2 ConfigManager checks for faces-config presense and looks if it's version is equals to 2.0. So in order to get JSF annotations works with your existent application you should:
- have no faces-config in application
- or just version of application config should be changed to 2.0
jeudi 21 janvier 2010
Oracle / SUN & CE: La Commission européenne (CE) a officiellement approuvé
Aujourd'hui, la Commission européenne (CE) a officiellement approuvé l'acquisition par Oracle de Sun Microsystems.
Cette absorption va changer considérablement le paysage de l'industrie IT. Rappelons que le montant de la transaction par 7,4 milliards de dollars
En maitrisant toute la chaine de l’IT, Oracle pourra nous faire revivre l’ère du mainframe : elle offrira des solutions de base de données et non plus simplement un SGBDR. Solution au sens Hard, soft, mémoire rapide …avec engagement sur le résultat globale et les performances.
Parmi les questions examinées sur l’avenir de la compétition au sein de l’Europe de MySQL et Java à la lumière de cette fusion.
Annonce sur le site Oracle
European Commission Unconditionally Approves Oracle’s Acquisition of Sun
Redwood Shores, CA – January 21, 2010
Oracle Corporation (NASDAQ: ORCL) announced today that it had received regulatory approval from the European Commission for its acquisition of Sun Microsystems, Inc. Oracle expects unconditional approval from China and Russia and intends to close the transaction shortly.
Oracle will host an all-day live event for customers, partners, press and analysts on January 27th, 2010 at 9:00 AM Pacific time, at its headquarters in Redwood Shores, California. Details are available at www.oracle.com/sun.
samedi 16 janvier 2010
Séminaire Spring à Tunis : Adopting Spring Framework
Une nouvelle fois, l’ATUGE innove : Son Club techno organise un séminaire de haut niveau : avec trois Expert de SpringFramework : Arjen Poutsma , Russel Miles et Tareq Abderoabbo.
Lieu : Ecole Esprit – La Charguia II (Tunis)
Date : Vendredi 22 janvier 2010, de 18h30 à 20h30
Sujet :
Le sujet sera axé sur deux aspects :
-
1) Actualités : Les nouveautés de la version 3.0 de SpringFramework par Arjen Poutsma
-
2) Réponse aux besoins de l’entreprise : Spring Integration, l’un des modules les plus prometteurs de Spring par Russel Miles. Spring Integration a pour but de faciliter l'implémentation des solutions d'intégrations dans les applications d'entreprise
Rappelons que Spring 3 est une évolution majeure du framework contenant un grand nombre de nouveautés tel que le support des Web Services REST et Spring Expression Language.
D’autre part, Spring Integration pourra être utilisé pour implémenter un grand nombre des patterns de messaging dans vos applications ; je la qualifie pour le moment d’un ESB Like (dans ses première version je l’appelais pseudo ES) .
Intervenants
| Arjen Poutsma : Ingénieur à SpringSource. Fondateur et project lead de Spring Web Services. Spécialiste de SOA et de Spring. |
Arjen Poutsma is a senior enterprise application architect with fifteen years' experience in commercial software environments. During this time he has worked with both J2EE and Microsoft .NET.
Arjen is the founder and the project lead for the Spring Web Services. This Spring project aims at facilitating development of document-driven web services. Recently, Arjen worked on the REST support in Spring 3.0. Arjen has also contributed to various other open source projects, including XFire, NEO and others.
Since early 2005, Arjen has been a consultant for SpringSource in The Netherlands.
| Russel Miles : Consultant et directeur à OpenCredo, auteur de plusieurs livres à O'Reilly dont des best sellers. Spécialiste des applications entreprise et du cloud computing. |
Russ is a consultant and Managing Director of Open Credo.
Russ Miles is an authority on Enterprise, large-scale software development practices. Specialising in Cloud and Event Based software. Russ has also written 3 best-selling books ("AspectJ Cookbook", "Learning UML 2.0", "Head First Software Development") also commits to a number of open source projects.
Le modérateur : Tareq Abderabbo
Le modérateur du séminaire est lui-même un expert de Spring, il s’agit de Tareq Abderabbo : Consultant, Expert en Spring et SOA
Le Club techno de l’ATUGE (Association des Tunisiens des Grandes Ecoles)
Atuge Technologies est un club professionnel affilié à l'Atuge et a pour vocation de fédérer la population atugéenne ayant attrait au domaine des nouvelles technologies.
Les objectifs du club se résument en deux points clés :
- Un enrichissement mutuel, grâce au partage et aux échanges.
- Contribuer à une dynamique d'évolution, à la fois individuelle et collective.
Rappelons que le Club Technologies, dont le responsable actuel est Boujemaa Khaldi, nous a habitués avec des sujets d’actualités et d’un niveau très haut niveau des débats.
Lien http://digitalsyndrom.net/atuge/mailing15/
Lien ATUGE : http://www.atuge.org
Architecte SOA & Professionnel Open Source Headline Animator
Libellés
- open source ( 98 )
- Java ( 73 )
- java software ( 68 )
- SOA ( 51 )
- cloud computing ( 34 )
- Architecture ( 30 )
- ESB ( 29 )
- Tools ( 28 )
- Spring ( 27 )
- tutorial ( 27 )
- BPM ( 26 )
- BPMN ( 25 )
- Processus ( 25 )
- SaaS ( 25 )
- PaaS ( 24 )
- web ( 22 )
- performance ( 21 )
- EIP ( 20 )
- Microsoft ( 20 )
- Google appengine ( 18 )
- Mule ( 18 )
- web service ( 17 )
- Eclipse ( 16 )
- IBM ( 16 )
- JBPM ( 16 )
- CM ( 14 )
- GED ( 14 )
- IBM CM 8.4 ( 14 )
- Jboss ( 10 )
- offer services ( 10 )
- Azure ( 9 )
- Groovy ( 8 )
- M2M ( 8 )
- Drupal ( 7 )
- google ( 7 )
- grails ( 6 )
- .net ( 5 )
- ALM ( 5 )
- machine to machine ( 5 )
- open data ( 5 )
- sécurité ( 5 )
- C# ( 4 )
- MDM ( 4 )
- PHP 5 ( 4 )
- VS 2010 ( 4 )
- VSTS ( 4 )
- symfony ( 4 )
- twitter ( 4 )
- App Engine ( 2 )
- JUG ( 2 )
- Mobile ( 2 )
- PHP5 ( 2 )
- REST ( 2 )
- Tunisie ( 2 )
- eGov 2.0 ( 2 )
- smartgrid ( 2 )
- web 2.0 ( 2 )
- CMS ( 1 )
- CSA ( 1 )
- ENISA ( 1 )
- Gouvernance ( 1 )
- Internet of Things ( 1 )
- Iot ( 1 )
- MS ( 1 )
- PKI ( 1 )
- SharePoint ( 1 )
- TRA ( 1 )
- WP7 ( 1 )
- Wndows Phone 7 ( 1 )
- embedded systems ( 1 )
- général ( 1 )
- industrialisation ( 1 )
- innovation ( 1 )
- nearshore ( 1 )
- offshore ( 1 )
- opendata ( 1 )
- opengov ( 1 )
- réseaux sociaux ( 1 )
- scaffolding ( 1 )
- security ( 1 )
- systèmes embarqués ( 1 )
- testing ( 1 )
- validation logicielle ( 1 )



