Création d'EJB avec NetBeans

Ce document présente un exemple d'EJB qui marche sous NetBeans + JBoss. c'est un bean calculatrice qui se limite à faire une addition de float.

Code source de l'EJB


Dans un projet EJB "classique"

Interface Remote (je n'ai créé que celle-là) : AddRemote


package calc;

import javax.ejb.Remote;

/**
 *
 * @author Lionel Médini
 */
@Remote
public interface AddRemote {
    public float add(float a, float b);
}

Classe d'implémentation : AddBean


package calc;

import javax.ejb.Stateless;

/**
 *
 * @author Lionel Médini
 */
@Stateless
public class AddBean implements AddRemote {
   
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method" or "Web Service > Add Operation")

    public float add(float a, float b) {
        return a+b;
    }
}

Code source du client (simple)

Cette classe  est une classe qui fait l'addition 3+3 en appelant le bean par son interface remote. Le fichier jndi.properties est référencé en dur, pour l'exemple.

package test_ee1;

import calc.AddRemote;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 *
 * @author Lionel Médini
 */
public class Main {
        static AddRemote add;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        float a = 3, b = 3;
      //Utilisation du bean
        add = Main.lookupAddBean();

        System.out.println("3 + 3 = " + add.add(a, b));
    }
    public static AddRemote lookupAddBean() {
        Properties props = new Properties();
        try {
            //Chargement du fichier jndi.properties
            props.load(new FileInputStream("E:\\mes_dossiers\\jndi.properties"));
            //Récupération du serveur JNDI
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            Context c = new InitialContext(props);
            //Récupération de la référence sur une instance du bean
                //Remaque :
                //contrairement à ce qui est indiqué dans le code généré automatiquement,
                //il faut faire une référence vers le nom du bean/remote
            return (AddRemote) c.lookup("AddBean/remote");
        } catch (NamingException ne) {
            Logger.getLogger(ne.getClass().getName()).log(Level.SEVERE, "exception caught", ne);
            throw new RuntimeException(ne);
        }
    }
}