vendredi 13 avril 2012

Développeurs JSF, fuyez @ManagedBean

Quand on fait du JSF, on peut déclarer nos beans avec l'annotation JSF @javax.faces.bean.ManagedBean ou avec l'annotation @javax.inject.Named. Dans ce dernier cas, le cycle de vie du bean est géré par CDI qui met les instances à disposition de JSF.
On retrouve aussi les deux possibilités avec les annotations liées aux portées, qu'on peut prendre dans le package javax.enterprise.context pour CDI ou dans javax.faces.bean pour JSF.

J'ai été confronté récemment à un problème de compatibilité entre CDI et un managed bean JSF. Le bean existait dans une version pure JSF, mais pour faire évoluer l'application, j'ai intégré du CDI. Dans un premier temps, j'ai simplement injecté des dépendances avec l'annotation @Inject.

@ManagedBean
@RequestScoped
public class FirstBean {
    @Inject private Logger logger;   
    @Inject private SomeEJB someEJB;
    ...
}

samedi 7 avril 2012

Tester des beans en scope Conversation avec Arquillian

Si Arquillian est un outil fantastique pour tester des composants JavaEE 6, il n'en a pas moins quelques faiblesses ou défauts de jeunesse. Dans cette article, je veux vous présenter les difficultés que j'ai rencontrées pour tester des beans CDI, utilisés dans un contexte JSF, en portée Conversation.