IUT Vélizy COMPOSANTS LOURDS JAVA EE Enterprise Java Bean (EJB) UVSQ JJLC Introduction. Les composants lourds Enterprise Java Bean (EJB) sont avant tout des composants logiciels distribués. Après les générations d'architectures distribuées pour les langages procéduraux avec les technologies DCE puis pour les langages orientés objet avec la technologie CORBA, la société SUN MICROSYSTEMS a décidé à la fin des années 1990 de fournir une solution plus simple à utiliser. En effet les technologies précédentes n'ont pas rencontrées le succès attendu du fait de leur complexité. L'approche EJB, quant à elle, a été perçue au moment de sa création comme une solution de type RAD (Rapid Application Development). Aujourd'hui elle est plutôt vue comme une solution de type cadriciel (framework). La technologie a évolué depuis ses débuts et elle fait maintenant partie de la plateforme JAVA EE version 7. La version actuelle des composants est EJB 3.2 (jsr 345). Les composants EJB ne peuvent s'exécuter qu'au sein de serveurs d'applications avec un profil JAVA EE complet. Quelques éditeurs de logiciel proposent une solution de ce type. La compagnie IBM avec sa solution WEBSPHERE, la société ORACLE avec les serveurs GLASSFISH et WEBLOGIC, REDHAT avec sa solution JBOSS, la fondation APACHE avec le serveur GERONIMO, la société TMAXSOFT avec son serveur TMAX JEUS 8, la société FUJITSU avec sa solution INTERSTAGE APPLICATION SERVER et le consortium OW2 avec le serveur JONAS. Étape 1 : téléchargement et installation du serveur JBoss Le serveur JBoss nécessaire à l'apprentissage est le produit JBoss AS 7.1.1.Final. La machine virtuelle JAVA est celle du kit de développement JDK1.7.0_51. Après le téléchargement, il faut défaire l'archive du produit : Ensuite pour faciliter le paramétrage du serveur JBoss et le déploiement des composants EJB, il est nécessaire de créer un utilisateur avec les droits d'administration. 1/4 JJLC IUT-Vélizy Ensuite il est est nécessaire de réaliser un script BASH de démarrage du serveur avec les variables d'environnement habituelles à JAVA : Il est nécessaire de démarrer le serveur et de tester son fonctionnement. Pour lancer le serveur, il suffit d'exécuter le script BASH de lancement (après l'avoir rendu exécutable) puis d'attendre que le processus de démarrage de JBoss soit accompli avec l'affichage du message suivant dans la console texte : 10:20:15,990 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss AS 7.1.1.Final "Brontes" started in 8513ms - Started 172 of 249 services (76 services are passive or on-demand) Puis il faut ouvrir un navigateur web et saisir l'URL localhost:8080. Sur la page d'accueil il y a un lien vers la console d'administration. Après avoir saisi l'identifiant et le mot de passe créés avec l'utilitaire add-user.sh (voir plus haut). Si le serveur doit répondre à des clients sur le réseau local alors il faut aménager le script de démarrage avec l'option suivante sur la commande standalone.sh : /home/etude/Téléchargements/jboss-as-7.1.1.Final/bin/standalone.sh -b=adresseIP du serveur & 2/4 JJLC IUT-Vélizy Dans ce type de fonctionnement de JBoss en réseau, il est plus pratique en phase de développement de désactiver l'authentification automatique des clients. Pour cela il faut modifier le fichier de configuration du mode standalone(jboss-as-7.1.1.Final/standalone/configuration/standalone.xml ). Il faut supprimer l'attribut xml security-realm : <subsystem xmlns="urn:jboss:domain:remoting:1.1"> <connector name="remoting-connector" socket-binding="remoting" security-realm="ApplicationRealm"/> </subsystem> Étape 2 : création d'un projet avec Eclipse pour JAVA Developers Il faut crée un simple projet JAVA. Il faut ajouter au CLASSPATH du projet la librairie jboss-ejb-api_3.1_spec1.0.1.Final.jar qui est dans le répertoire : modules//home/etude/Téléchargements/jboss-as-7.1.1.Final/modules/javax/ejb/api/main pour pouvoir coder des composants EJB. Pour implémenter un client il est nécessaire d'ajouter au CLASSPATH du projet la librairie : /home/etude/Téléchargements/jboss-as-7.1.1.Final/bin/client/jboss-client.jar Étape 3 : développement d'un composant EJB Stateless Depuis la version JAVA EE 6, il n'est pas en principe obligatoire de concevoir une interface au service distribué. Mais JBoss semble l'exiger. Il est donc nécessaire de développer une interface JAVA du service distribué et de l'implémenter par une classe JAVA qui une fois annotée représente le futur composant lourd EJB. Il faut savoir qu'une fois déployé, le byte-code du composant est modifié par le serveur. C'est à dire que le composant exécuté par le serveur n'est pas le même que celui implémenté par le programmeur. Cette technique est relativement courante en JAVA. Par exemple les pages JSP dans les serveurs d'applications JAVA EE WEB sont transformées en classes SERVLET lors du déploiement. De même les objets restaurés dans la JVM à partir de la base de données relationnelle par la couche ORM JPA sont transformés pour des raisons de performance (proxy object) en mode lazy. 3/4 JJLC IUT-Vélizy Le code source de l'interface Salutation.java : Le code source du composant SalutationEJB.java avec les annotations de l'API EJB : 4/4 JJLC IUT-Vélizy