Posts tagged J2EE

GWT 2.0 : les nouvelles fonctionnalités

La version 2.0 de GWT (Google Web Toolkit) est sortie (j’ai un peu de retard à cause du boulot :) ) et avec elle de nombreuses améliorations, principalement pour améliorer le développement des applications. Cette nouvelle version est accompagnée d’un outil d’analyse des performances des sites : Speed Tracer, qui donne des pistes d’amélioration de l’application.

Development Mode

Dans les versions précédentes de GWT, pour tester une application en cours de développement, il y avait le Hosted Mode. C’est une application que l’on lançait depuis son IDE, qui démarrait un serveur Tomcat et qui permettait de tester “rapidement” sont application Web.

En GWT 2.0 le Hosted Mode est remplacé par le In-Browser Development Mode. On installe un plugin (le GWT Developer Plugin) dans son navigateur pour lui permettre de communiquer avec la JVM. Cela permet de bénéficier des différents plugins de son navigateur (Firebug, …) tout en permettant de modifier le code Java en live en rafraichissant la page Web.

UI Binder

Un des problèmes majeurs de GWT dans ses versions précédentes est la gestion de l’interface graphique depuis le code Java. La manipulation des Widgets (composants graphiques dans GWT) depuis le code Java pour leurs appliquer des styles CSS ou gérer des événements finit par donner du code difficile à maintenir.

GWT 2.0 apporte une solution plutôt élégante avec l’UI Binder, ça permet de lier un template XML à une classe Java. Au passage, les fichiers CSS et JavaScripts (librairies externes) référençaient depuis le template sont compressées par le compilateur GWT afin d’en réduire la taille finale.

Ainsi, on sépare l’interface graphique (dans les template .ui.xml) et la logique de l’application dans le code Java.

Code Splitting

Voilà une fonctionnalité attendue par beaucoup de développeurs GWT. Lorsque l’on développe une application GWT, on se rend vite compte que le fichier JavaScript généré prend vite du poids. Cette fonctionnalité découpe l’application en plusieurs fichiers JavaScript qui seront chargés uniquement lorsque c’est nécessaire en rajoutant quelques lignes de codes.

Layout par contraintes

Beaucoup d’applications Web qui se basent sur JavaScript utilisent des widgets qui sont positionnées dans la page grâce à des calculs qui peuvent ralentir l’affichage de l’application.

À l’inverse, GWT 2.0 génère le rendu final en utilisant le CSS de la page, celui-ci est généré à la compilation et non plus pendant l’affichage de la page ce qui réduit considérablement le temps de chargement. 

ClientBundle

Je présentais dans mon billet : Guide d’optimisation de vos applications Web une méthode pour réduire le temps de chargement d’une page en utilisant des images sprites.

GWT est capable depuis la version 1.4 de faire tout cela automatiquement grâce aux ImageBundle. Toutes les images référencées sur disque étaient réunies en une seule est GWT utilisé la technique des sprites pour afficher les images convenablement. Avec GWT 1.5/1.6, un projet de l’incubateur permettait de faire la même chose avec à peu près n’importe quels fichiers.

GWT 2.0 introduit cette notion avec les ClientBundle. Par exemple, vous pouvez références tous vos fichiers CSS, GWT va alors les regrouper en un seul fichier, le minimiser et le rendre disponible pour être mis en cache. GWT gère aussi l’internationalisation ainsi vous pouvez gérer vos ClientBundle pour chaque locale.

Speed Tracer

Cette nouvelle version sort avec une extension pour Google Chrome : Speed Tracer. Cette extension analyse l’exécution de l’application Web en cours. Plutôt que de longues explications, voilà la vidéo de présentation de Speed Tracer.

Présentation de Speed Tracer

Story of Your Compile

SOYC fournit de nombreux détails sur la compilation de chaque partie de l’application GWT : la taille, les dépendances, temps de compilation… Cela permet d’orienter ses efforts pour diviser le code grâce Code Splitting

Traces dans IE 6

Internet Explorer ne fournit pas les traces lorsqu’une exception JavaScript est levée, ce qui peut être très embêtant lors d’une phase de debug sur ce navigateur…

Avec GWT 2.0 vous obtenez maintenant la trace obfusquée (ou non en fonction de la compilation choisie) JavaScript qui peut être convertie en trace Java avec nom de classe et numéro de ligne.

Conclusion

