Non classé
Une bonne analyse du rachat de Sun par Oracle
23/04/09
Difficile d’être passé à côté de LA nouvelle de la semaine, celle concernant le rachat de Sun par Oracle.
Une question intéressante est de savoir ce que vont devenir les produits Sun (voire ceux d’Oracle) qui font désormais doublon. Je vous renvoie sur une très bonne analyse de Sami Jaber, présentant entre autres un excellent tableau récapitulant le nouveau portefeuille d’Oracle…
Oracle prend à revers tout le marché de l’industrie et annonce finalement le rachat de Sun pour 7 Milliard de dollars. (…) voici mon analyse de la nouvelle donne griffonnée rapidement entre deux coups de fil.
Contrairement à IBM, Oracle dispose d’un portefeuille beaucoup plus concentré. Une offre qui s’articule autour de sa base de données maison et s’est étoffée au fil des acquisitions.
Start Slide Show with PicLens LiteMais globalement, je pense que ce rachat est un moindre mal. Là où IBM aurait difficilement trouvé de complémentarités avec Sun, Oracle s’enquiert d’un portefeuille riche qu’il devra conserver pour l’essentiel. (…)
IBM aurait racheté Sun pour le faire mourir à petit feu, Oracle achète Sun pour se renforcer, c’est une situation somme toute bien différente

