Skip to main content

Enterprise Java Beans

Les EJB pour Enterprise Java Beans sont un standard de la pateforme JavaEE pour créer des composants serveur.

Projet serveur

Création du projet

 EJB

Pour créer le projet serveur, lancez IntelliJ IDEA et créer un nouveau projet en utilisant le template Java Entreprise.

Capture-d’écran-2020-10-31-125540.png

Dans le choix des dépendances, cochez ensuite Enterprise Java Beans (EJB) ainsi que Servlet :

Capture-d’écran-2020-10-31-125749.png

Terminez ensuite la création de votre projet en renseignant et un nom et un GroupId.

Les EJBs

Il existe plusieurs types d'EJB.

CréationEntity

Les EJB Entity permettent de représenter les données manipulées par l'application. On en parlera plus en détail dans le chapitre suivant.

Message

Les EJB Message Driven servent à accomplir des EJBstâches de manière asyncrhone.

Session

MaintenantLes queEJB session permettent de proposer des services avec ou sans état. Il pour être injectés par le serveurconteneur estEJB configuré nous pouvons créer notre premier EJB. Pour ce faire créezà un packageservice sessionBeans.local Dans(comme ceune packageservlee créezpar exemple), mais il peut aussi être appelé par un client distant, via le protocole RMI.

EJB Session

Interface

Pour définir un EJB session, il faut définir une interface qui définir les méthodes accessibles par le code client. Il faut y ajouter une interface pour votresignaler au conteneur EJB :qu'il s'agit d'une interface d'EJB ; @Remote pour un accès par un client distant, et @Local pour un accès par un composant local.

@Remote
public interface GestionContactRemote {
    public String coucouContact(String nomContact);
}
@Local
public interface GestionContactLocal {
    public String coucouContact(String nomContact);
}

Implémentation

CréezOn peut ensuite votrecréer une classe EJB qui implémente cette interfaceinterface. :On doit utiliser une annotation pour signaler au conteneur qu'il s'agit d'une classe d'implémentation EJB. On utilise @Stateless pour un composant qui sera instancié à chaque demande. Le paramètre d'annotation mappedName permet de préciser un nom dans l'annuaire JNDI qui va référencer tous les EJB.

@Stateless(mappedName="ContactBean")
public class GestionContactBean implements GestionContactRemote {
    public String coucouContact(String nomContact) {
        return "Coucou, "+nomContact;
    }
}

UnePour foisavoir cecitoujours fait,la lancezmême votreinstance projetdu composant fournie par le conteneur pour une session de client donnée, on peut utiliser à l'aidela deplace @Stateful.

@Stateful(mappedName="ContactBean")
public class GestionContactBean implements GestionContactRemote {
    public String coucouContact(String nomContact) {
        return "Coucou, "+nomContact;
    }
}

Client RMI

On peut accèder aux EJB remote via la Runprotocole ConfigRMI crééedepuis plusun tôt.client Regardezdistant Java. Après avoir lancé le serveur Wildfly qui possède des EJB Remote, on peut regarder ensuite les logs du serveur Wildfly dans l'interface d'IntelliJ IDEA, vous devriezet y voir une ligne affirmant que votre l'EJB a bien été detecté et ajouté à l'annuaire JNDI. Copiez l'URL qui commence par EJB et gardez là dans un bloc note, elle sera utile plus tard.

Capture-d’écran-2020-10-31-135413.png

Projet Client EJB

Configuration du projet

 Client RMI

Pour le client EJB, créez un nouveau projet IntelliJ, cette fois en utilisant le template Maven et en utilisant l'archétype Quickstart. Une fois votre projet généré, rajoutez la dépendance suivante dans votre fichier pom.xml :

<dependency>
  <groupId>org.wildfly</groupId>
  <artifactId>wildfly-ejb-client-bom</artifactId>
  <version>21.0.0.Final</version>
  <type>pom</type>
</dependency>

Mettez à jours vos dépendances Maven, puis ajoutez une Run Config d'application Java normale.

Récupérer les EJB

Dans un premier temps, il faut créer un package sessionBean directement dans le dossier de sources java. Dans ce package, copiez votre interface GestionContactRemote et retirez lui l'annotation @Remote.

Dans la méthode Main ajoutez d'abord le code suivant, afin de configurer la connexion EJB :

final Hashtable<String, String> jndiProperties = new Hashtable<>();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
if(Boolean.getBoolean("http")) {
  jndiProperties.put(Context.PROVIDER_URL,"http://localhost:8080/wildfly-services");
} else {
  jndiProperties.put(Context.PROVIDER_URL,"remote+http://localhost:8080");
}
final Context context = new InitialContext(jndiProperties);

Ensuite pour récupérer votre EJB, ajouter ce code, en modifiant la string passée à la méthode lookup() par l'URL ejb que nous avons noté tout à l'heure :

final GestionContactRemote ejb = (GestionContactRemote) context.lookup("ejb:/efrei-m1-jakartaee-tp4-ejb-1.0-SNAPSHOT/GestionContactBean!sessionBeans.GestionContactRemote");

Vous pouvez enfin tester votre EJB :

System.out.println(ejb.coucouContact("test"));

Si tout s'est bien passé, vous devriez observer les logs du client EJB dans votre console ainsi que votre afichage :

Capture-d’écran-2020-10-31-140516.png