Ce billet ne présente que les améliorations les plus importantes, mais il y à de très nombreuses évolutions : optimisation du compilateur, évaluation directe des réponses RPC (réduction du temps de déserialisation), propriété de deffered binding conditionnelles, …

GWT devient de plus en plus un framework “productif” : la plupart des problèmes qu’un développeur rencontre lors du développement d’une application Web qui utilise JavaScript, sont résolus très simplement.

Pensez-vous que cette version 2.0 de GWT va permettre au framework de gagner des parts de marché face à ses concurrents comme Flex?

Ruby on Rails : déployer une application sur Tomcat avec JRuby

rails Ruby on Rails est un framework qui permet de développer très rapidement des applications Web en suivant le modèle MVC.

Le problème de ce framework est qu’il se base sur le langage Ruby et qu’il embarque un serveur Web. Les applications ainsi créées ne peuvent pas être déployées comme des applications Web dans Tomcat ou autres serveurs d’applications.

Le but de ce tutoriel est de vous permettre de déployer les applications Ruby on Rails (RoR) sur un serveur Tomcat en utilisant la librairie JRuby.

Installation Tomcat

On commence par télécharger la dernière version de Tomcat (en ce moment c’est la version 6.0.20) :

1
2
wget http://mirror.mkhelif.fr/apache/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz
tar –xzf apache-tomcat-6.0.20.tar.gz

Voilà Tomcat est installé, je passerai ici la configuration du serveur. Si vous souhaitez, suivez mon tutoriel pour connecter Apache avec Tomcat.

Installation JRuby

Télécharger JRuby et placez le là où vous souhaitez :

1
2
3
wget http://dist.codehaus.org/jruby/1.3.1/jruby-bin-1.3.1.tar.gz
tar –xzf jruby-bin-1.3.1.tar.gz
mv jruby-1.3.1 /usr/local/jruby

Ajouter ensuite le chemin vers JRuby dans votre environnement en éditant votre fichier ~/.profile :

1
export PATH=$PATH:/usr/local/jruby/bin

Vous pouvez vérifier l’installation de JRuby en exécutant la commande suivante :

1
2
$ jruby -v
jruby 1.3.1 (ruby 1.8.6p287) (2009-06-15 2fd6c3d) (Java HotSpot(TM) Client VM 1.5.0_16) [i386-java]

Installation de Ruby on Rails

À partir de là nous allons installer les gems pour : rails (le coeur de ROR), mysql et surtout warbler (qui crée un WAR à partir de l’application rails).

1
2
3
$ jruby -S gem install rails
$ jruby -S gem install activerecord-jdbcmysql-adapter
$ jruby -S gem install warbler

Déploiement de votre application

Pour déployer votre application dans Tomcat, il faut commencer par la convertir en WAR. Placez vous dans le dossier de votre application et lancez la commande suivante :

1
$ warble config

Cela va créer un fichier <application>/config/warble.rb pour configurer votre application pour la convertir en fichier WAR, ouvrez le fichier et dé-commentez la ligne :

1
config.gems += ["activerecord-jdbcmysql-adapter"]

Cela pour inclure dans votre fichiers WAR la gem MySQL (ajoutez les gems que votre application utilise ici).

Maintenant nous allons créer le fichier WAR de votre application, lancez simplement la commande :

1
$ warble

Et voilà votre fichier WAR est créé, vous pouvez alors le déployer sur Tomcat (je passerai sur cette étape).

Tests en charge d’EC2, GAE et Azure

Lorsque vous démarrez un projet d’application Web qui sera déployée dans le cloud, on peut logiquement vouloir comparer les différents prestataires sur le marché. C’est ce qu’on fait des chercheurs Australiens en effectuant des tests en charge sur les plateformes EC2 d’Amazon, Google App Engine et Azure de Microsoft.

Le test consisté à une charge de 2000 utilisateurs simultanés, selon Anna Liu, les trois plateformes ont su se redimensionner avec la charge afin de répondre à la demande : “With a simulation of 2000 concurrent users, we watched the cloud services scale up and respond dynamically to that demand”.

Cependant les trois plateformes ont des temps de réponses variables, pouvant aller jusqu’à un facteur vingt, en fonction des fonctionnalités qui sont déployées par les prestataires ainsi que de l’heure à laquelle les utilisateurs accèdent aux services déployés.