Nouvelles versions de Sonar et Hudson
20/04/09
Ces jours-ci, mes outils préférés se mettent à jour…
Sonar 1.8
La dernière version de Sonar est sortie en fin de semaine dernière.
J’avais déjà évoqué les prochains chantiers de l’équipe de SonarSource lors de la sortie de la précédente version de l’outil.
En voici quelques résultats:
- Tout d’abord, l’apparition des « Hotspots », ces fameux dashboards récapitulant les principales faiblesses d’un projet (voir ici l’exemple des Hotspots pour le projet Tomcat sur le site de démonstration de Sonar Némo).
- Nous avons désormais la possibilité de visualiser les codes dupliqués directement depuis l’interface web.
- Maven 2.1 est dès à présent supporté par Sonar.
- Enfin, un meilleur paramètrage de FindBugs nous est offert.
Au delà des nouveautés fonctionnelles ou techniques, SonarSource souhaite également aider la communauté à développer de nouveaux plugins pour Sonar.
C’est la raison d’être de la Sonar Plugin Library.
A l’occasion, je me lancerais peut-être dans un petit tutoriel pour créer son propre plugin… A condition d’avoir un peu de temps pour cela, bien entendu !
Concernant Sonar 1.9, dont la sortie est prévue courant mai, la principale nouveauté sera l’intégration de Sonar Squid, le remplaçant de JavaNCSS.
Et de 300 !
La 300e version d’Hudson est sortie ! Comme à chaque release, peu de nouveautés, mais toujours ces petits plus qui rendent cet outil si performant et indispensable !
J’ai prévu de me lancer d’ici peu dans la mise à jour de mes articles sur developpez.com traitant de ces deux outils.
J’en profite d’ailleurs pour faire un peu de publicité sur ces articles : celui sur Hudson, et celui sur Sonar.
De beaux graphiques en 30 secondes (voire moins)
2/04/09
Vous cherchez une informations sur Internet ? Google est votre ami !
Vous cherchez à créer un graphique en moins d’une minute ? Alors Google Chart API est votre ami !
Le principe en est fort simple : Google Chart API génère dynamiquement un graphique en fonction de paramètres et de données qui lui sont transmis via une certaine URL.
Prenons un exemple simple, en considérant l’URL suivante :
http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250×100&chl=Hello|World
Dans les attributs de l’URL, nous retrouvons les paramètres suivants:
- cht=p3, indiquant quel type de graphique nous utilisons (ici, une « pie 3D »)
- chs=250×100 pour la dimension de l’image rendue.
- chd=t:60,40, correspondant aux données (ici 60 et 40).
- chl=Hello|World, correspondant aux labels des données.
Cette URL va ainsi produire l’image suivante :
Bien évidemment, de nombreux autres graphiques peuvent être créés :
|
|
|
|
|
|
|
Voilà de quoi s’amuser très rapidement !
Toutes les informations, les paramètres, les types, etc. sont disponibles sur la page officielle de Google Chart API.
Merci Google…
Start Slide Show with PicLens Lite
Au menu des évolutions de Sonar
27/03/09
La version 1.7 de Sonar à peine sortie du four, regardons de plus près ce qui nous attend dans les prochains mois !
Les hotspots
Les hotspots sont en quelque sorte une vue centralisant l’ensemble des points à corriger au sein de l’application offrant un RoI (« retour sur investissement ») maximal.
En d’autres termes, c’est ici qu’il faudra se rendre afin de savoir quelles corrections apporter afin d’améliorer son application significativement, et ce, en contrepartie de relativement peu d’efforts.
Sur ces maquettes d’écrans, on peut y voir les hotspots, montrant par exemple quelles sont les violations les plus fréquentes, les classes ayant le plus de violations, ou encore un rapport sur les tests unitaires et leur couverture.
Reste à voir si ces hotspots seront paramétrables ou non…
Concernant cette nouvelle fonctionnalité, pas de révolution, puisque toutes ces données existent déjà sur Sonar. Toutefois, le fait de les retrouver centralisées en un point sera sans aucun doute appréciable !
La gestion du PHP
Sonar supporte nativement le langage Java. Il est également possible, via un plugin, de faire analyser le code PL/SQL de son application.
Sonar s’oriente désormais vers l’analyse du code PHP.
Comme pour le Java, Sonar se basera sur des outils du monde PHP pour l’analyse du code. On devrait y trouver des outils tels que :
- PHPUnit : tests unitaires et couverture de code.
- PHP_CodeSniffer : détection des violations de règles de standard.
- PHP Depend : différents types de métriques sur le code (complexité cyclomatique, statistiques, etc.)
- …
(la liste de ces outils ne semble pas encore définitive)
Plus d’informations à venir quant au support du PHP…
Ré-écriture de JavaNCSS
JavaNCSS est un outil plutôt ancien (il date de 1997, ce qui correspond presque aux tous débuts de Java !), mais plutôt intéressant.
Il offre de nombreuses statistiques sur le code source Java, indiquant le nombre de lignes, de commentaires, de méthodes, de classes, etc.
Le principal souci de JavaNCSS est qu’il n’a pas suffisament suivi les évolutions du langage, et de nombreuses limitations sont ainsi apparues, dont celles-ci :
- les classes internes ne sont pas analysées,
- il est impossible de faire ignorer à l’analyseur les commentaires de début de fichier (décrivant généralement la licence utilisée par le programme),
- annotations ou génériques (« nouveautés » intégrées depuis Java 5) mal supportés,
- etc.
L’équipe de Sonar a donc décidé de corriger ces problèmes en réécrivant le moteur de parsing de l’outil JavaNCSS.
Il est à noter que ces améliorations viendront donner se greffer directement sur le projet JavaNCSS, et seront donc disponibles en dehors de Sonar !
Voir ici pour de plus amples informations à ce sujet.
Start Slide Show with PicLens Lite
Sonar 1.7 est là !
19/03/09
L’équipe suisse de Sonar continue son excellent travail sur son outil de suivi de qualité, et tient les délais pour la release désormais mensuelle.
C’est donc la version 1.7 qui est sortie hier, le 18 mars 2009.
Qu’apporte cette nouvelle version, à l’exception de quelques bugs fixes ?
- Possibilité d’ignorer certaines classes ou package du contrôle de qualité. Voilà une fonctionnalité utile quand il on dispose de nombreuses classes générées automatiquement par des librairies tierces.
- Affichage des détails des erreurs des tests unitaires (ça, ça me manquait dans la version 1.6 !)
- Visualisation des lignes dupliquées d’une classe.
- Nuage de couverture disponibles désormais pour les packages et modules (et non plus seulement pour les classes).
Détails des erreurs des tests unitaies
Visualisation de la duplication des lignes dans le code
Bref, que du bon !
Pour le téléchargement, ça se passe par ici.
Start Slide Show with PicLens Lite
Premiers pas sur Wicket – Configuration
17/02/09
Préambule
Ca fait un petit moment (quelque chose comme 6 – 8 mois) que j’entends parler de Wicket.
Aujourd’hui, je décide de franchir le pas, et de voir ce que ça vaut vraiment…
Mais alors qu’est-ce que c’est que Wicket ?
Je pourrais faire un copier coller du site web officiel de l’outil, et dire ainsi :
With proper mark-up/logic separation, a POJO data model, and a refreshing lack of XML, Apache Wicket makes developing web-apps simple and enjoyable again. Swap the boilerplate, complex debugging and brittle code for powerful, reusable components written with plain Java and HTML.
Mais non, ce serait un peu trop facile !
Wicket est donc un projet de la communauté Apache correspondant ainsi à un framework de présentation, basé uniquement sur du Java et du HTML.
On se prépare
Qui n’est pas bien équipé ne pourra pas bien travailler !
Je jette tout d’abord un oeil sur les IDEs compatibles avec Wicket.
La page du site me propose ainsi des plugins pour les plus populaires des IDEs, à savoir Eclipse, NetBeans et IntelliJ.
Optant pour ce dernier, je regarde donc du côté de WicketForge.
Pour la configuration sur Eclipse, je laisse mon ami Jawher s’occuper des explications…
Du côté Java, je reste sur mon Java 5, et un petit Maven 2.0.9.
On jette les bases
La première chose à faire, c’est de créer un nouveau projet sur IntelliJ.
Pour me faciliter la tâche, j’utilise l’archetype dédié à Wicket, qui me permet de créer la structure pour mon projet Wicket.

