avril
2009
Java EE 6
Une nouveauté annoncée ( et pas des moindres) dans Java EE 6 : les Web Beans.
Les Web Beans
De nos jours, les EJBs 3.0 ont apporté une nouvelle notion de simplicité et d’évolution dans la programmation des modèles EJB.
Dès lors, peut-on imaginer JEE sans ses EJBs ?
Malgré les évolutions, les EJBs 3.0 ne résolvent pas le problème d’interopérabilité
entre la couche de présentation et la couche de persistance des données.
C’est pourquoi Sun s’est orienté sur des frameworks
qui connaissent un succès grandissant ( ça rappel … Hibernate ).
Ainsi, google guice et JBoss Seam ont été, une source d’inspiration importante
amenant Sun a créé un nouveau bean nommé : Java Web Beans.
Les Java Web Beans kesako ?
Un java Web Bean peut être une classe Java, un EJB session ou une classe bean singleton,
une méthode producer ou une queue ou un topic JMS.
Les autres attributs d’un Java Web Bean sont soit:
Déclare explicitement dans l’implémentation de la classe,
Déclare explicitement dans web-beans.xml
Ou par défaut dans le Web Bean manager.
Attention, si le Web Bean est un EJB session, il aura une vue locale.
Au final, à quoi sert un Java Web Bean?
Les Web Beans représentent l’unification de deux composants JEE : les EJB 3 et Les Managed Beans de JSF.
Le but des JWB :
Proposer un modèle de programmation à état ou contextuel compatible avec les EJBs et les managed beans.
Proposer un modèle extensible.
Pouvoir bénéficier de lookups (JNDI), de DI (Injection de Dépendances) et de résolution via EL.
Un modèle conversationnel pour le web.
Bénéficier d’interceptors (sous partie d’AOP)
proposer un modèle événementiel.
Permettre leur intégration avec JSF, JPA et les Servlets.
permettre leur intégration avec la notion de profiles du futur Java EE 6
Techniquement, qu’est-ce qu’un Java Web Bean ?
Un Java Web Bean :
C’est une classe concrète, ou annotée @Decorator
C’est une classe avec un constructeur sans argument, ou bien,
C’est une classe avec un constructeur annoté @Initializer
Mais attention, un Java Web Bean ne peut pas être :
Un type paramétré
Une classe interne non static
Une classe annotée avec les annotations @Entity ou les annotations des EJBs
Une classe qui implémente :
Javax.servlet.Servlet
Javax.servlet.Filter
Javax.servlet.ServletContextListener
Javax.servlet.HttpSessionListener
Javax.servlet.ServletRequestListener
Javax.ejb.EnterpriseBean
Une classe qui hérite de javax.faces.component.UIComponent
Un EJB déclare dans ejb-jar.xml
Une entité JPA déclare dans orm.xml
Une classe qui respecte ceci est un simple Web Bean.
Les éléments additionnels peuvent être définis dans un document XML, le web-beans.xml.
Que peut nous apporter techniquement un Java Web Bean ?
Rien ne vaut des exemples pour comprendre l’une des choses les plus innovantes.
Voici un simple Java Web Bean :
<br />
public String hello(String name){ <br />
<br />
<br />
return "Hello "+name; <br />
<br />
} <br />
}
Ici, on peut voir qu’un JWB bénéficie d’une DI (Injection de Dépendances) et
à son membre hello automatiquement injecté par le conteneur, grâce à l’annotation @Current.
<br />
@Current Hello hello; <br />
<br />
public void print(String name){ <br />
<br />
System.out.println(hello.hello("World")); <br />
<br />
} <br />
}
Un autre exemple ?
Une fois défini, un WebBean peut être nommé pour pouvoir y accéder depuis l’EL par exemple:
public class ProductList implements DataModel { ... }
Notez l’annotation @Named pour spécifier le nom.
<h:outputText value="#{products.total}"/>
Si le web beans est déclaré dans le web-bean.xml, on peut spécifier le Web Bean name ainsi :
<Named>products</Named> <br />
</myapp:ProductList>
Voici une brève présentation des web beans qui apparaîtront dans JEE 6.
Les prochains articles seront dédiés à chaque spécificité des Web Beans et les autres nouveautés de JEE 6.
2 Commentaires + Ajouter un commentaire
Articles récents
- Nouvelle du jour : ce blog reprend vie :)
- Google acquiert les brevets applicatifs de Cuil
- 12 Méthodes d’analyse des liens qui auraient pu changer au sein de Google en février 2012
- Nouveautés chez Google dans les outils pour les webmasters
- Google fait un rappel important sur le prestataire pour l’hébergement de votre site internet
Commentaires récents
- Pourquoi Oracle devrait continuer à aider Netbeans ? dans
- Soirée GlassFish & Groovy à l’INSA avec le JUG de Lyon dans
- Une annonce de James Gosling (le créateur de Java) pour les membres de Developpez.com dans
- Une annonce de James Gosling (le créateur de Java) pour les membres de Developpez.com dans
- Session : Monitoring and Troubleshooting Glassfish application server in the wild dans
Malheureusement, ça ne marche pas avec les interfaces.
Tout autant, si on veut déclarer une classe abstraite on sera obligé de la déclarer en tant que décorator ( annoté par : @Decorator ).
Dans mon prochain article, je parle des scopes des JWB ( Qui est bientôt terminé ).
C’est vachement pratique comme fonctionnalité
Est-ce que ça marche aussi en utilisant les interfaces comme avec Spring ?
Par exemple dans ton example, si Hello implémentation IHello, est ce qu’on pourrait faire :
@Current IHello hello;
Ce qui est mieux au niveau du couplage.