Selon Liu, les trois plateformes ont des objectifs divergents : GAE est fait pour des applications Web simples et qui ne nécessitent aucun traitement long (une exception est lancée lorsque le temps de traitements de la requête dépasse trente secondes); EC2 propose les bases du cloud computing et la valeur ajoutée est fourni par des solutions tierces; Azure se limite uniquement aux applications .Net ce qui limite grandement les développeurs qui préfèrent se tourner vers d’autres solutions.

Toujours selon Liu, les plateformes manquent d’outils de monitoring inclus avec leur offre.

Source : http://www.itnews.com.au/News/153451,stress-tests-rain-on-amazons-cloud.aspx

Google : GWT version 1.6 et consorts

Ça y est, la version 1.6 officielle de GWT est enfin disponible après deux releases candidates (RC). Les nouveautés annoncées sont bien présentes. Parmi les nouveautés les plus importantes :

  • Une refonte de l’architecture d’une application GWT pour qu’elle corresponde à celle d’un WAR. Cette nouvelle architecture est plus intuitive pour développer une application complète (testée avec le plugin Eclipse Cypal Studio).
  • Une parallélisation du compilateur permet sur une machine multi-coeurs de diminuer sensiblement la durée de compilation. Maintenant, la compilation peut aussi être distribuée entre plusieurs machines.
  • Une nouvelle approche de la gestion de événements par Handler. Pour avoir testé cette nouvelle implémentation, on se rapproche beaucoup plus de la gestion des événements Swing.

En marge de GWT, Google App Engine, la plateforme de déploiement des applications Web de Google, accepte désormais les applications Java dans un environnement Java 6. Cet environnement comprend les API suivantes : Java Data Objects (JDO), Java Persistence API (JPA) et JavaMail API.

Par ailleurs, Google a aussi développé un plugin Eclipse pour les développeurs GWT et Google App Engine. Ce plugin contient :

Divers autres fonctionnalités sont disponibles avec ce plugin, mais je ne les ai pas encore testé.

Source : Introducing GWT 1.6 and friends.

GWT 1.6 : Tomcat ou Jetty ?

Après la sortie de la version 1.5 de GWT, la roadmap de GWT 1.6 est en cours de préparation. Bruce Johnson, développeur en chef du projet GWT, demande à la communauté de développeurs de donner son avis sur le choix du prochain serveur du hosted mode : Tomcat (serveur actuel) ou Jetty.

Ayant plus travaillé avec Tomcat que Jetty je suis favorable au maintien du serveur actuel. Je reconnais cependant que Jetty est beaucoup plus rapide que Tomcat.

Si vous souhaitez participer au débat en donnant votre avis : http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/604aec6b7460c133?hl=en&pli=1

Et vous qu’en pensez vous?

Oracle : faille critique dans WebLogic [corrigé]

Une faille critique vient d’être découverte dans le module mod_server, permettant la connexion de Apache à WebLogic (racheté à BEA par Oracle). Elle permettrait d’avoir accès à distance aux données du serveur sans aucune authentification.

Cette faille est notée comme très élevée (1.0 sur l’échelle CVSS Common Vulnerability Scoring System) et un correctif est déjà en préparation par Oracle.

Les versions de Oracle WebLogic Server affectées par cette faille sont : 6.1, 7.0, 8.1, 9.0, 9.1, 9.2, 10.0.

Voir le bulletin d’alerte de Oracle.

Mise à jour 08/08/2008 : Oracle a fourni un correctif à cette faille.

Passerelle entre Apache et Tomcat

Dans le but de déployer mes applications J2ee j’ai installé GlassFish (avec Tomcat). Je souhaitais pouvoir utiliser ce serveur sur le port 80 tout en ayant Apache qui écoute sur ce port.

Lire la suite de l’article »

JavaOne 2008

Cette année, la session de JavaOne aura lieu du 6 au 9 mai, au programme il y en a pour tous les gouts : Java SE/EE/ME, JavaFX, Web 2.0, SOA et Enterprise integration, etc…

Lire la suite de l’article »

ROME – Intégration avec une Servlet (7/8)

Dans cet exemple nous créons une servlet qui renvoie un flux en réponse. Le type de flux voulu peut être passé en paramètre d’URL de la requête. Dans cet exemple les entrées du flux sont écrites en dur, mais il serait tout aussi simple de les générer dynamiquement (depuis une base de données par exemple).

Lire la suite de l’article »