La commande Maven en ligne correspondante serait celle-ci :
mvn archetype:create -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.3.5 -DgroupId=romain -DartifactId=wicket-test
Comme le précise le site de Wicket, ce dernier utilise obligatoirement slf4j qui est un logger (un peu comme log4j).
Pour utiliser log4j au sein de son projet, il suffit d’ajouter la dépendance vers slf4j-log4j12.
Cette dépendance est obligatoire pour toutes les versions Wicket depuis la 1.3.0
Mon pom.xml ressemble donc à ceci :
XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 <a href="http://maven.apache.org/maven-v4_0_0.xsd">">http://maven.apache.org/maven-v4_0_0.xsd"></a> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>romain</groupId> | |
<artifactId>wicket-test</artifactId> | |
<packaging>war</packaging> | |
<version>1.0</version> | |
|
|
|
<dependencies> |
|
<!– Wicket Dependencies –> |
|
<dependency> |
|
<groupId>org.apache.wicket</groupId> |
|
<artifactId>wicket</artifactId> |
|
<version>${wicket.version}</version> |
|
</dependency> |
|
<dependency> |
|
<groupId>org.apache.wicket</groupId> |
|
<artifactId>wicket-extensions</artifactId> |
|
<version>${wicket.version}</version> |
|
</dependency> |
|
|
|
<!– Logging Dependencies – LOG4J –> |
|
<dependency> |
|
<groupId>org.slf4j</groupId> |
|
<artifactId>slf4j-log4j12</artifactId> |
|
<version>1.4.2</version> |
|
</dependency> |
|
<dependency> |
|
<groupId>log4j</groupId> |
|
<artifactId>log4j</artifactId> |
|
<version>1.2.14</version> |
|
</dependency> |
|
|
|
<!– JUnit for tests –> |
|
<dependency> |
|
<groupId>junit</groupId> |
|
<artifactId>junit</artifactId> |
|
<version>4.0</version> |
|
<scope>test</scope> |
|
</dependency> |
|
|
|
<!– Jetty, used for web test –> |
|
<dependency> |
|
<groupId>org.mortbay.jetty</groupId> |
|
<artifactId>jetty</artifactId> |
|
<version>${jetty.version}</version> |
|
<scope>provided</scope> |
|
</dependency> |
|
<dependency> |
|
<groupId>org.mortbay.jetty</groupId> |
|
<artifactId>jetty-util</artifactId> |
|
<version>${jetty.version}</version> |
|
<scope>provided</scope> |
|
</dependency> |
|
<dependency> |
|
<groupId>org.mortbay.jetty</groupId> |
|
<artifactId>jetty-management</artifactId> |
|
<version>${jetty.version}</version> |
|
<scope>provided</scope> |
|
</dependency> |
|
</dependencies> |
|
|
|
<build> |
|
<resources> |
|
<resource> |
|
<filtering>false</filtering> |
|
<directory>src/main/resources</directory> |
|
</resource> |
|
<resource> |
|
<filtering>false</filtering> |
|
<directory>src/main/java</directory> |
|
<includes> |
|
<include>**</include> |
|
</includes> |
|
<excludes> |
|
<exclude>**/*.java</exclude> |
|
</excludes> |
|
</resource> |
|
</resources> |
|
<testResources> |
|
<testResource> |
|
<filtering>false</filtering> |
|
<directory>src/test/java</directory> |
|
<includes> |
|
<include>**</include> |
|
</includes> |
|
<excludes> |
|
<exclude>**/*.java</exclude> |
|
</excludes> |
|
</testResource> |
|
</testResources> |
|
<plugins> |
|
<plugin> |
|
<groupId>org.mortbay.jetty</groupId> |
|
<artifactId>maven-jetty-plugin</artifactId> |
|
</plugin> |
|
</plugins> |
|
</build> |
|
|
|
<properties> |
|
<wicket.version>1.3.5</wicket.version> |
|
<jetty.version>6.1.4</jetty.version> |
|
</properties> |
|
</project> |
Le projet créé par l’archetype a la structure suivante :

