JAX-WS 2.1, la pile Web Service qui déchire (ceci est un blog pas un communiqué de presse)

JAX-WS
2.1 est désormais disponible
. Il s’agit, comme
pour GlassFish
v2 (le serveur d’application Java EE 5 Open Source), d’une version de
maturité qui simplifie l’expérience de l’utilisateur,
augmente la flexibilité du framework tout en
améliorant ses performances. Un vrai programme de campagne!

Le Web
Services ne sont pas nécessairement lents si l’on utilise la
bonne architecture (le plus difficile à faire) et la bonne
implémentation (ça change rapidement). Qu’il
s’agisse de Web Services ou d’autres technologies, les benchmarks sont
intéressants dans le cadre d’un développement en
intégration continue pour l’équipe qui
développe la technologie, mais comme il n’existe pas de
standard en la matière (SPEC ou autre), tout
résultat doit être
interprété avec précaution. Ils ne
sont pas tous pour autant suspects, simplement il n’est souvent pas
possible de comparer des résultats de benchmarks distincts.
Ceci étant dit, ces derniers jours, les piles Web Services
Java ont été à la une.

Ce fut tout d’abord la société WSO2 (l’essentiel
des développeurs d’Axis 2 chez Apache) qui a publié des
résultats
comparants Axis 2 et XFire de
Codehaus. La réponse
(fleurie) du camp XFire
ne s’est pas fait attendre (si vous
ne connaissez pas le BileBlog, attachez vous au fond, pas à
la forme :).

Avec la sortie de JAX-WS 2.1, c’est le tour de l’équipe
GlassFish JAX-WS (qui y travaillait depuis longtemps) de publier
ses chiffres JAX-WS contre Axis 2
. Ces tests ont
été effectués sur le même
matériel, la même partie cliente pour Axis 2 comme
pour JAX-WS 2.1 et les résultats affichent clairement un
avantage compris entre 30% et 100% en faveur de GlassFish JAX-WS :


Comme il en est question dans les commentaires du billet ci-dessus, les
tests ont été réalisés avec
Java 5(_10). L’utilisation de Java 6 (disponible depuis
décembre 2006) semble augmenter les performances de
GlassFish de 7%-10%. Quoi qu’il en soit, les options de tuning de la
JVM sont beaucoup moins nombreuses que dans le test de WSO2.

Dans tout benchmark Web Services, la partie binding est un
sous-ensemble important. JAXB 2 (le standard
intégré dans Java EE 5 et utilisé par
JAX-WS) a eu beaucoup de succès en peu de temps (il ne date
que de début 2006) grâce à sa
flexibilité, sa performance et son adoption par
JBoss, BEA et d’autres encore qui reprennent
l’implémentation de GlassFish à l’identique dans
leurs produits. Axis 2 ne permet pas (encore) d’utiliser JAXB 2 si bien
que les tests ont été effectués avec
XMLBeans (technologie Apache d’origine BEA) dont les performances de
sérialisation/dé-sérialisation sur des
données volumineuses et complexes est très bonne.

Si l’on compare ces résultats à ceux de WSO2,
tout d’abord, on constate l’utilisation de ADB
dont je n’avais pas entendu parlé auparavant et qui semble
avoir des limitations sur le support des schemas XML. De quoi se poser
la question : “que se passe-t-il quand mon contrat WSDL
défini indépendamment de toute structure de
données se met à utiliser des schémas
non-supportés par ADB?”. En supposant que Axis 2 soit
nettement supérieur à XFire comme le
suggère le test WSO2, il est étonnant de voir un
nombre de transactions par seconde aussi inférieur
à ceux constatés par l’équipe JAX-WS
(environ 4 fois meilleures) sur la même technologie Axis. Y
aurait-il une limitation du listener HTTP de Tomcat qui en justifie (la
machine n’était peut-être pas chargée
au maximum ce qui est pourtant plus important que de saturer le
réseau gigabit…)? Ici, les tests ont
été effectués avec Grizzly.

JAX-WS 2.1 est la version intégrée dans GlassFish
v2 dont la beta ne saurait tarder et dont la version finale est
attendue avant la JavaOne. Ceci permet d’utiliser dans un seul produit
intégré non seulement la pile JAX-WS 2.1, mais
aussi son extension naturelle WSIT
qui propose le support de nombre de spécifications WS-\*
(sécurité, fiabilité, optimisation)
comme l’indique ce
tableau
et une inter-opérabilité
validée avec la technologie Microsoft .Net 3.0 (WCF).

Enfin, ces résultats ne sont pas définitifs :
– même si des messages relativement conséquents
ont été échangés dans le
benchmark JAX-WS 2.1, les technologies MTOM/XOP
(optimisation inter-operable) et FastInfoset (encore
plus performant mais moins inter-opérable) n’ont pas
été utilisées. On peut
espérer améliorer encore les résultats
obtenus.

une fois que XFire et Axis 2 deviennent conformes
à JAX-WS (le travail est en cours), il sera
intéressant de refaire des tests qui s’appuyent tous sur le
même modèle de programmation.
–  il serait intéressant de comparer tous ces
résultats Java à des tests comparables
coté .Net.
– ceci me fait pensez au serveur Systinet? Qu’est-il devenu ?
– les seuls tests qui comptent sont les vautres.

L’intérêt de JAX-WS 2.1 n’est pas
limité à la performance et propose des
évolutions intéressantes pour le
développeur comme c’est décrit dans ce
billet
(intégration
Maven
Web
Services avec état
intégration
dans différents serveurs d’applications
ou encore
avec Spring
ne sont que quelques exemples). Pour tester JAX-WS 2.1, vous
pouvez télécharger les binaires autonomes depuis http://jax-ws.dev.java.net
ou bien télécharger GlassFish v2 M4.
Dans les deux cas, la documentation complète et à
jour se trouve ici.

Author: alexismp

Google Developer Relations in Paris.