First EJBs

Il faut commencer par créer un projet Enterprise Application. C’est une des options du menu nouveau. Choisissez la version 6.0 de Java. Vous serez alors dans la perspective J2EE. Les serveurs sont disponibles dans l’onglet Runtime. Vous pouvez démarrer le serveur d’application de Sun (c’est glassfish). La console d’administration est accessible à partir d’un menu contextuel en cliquant sur le nom du serveur. Pour se connecter login:admin et mot de passe:adminadmin

Configuration de l'environnement de travail

Pour fonctionner correctement, le serveur a besoin d'être autorisé à écrire dans son répertoire. Malheureusement, l'installation actuelle ne donne pas ces autorisations et vous ne pouvez pas les changer. Nous allons donc créer et configure notre propre domaine Glassfish.

  • Quitter NetBeans
  • Créer un répertoire c:\MonGlassFish
  • Modifier les autorisations sur le répertoire c:\MonGlassFish (supprimer l'attribut lecture seul)
  • Relancer NetBeans
  • Choisisser l'onglet Service
  • Choisisser Servers, puis Add Server... (clique droit)
  • Saisisser GlassFish v3.x (mon domaine), puis Next et encore Next
  • Saisisser C:\MonGlassFish\mondomain, puis Next
  • Conservez la configuration par défaut en glassfish 3.x

Voila vous avez configuré votre propre domaine (où Glassfish aura les autorisations nécessaires pour fonctionner correctement)

Remarque : Il faut noter que vous avez crée un répertoire local (c:\MonGlassFish) qui ne sera peut être pas accessible pour les prochaines séances de TP...

Exo 1 : calculatrice

On veut développer un service de calculatrice qui permet d’additionner, de soustraire et de multiplier deux entiers.

The EJB Creation directed by Stephane Martin Scorcese

Création du session bean

  1. Créez un projet Enterprise Application
  2. Autorisez l'injection de dépendance
  3. Créez un projet Java normal qui vous servira pour créer le client
  4. Créez aussi un projet de type Enterprise Application Client que vous ajouterez à l'Enterprise Application
  5. Dans le module EJB de votre projet, créez un nouveau composant EJB stateless avec une interface Remote que vous pourrez créer dans votre client.
  6. Le but du bean est de faire des opérations simples — add(v1,v2)-> res, sub — écrivez les méthodes métiers. Utilisez pour cela le menu qui permet d’ajouter une Business Method. Cela ajoute automatiquement la méthode dans l’interface Remote (à contrôler)
  7. Deploy the project (cela permet d´exploiter le composant)
  8. Allez avec un navigateur à l’adresse http://localhost:4848 et cherchez les informations de déploiement de votre EJB (dans les Enterprise Applications)

Création du client

On va écrire un client simple pour la calculatrice

  1. Utilisez le projet Java normal
  2. ajoutez la librairies gf-client.jar dans les librairies du projet. Ces libraires se trouvent dans le sous-répertoire lib du répertoire où est installé le serveur d'application Glassfish la librairie gf-client.jar doit se trouver avant la librairie javaee
  3. Ecrivez quelques tests pour votre EJB. Utilisez les paramètres de configuration ci-dessous pour initialiser le contexte du serveur de nommage
System.setProperty( "java.naming.factory.initial",
                    "com.sun.enterprise.naming.SerialInitContextFactory" ) ;
System.setProperty( "java.naming.factory.url.pkgs","com.sun.enterprise.naming" ) ;
System.setProperty( "java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl" ) ;
System.setProperty( "java.naming.provider.url","localhost" ) ;
  1. Avec l'autre projet d'enterprise client faites la même chose mais utilisez l'injection de dépendance pour récupérer la référence sur votre EJB (vous verrez c'est facile).

Exo 2 : Le dictionnaire

Si vous avez réussi à faire les premiers exercices, celui-ci devrait vous paraître bien plus simple... Pour les EJB, comme pour le client, vous travaillerez toujours dans les mêmes projets.

Créez un stateful session bean qui permet de créer un dictionnaire qui associe des noms à des définitions. Il fournit des méthodes permettant d’ajouter une définition, de connaître le nombre de définitions et une définition à partir d’un nom. Faites pour cela un nouveau module EJB.

  1. Comment représentez vous l’état de l’EJB qui implémente le dictionnaire ?
  2. Que se passe-t-il si vous créez un autre dictionnaire ?
  3. Implantez les méthodes qui doivent s’exécuter au moment de la passivation et de l’activation des SFSBs (State Full Session Bean)
  4. Complétez votre client pour qu’il charge le serveur jusqu’à ce que les beans s’activent et se passivent (une autre approche consiste à modifier la variable Max Cache Size du serveur d'application)
  5. Transformez votre SFSB en SLSB. Déployez et testez cette nouvelle implantation. Quelle est la différence ?