vendredi 7 décembre 2007

Injection EJB avec JSF1.1 solution 2

Nouvelle solution plus propre (ca fera plaisir à Alexandre) et plus performante pour effectuer une injection @EJB dans un managed bean (ou back bean) JSF. L'utilisation d'un lookup local tout simplement (bien que sur Workshop ce soit pas du gâteau).

Une petite classe donc qui, avec sa simple méthode à appeller dans le contructeur de votre back bean vous permettra par réflexion d'effectuer un context lookup vers votre ejb (Champs @EJB public uniquement). Toujours en attendant l'injection @EJB dans le nouveau WorkShop.

télécharger la classe java

Pour cerain il peut se produire une erreur de lookup du style :

javax.naming.NameNotFoundException: While trying to look up comp/env/Addition/Local in /app/webapp/TEST_JSF_EBJ/12227708.; remaining name 'comp/env/Addition/Local'


Pour résoudre ce problème j'ai simplement ajouté un ServletContextListener à mon application web dans laquelle je référence mes ejb . Après le lookup local dans les back beans fonctionne a merveille...

public class testListener implements ServletContextListener {

@EJB(name = "Addition/Local")

public AdditionRemote ar;

public void contextDestroyed(ServletContextEvent arg0) { }

public void contextInitialized(ServletContextEvent arg0) { }

}




Exemple d'utilisation :


@EJB(name = "Addition/Local")

public AdditionRemote ar; // is va être injecté dans le constructeur

public testBackBean() {

fr.sihm.common.ejblocator.EJBLocator.injecterMesEJB(this);

}

public String getResultEJB() // on teste

{

if (ar == null) {

return "NOT BOUND";

} else {

return "Bouded , result = " + ar.additionner(5, 5);

}

}

2 commentaires:

Nicolas BULTEAU a dit…

Je suis d'accord avec Alexandre :)

littlewing a dit…

whhhhhaaaaa ce jour est a marquer d une pierre blanche !!!!

merci nicolas ;-)