Le web.xml est constitué essentiellement par la définition du filtre de Wicket :
XML:
<?xml version="1.0" encoding="ISO-8859-1"?> | |
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee <a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</a> | |
version="2.4"> | |
<display-name>wicket-test</display-name> | |
<!– | |
|
There are three means to configure Wickets configuration mode and they are |
|
tested in the order given. |
|
1) A system property: -Dwicket.configuration |
|
2) servlet specific <init-param> |
|
|
|
3) context specific <context-param> |
|
The value might be either "development" (reloading when templates change) |
|
or "deployment". If no configuration is found, "development" is the default. |
|
–> |
|
|
|
<filter> |
|
<filter-name>wicket.wicket-test</filter-name> |
|
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> |
|
<init-param> |
|
<param-name>applicationClassName</param-name> |
|
<param-value>romain.WicketApplication</param-value> |
|
</init-param> |
|
</filter> |
|
|
|
<filter-mapping> |
|
<filter-name>wicket.wicket-test</filter-name> |
|
<url-pattern>/*</url-pattern> |
|
</filter-mapping> |
|
|
|
</web-app> |
Au niveau du code source et des pages, il existe trois fichiers :
- WicketApplication.java : cette classe est le point d’entrée de l’application, qui étend org.apache.wicket.protocol.http.WebApplication et défini principalement la méthode getHomePage(), qui retourne la classe Java gérant la page d’accueil de mon application.
- HomePage.java est la classe Java gérant ma page d’acceuil. Elle étend org.apache.wicket.markup.html.WebPage
- HomePage.html est la page d’acceuil, en version HTML.
Si l’on jette un oeil sur le fichier HomePage.html, on voit ceci :
HTML:
<html> | |
<head> | |
<title>Wicket Quickstart Archetype Homepage</title> | |
</head> | |
<body> | |
<strong>Wicket Quickstart Archetype Homepage</strong> | |
<br/><br/> | |
<span wicket:id="message">message will be here</span> | |
</body> | |
|
</html> |
A priori, rien de particulier, à ceci près que le span contient un attribut wicket:id.
Premier test
On va maintenant démarrer le serveur.
L’archetype a eu la gentillesse de nous créer un test JUnit qui se charge en réalité de créer et démarrer un serveur Jetty.
On lance donc le serveur, et voici les logs :
…
INFO – log – Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
>>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP
INFO – log – jetty-6.1.4
INFO – log – NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
INFO – Application – [WicketApplication] init: Wicket core library initializer
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IFormSubmitListener, method=public abstract void org.apache.wicket.markup.html.form.IFormSubmitListener.onFormSubmitted()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IFormSubmitListener, method=public abstract void org.apache.wicket.markup.html.form.IFormSubmitListener.onFormSubmitted()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=ILinkListener, method=public abstract void org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=ILinkListener, method=public abstract void org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IOnChangeListener, method=public abstract void org.apache.wicket.markup.html.form.IOnChangeListener.onSelectionChanged()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IOnChangeListener, method=public abstract void org.apache.wicket.markup.html.form.IOnChangeListener.onSelectionChanged()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IRedirectListener, method=public abstract void org.apache.wicket.IRedirectListener.onRedirect()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IRedirectListener, method=public abstract void org.apache.wicket.IRedirectListener.onRedirect()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IResourceListener, method=public abstract void org.apache.wicket.IResourceListener.onResourceRequested()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IResourceListener, method=public abstract void org.apache.wicket.IResourceListener.onResourceRequested()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IActivePageBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()]
INFO – RequestListenerInterface – registered listener interface [RequestListenerInterface name=IActivePageBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()]
INFO – Application – [WicketApplication] init: Wicket extensions initializer
INFO – WebApplication – [WicketApplication] Started Wicket version 1.3.5 in development mode
********************************************************************
*** WARNING: Wicket is running in DEVELOPMENT mode. ***
*** ^^^^^^^^^^^ ***
*** Do NOT deploy to your live server(s) without changing this. ***
*** See Application#getConfigurationType() for more information. ***
********************************************************************
INFO – log – Started SocketConnector@0.0.0.0:8080
Je me connecte donc à mon serveur, à l’adresse http://localhost:8080, et je vois le résultat suivant :

Je constate qu’effectivement Wicket a utilisé le fichier HomePage.html, mais le span donc le wicket:id était précisé a vu son contenu modifié par la classe Java HomePage.java.
C’est plutôt un bon début, non ?
Voilà un premier pas dans le mode Wicket.
Rendez-vous dans un prochain billet, pour des tests un peu plus poussés !

Sortie de Sonar 1.6
11/02/09
Voici deux jours que Sonar est sorti en version 1.6.
En plus des dfférents bugs corrigés sur cette version, nous trouvons trois nouveautés plutôt intéressantes :
- gestion de seuils d’alertes. Il est ainsi possible d’être alerté dès que la couverture de tests baissent sous les 30%, si la complexité d’une classe excéde 40, etc.
- amélioration de la gestion des profils de qualité. En plus de la configuration PMD et checkstyle, chaque profil est lié désormais à un ensemble d’alertes.
- affectation des profils qualité à différents projets. Précédemment, un seul profil qualité était actif pour l’ensemble des projets. Désormais, il est possible de définir, pour chaque profil, quels sont les projets associés.
Voici deux captures d’écran montrant le principe des alertes :
Lors de mon premier test de cette nouvelle version, j’ai obtenu différentes erreurs, en particulier celle-ci :
[INFO] [sonar-core:prepare]
[ERROR] Cannot execute the command org.codehaus.sonar:sonar-core-maven-plugin:1.6:prepare
java.lang.ClassCastException: java.lang.NoClassDefFoundError
at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.invokeMethod(ReflectionLifecycleStrategy.java:115)
at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.start(ReflectionLifecycleStrategy.java:89)
at org.picocontainer.adapters.InstanceAdapter.start(InstanceAdapter.java:113)
…
Après renseignement, il s’agirait d’un souci avec certaines dépendances présentes dans le repository Maven local. Le problème est effectivement parti après un nettoyage de ce dernier…
Start Slide Show with PicLens Lite

Java Camp à Paris le 31 Janvier
27/01/09
Ce samedi 31 janvier, Sun et Valtech organise un JavaCamp à Paris, dans les très jolis locaux de Sun, tout proches des Champs Elysées (42 avenue d’Iéna dans le 16e) !
Mais cékoidonc ?
Un BarCamp est une rencontre, une non-conférence ouverte qui prend la forme
d’ateliers-événements participatifs où le contenu est fourni par les
participants qui doivent tous, à un titre ou à un autre, apporter
quelque chose au Barcamp. C’est le principe pas de spectateur, tous participants (voir la définition Wikipédia ici).
Le JavaCamp est donc la déclinaison du BarCamp pour la technologie Java. Cet
événement mettra ainsi l’accent sur les toutes dernières innovations autour
des technologie Java.
Bref, un événement à ne pas rater, d’autant qu’il est organisé enre autre par mes collègues Eric et Anthony !
Allez, n’attendez plus, et venez vous inscrire ici !
Start Slide Show with PicLens Lite
Retours sur l’Aquarium Paris de Sun (2e partie)
19/12/08
Dans ce billet, je vais parler exclusivement de la conférence donnée par Roberto Chinicci sur la plateforme JavaEE6
JavaEE6
Roberto Chinnici, ingénieur pour Sun, qui a participé à diverses spécifications pour JavaEE6, est venu nous parler de cette nouvelle plateforme. Le but principal de la nouvelle version de Java Entreprise Edition sera d’accroître sa facilité d’utilisation et d’apprentissage, de la rendre également plus flexible, et plus "agile".
Les nouveautés
En ce qui concerne les nouveautés, les composants suivants seront intégrés à la plateforme :
- EJB 3.1 (JSR 318)
- JPA 2.0 (JSR 317)
- Servlet 3.0 (JSR 315)
- JSF 2.0 (JSR 314)
- JAX-RS 1.0 (JSR 311)
- Connector architecture 1.6 (JSR 322)
- Web beans 1.0 (JSR 299)
- Beans validation 1.0 (JSR 303)
Pour les versions de maintenance :
- JAXB 2.2
- JAX-WS 2.2
- JAX-RS 1.1
- EL 1.2
- JSP 1.2
Enfin, certains composants voient leur intégration encore incertaine :
Les profils
A cela va s’ajouter le principe des "profils". Il s’agit concrètement d’un regroupement de technologies plus ou moins communes. Le premier profil disponible (et pour l’instant le seul existant) sera le "Web Profile", comprenant :
- Servlets 3.0
- JSP 2.1
- JSR 45
- EL 1.2
- JSTL 1.2
- JSF 2.0
- EJB Lite 3.1
- JTA 1.1
- JPA 2.0
- JSR 250
ainsi que peut-être :
- JAX-RS 1.1
- WebBeans 1.0
Là se pose la question de la pertinence de ces modules. Certes, l’intérêt principal est d’alléger la plateforme, en ne fournissant que les technologies utiles. Par exemple, le développement d’une application non web n’aura que faire des Servlets ou encore de JSF ! Cependant, ne risque-t-on pas de multiplier les versions différentes de la plateforme JavaEE 6 ? La question est posée, sans doute y verra-t-on plus clair une fois que JavaEE6 sera disponible…
A noter que la création de nouveaux profils devra passer par un processus "JCP" (Java Community Process). Autant dire qu’il ne devrait pas y avoir pléthore de profils disponibles (cela peut être vu comme un avantage cela dit) !
"Elagage"
Un autre aspect de cette nouvelle plateforme est le "pruning" que l’on traduira par "élagage". Il s’agit tout simplement de définir des technologies comme optionnelles. On y retrouve ainsi :
- JAX-RPC (remplacée par JAX-WS)
- EJB Entity Beans (remplacée par JPA)
- JSR 88 (une API de déploiement d’applications qui n’a jamais été adoptée)
- JAXR
Ces technologies seront marquées dans la Javadoc comme optionelles, un peu à la façon dont on identifie les méthodes ou classes dépréciées avec le @deprecated.
Extensibilité
Toujours dans le but de faciliter l’utilisation de JavaEE6, Sun désire offrir un véritable mécanisme de support et de configurations de frameworks open-source. Il s’agirait, d’après ce que j’ai compris, de disposer d’un moyen générique de configurer des frameworks externes afin qu’ils puissent se "plugger" directement sur JavaEE6. Autre point d’importance : la plateforme facilitera le support des langages de scripting comme JRuby, Grails par exemple… Hélas, peu d’informations précises n’ont été données sur cette partie-là, mais c’est à surveiller de près !
Nouvelles technologies
Servlets 3.0
Enfin une nouvelle version des Servlets ! Grâce à cette nouvelle version, la configuration de nos servlets passera par trois parties :
- des annotations, comme @WebServlet, @ServletFilter…
- toujours le web.xml, mais qui deviendra plus léger
- des fragments de web.xml, qui permet de définir des parties de web.xml dans d’autres fichiers XML (un fragment par servlet ou par librairie par exemple).
Autres nouveautés apportées par cette version :
- une API pour enregistrer dynamiquement des servlets (lors du démarrage de l’application)
- le traitement asynchrone.
Concernant ce dernier point, il suffira d’annoter sa servlet avec @WebServlets(asyncSupported=true), puis d’utiliser les méthodes forward(String path), start(Runnable action) et complete().
EJB 3.1
Quelques nouveautés aussi du côté des EJB. Tout d’abord la possibilité de créer des EJB singleton grâce à l’annotation @Singleton. Il sera désormais possible de se passer de l’interface, et de n’avoir dès lors qu’une seule classe par type de bean. Nous y voyons aussi l’introduction des timers, toujours grâce aux annotations : @Schedule(dayOfWeek="Mon", hour="3", minutes="30" ).
Une autre annotation qui apparaitra sera celle @Asynchronous. Enfin, il sera possible d’adresser directement un bean via un nom JNDI de la forme suivante :
"java:global/(app)/(module)/(bean)#(interface)"
EJB 3.1 Lite
Une version "light" des EJB va aussi voir le jour. Cette version allégée est un sous-ensemble des EJB destiné avant tout à un usage externe à une plateforme complète. Elle pourra être utilisée par exemple avec JavaSE. Celle-ci comprendra :
- les sessions beans (statefull, stateless, singletons)
- les transactions et la sécurité
- les interceptors
- ejb-jar.xml
A noter que cette version pourra être packagée directement au sein d’un WAR (et sera par conséquent présent dans le même classloader que l’application).
Dates de sortie
Dernier point concernant la plateforme JavaEE6, ses dates de sorties :
- janvier 2009 pour l’ensemble des spécifications
- février 2009 pour un "final draft"
- mai 2009 pour la release.
De mon point de vue, même si je suis assez sceptique quant à l’introduction des profils, j’attends avec impatience cette plateforme, et en particulier les technologies liées au développement web (JSF 2.0, Servlet 3.0, WebBeans). A noter que GlassFish v3 devrait être en mi-2009 le premier serveur d’applications à disposer d’une compatibilité totale avec JavaEE6. Un autre bon point pour l’adoption de ce serveur !
A suivre…
Retours sur l’Aquarium Paris de Sun (1e partie)
19/12/08
Avec un peu de retard, je reviens sur la conférence Aquarium Paris de Sun.
En voici la première partie, qui parle essentiellement des conférences du matin.
Contexte
Sun a organisé, le vendredi 12 décembre 2008, une journée entière consacrée à ses outils open-source.
Il s’agissait de l’"Aquarium Paris".
En voici le résumé :
Salle Solaris | Présentateur | Salle UltraSPARC | Présentateur |
---|---|---|---|
Bienvenue et stratégie open-source | Jean-Yves Pronier | ||
Témoignage client SFR : Developer Zone | Cyrille Manente | ||
JavaEE 6 overview | Roberto Chinnici | OpenESB et Projet Fuji | Andi Engloff |
Jersey / JAX-RS | Paul Sandoz | Grizzly Comet | Jean-François Arcand |
OpenSSO | Alain Barbier | OpenDS | Ludovic Poitou |
GlassFish v3 Prelude | Alexis Moussine-Pouchkine | Le point sur MySQL | Serge Frezefond |
JavaFX | Richard Bair | Java DB (annulé) | |
JavaFX Tooling | Martin Brehovsky | OpenMQ et JMS patterns | Linda Schneider |
Nuxeo WebEngine | Bogdan Stefanescu | XWiki et GlassFish | Thomas Mortagne |
IzPack et GlassFish | Julien Ponge | Hudson | Romain Linsolas |
Accueil et stratégie open-source de Sun
Depuis plusieurs mois maintenant, le JDK de Sun est passé en open-source, et de nombreux outils développés par Sun le sont également. Jean-Yves Pronier en a donc profité pour nous présenter le modèle business de Sun.
- le code source
- les exécutables
- le support sécurité
- les forums
- le " Developer Program "
- le support commercial
- les formations
- les mises-à-jour
- les bases de connaissances
- le conseil
- l’intégration
- les serveurs
- le stockage
Concernant ces services payants, Sun propose l’offre de "Subscription", disponible en plusieurs versions : "standard", "premium" et "premium plus".
Du côté open-source, aspect qui nous intéresse tout particulièrement (d’autant que c’est le leitmotiv de la journée), il faut avouer que Sun est un acteur majeur dans le domaine, proposant un "portefeuille" complet, proposant des solutions à tous les niveaux :
- les applications, avec Open Office par exemple
- le stockage de données (MySQL)
- la gestion des données, avec des IDE (NetBeans), des serveurs d’applications (GlassFish), ou tout simplement Java !
- la virtualisation (Sun xVM)
- les systèmes d’exploitation (Solaris ou OpenSolaris)
- les systèmes
- l’architecture (OpenSparc, UltraSparc)
parlant plus particulièrement de leur évolution durant cette année.
Un autre produit important de Sun, GlassFish, a été aussi évoqué. Ce serveur a été téléchargé 4 millions de fois (!) et a ainsi vu son taux d’utilisation multiplié par 10 en l’espace de 12 mois. Aspect non négligeable, GlassFish est désormais utilisé en production, ce qui montre la fiabilité de l’outil, mais également la confiance qu’il procure.
MySQL n’est pas en reste non plus, puisqu’il s’est téléchargé environ 67.000 par jour. Sun insiste à ce propos sur le rapport fonctionnalités-prix de leur base de données, en montrant que le "TCO" (Total Cost of Ownership, soit le coût total d’acquisition) sur 3 ans était très largement inférieur par rapport aux autres produits du marché (Oracle étant largement devant

Enfin, un dernier point concernait leur environnement Solaris, qui a disposé de 4,7 millions de nouvelles licences en 200.
En conclusion, une introduction asse complète, certes avec pas mal d’aspects commerciaux – mais c’est normal, mais montrant l’ensemble des produits phares de Sun.
- la boite à outils (SDK)
- le portail communautaire, avec une zone publique et une zone privée
- la plateforme RED
Il s’agit là d’une offre que l’on qualifiera de "B2B2C", c’est-à-dire que SFR propose à des partenaires ("B2B" une plateforme qui permettra à ces derniers d’offrir des nouveaux services à leurs clients ("B2C"
.
La plateforme RED, qui représente l’un des composants de cette Developer Zone, définit un socle technique pour des développements Java. Cette plateforme est divisée en plusieurs couches, et se base sur des technologies open-source de Sun telles que SunMQ, MySQL, MX4J, JAX-WS ou encore GlassFish.
Le choix de ces outils, en particulier du remplacement de Tomcat par GlassFish, a amélioré grandement la "scalabilité" (horizontale ou verticale) de l’application, qui supporte ainsi bien plus de charge (le système permet par exemple d’envoyer 400 SMS par secondes, via des web-services).
Si la présentation était intéressante, elle a malheureusement manqué de retours concrets sur les valeurs ajoutées des différents choix technologiques, ou encore de chiffres montrant les améliorations apportées par ces choix.
A suivre…
Start Slide Show with PicLens Lite