Ebook sur le Framework JBoss Seam [Eng]
Ebook PDF sur le Framework JBoss Seam [Eng]
Un genre de "trucs"
Seam définit un modèle de composant uniforme pour toute la logique métier de votre application. Un composant Seam peut être avec état, son état étant associé à l'un quelconque de plusieurs contextes bien définis, y compris le contexte de processus métier persistant de longue durée et le contexte de conversation, qui sont préservés dans plusieurs requêtes Web lors d'une interaction utilisateur. Il n'y a pas de distinction entre les composants du niveau présentation et les composants de la logique métier dans Seam. Vous pouvez superposer votre application en fonction de l’architecture que vous concevez, au lieu d’être obligée de cadrer votre logique d’application dans un schéma de superposition artificiel imposé par la combinaison des frameworks de tuyau de poêle que vous utilisez actuellement.
Contrairement aux composants Java EE ou J2EE standard, les composants Seam peuvent accéder simultanément à l'état associé à la requête Web et à l'état contenu dans des ressources transactionnelles (sans qu'il soit nécessaire de propager l'état de la requête Web manuellement via des paramètres de méthode). Vous pouvez objecter que la superposition d'applications imposée par l'ancienne plate-forme J2EE était une bonne chose. Eh bien, rien ne vous empêche de créer une architecture en couches équivalente à l'aide de Seam - la différence est que vous devez concevoir votre propre application et décider de la nature des couches et de la manière dont elles fonctionnent ensemble.
Intégrer JSF avec EJB 3.0
JSF et EJB 3.0 sont deux des meilleures nouvelles fonctionnalités de Java EE 5. EJB3 est un tout nouveau modèle de composant pour la logique métier et de persistance côté serveur. Pendant ce temps, JSF est un excellent modèle de composant pour le niveau de présentation. Malheureusement, aucun modèle de composant n'est capable de résoudre tous les problèmes informatiques par lui-même. En effet, JSF et EJB3 fonctionnent mieux ensemble.
Mais la spécification Java EE 5 ne fournit aucun moyen standard d'intégrer les modèles à deux composants. Heureusement, les créateurs des deux modèles ont prévu cette situation et ont fourni des points d'extension standard pour permettre l'extension et l'intégration avec d'autres frameworks. Seam unifie les modèles de composants de JSF et EJB3, en éliminant le code collé et en laissant le développeur réfléchir au problème commercial. Il est possible d'écrire des applications Seam où "tout" est un EJB.
Cela peut paraître surprenant si vous avez l'habitude de considérer les EJB comme des objets dits "à poids lourd" à grain grossier. Cependant, la version 3.0 a complètement changé la nature des EJB du point de vue du développeur. Un EJB est un objet à grain fin, rien de plus complexe qu'un JavaBean annoté. Seam vous encourage même à utiliser les beans de session en tant qu'écouteurs d'action JSF! Par contre, si vous préférez ne pas adopter EJB 3.0 pour le moment, vous n’êtes pas obligé. Pratiquement n'importe quelle classe Java peut être un composant Seam, et Seam fournit toutes les fonctionnalités que vous attendez d'un conteneur "léger", et plus, pour tout composant, EJB ou autre.
AJAX intégré
Seam prend en charge les meilleures solutions AJAX Open Source basées sur JSF: JBoss RichFaces et
ICEfaces. Ces solutions vous permettent d’ajouter des fonctionnalités AJAX à votre interface utilisateur sans avoir à écrire de code JavaScript.
Seam propose également une couche d'accès distant JavaScript intégrée qui vous permet d'appeler des composants de manière asynchrone à partir de JavaScript côté client sans recourir à une couche d'action intermédiaire.
Vous pouvez même vous abonner à des rubriques JMS côté serveur et recevoir des messages via AJAX Push.
Aucune de ces approches ne fonctionnerait bien, sans la gestion intégrée des accès concurrentiels et des états de Seam, qui garantit que de nombreuses demandes AJAX asynchrones et à grain fin concurrentes sont traitées en toute sécurité et efficacement côté serveur.
Processus d'entreprise en tant que construction de première classe
Seam propose éventuellement une gestion transparente des processus métier via jBPM. Vous ne croirez pas à quel point il est facile d'implémenter des workflows complexes, la collaboration et la gestion des tâches à l'aide de jBPM et de Seam.
Seam vous permet même de définir un flux de page de niveau présentation en utilisant le même langage (jPDL) que jBPM utilise pour la définition du processus métier.
JSF fournit un modèle d’événement incroyablement riche pour le niveau présentation. Seam améliore ce modèle en exposant les événements liés aux processus métier de jBPM via exactement le même mécanisme de gestion des événements, fournissant un modèle d'événement uniforme pour le modèle de composant uniforme de Seam.
Gestion déclarative de l'état
Nous sommes tous habitués au concept de gestion déclarative des transactions et de sécurité déclarative depuis les débuts de l'EJB. EJB 3.0 introduit même la gestion de contexte déclarative de persistance. Voici trois exemples d'un problème plus vaste de gestion des états associé à un contexte particulier, tout en garantissant que tout le nettoyage nécessaire a lieu à la fin du contexte. Seam va beaucoup plus loin dans le concept de gestion d'état déclaratif et l'applique à l'état d'application. Traditionnellement, les applications J2EE implémentent la gestion des états manuellement, en obtenant et en définissant des attributs de session et de requête de servlet. Cette approche de la gestion des états est à l'origine de nombreux bogues et fuites de mémoire lorsque les applications ne parviennent pas à nettoyer les attributs de session ou lorsque des données de session associées à différents flux de travail entrent en collision dans une application à fenêtres multiples. Seam a le potentiel d’éliminer presque entièrement cette classe de bugs.
La gestion déclarative de l'état de l'application est rendue possible par la richesse du modèle de contexte défini par Seam. Seam étend le modèle de contexte défini par la spécification de servlet - demande, session, application - avec deux nouveaux contextes - conversation et processus métier
- qui ont plus de sens du point de vue de la logique métier.
Vous serez surpris de voir combien de choses deviennent plus faciles une fois que vous commencez à utiliser des conversations. Avez-vous déjà souffert de douleurs liées à une association d'associés paresseux dans une solution ORM telle que Hibernate ou JPA? Les contextes de persistance liés à la conversation de Seam signifient que vous aurez rarement à voir un
LazyInitializationException. Avez-vous déjà eu des problèmes avec le bouton d'actualisation? Le bouton de retour? Avec la soumission de formulaire en double? Avec la propagation des messages à travers une postthen-redirect? La gestion de la conversation de Seam résout ces problèmes sans même que vous ayez réellement besoin d'y penser. Ils sont tous des symptômes de l’architecture de gestion d’État en panne qui prévaut depuis les débuts du Web.
Bijection
La notion d'inversion de contrôle ou d'injection de dépendance existe à la fois dans JSF et EJB3, ainsi que dans de nombreux "conteneurs légers". La plupart de ces conteneurs mettent l'accent sur l'injection de composants qui implémentent des services sans état. Même lorsque l’injection de composants avec état est prise en charge (comme dans JSF), elle est pratiquement inutile pour gérer l’état de l’application car la portée du composant avec état ne peut pas être définie avec une flexibilité suffisante et les composants appartenant à des domaines plus larges ne peuvent pas être injectés dans des composants. appartenant à des portées plus étroites.
Bijection diffère d'IoC en ce sens qu'elle est dynamique, contextuelle et bidirectionnelle. Vous pouvez le considérer comme un mécanisme permettant de créer un alias de variables contextuelles (noms dans les différents contextes liés au thread en cours) aux attributs du composant. Bijection permet l’auto-assemblage de composants avec état par le conteneur. Cela permet même à un composant de manipuler facilement et en toute sécurité la valeur d'une variable de contexte en l'attribuant simplement à un attribut du composant.
Gestion de l'espace de travail et navigation dans plusieurs fenêtres
Les applications Seam permettent à l'utilisateur de basculer librement entre plusieurs onglets du navigateur, chacun étant associé à une conversation différente, isolée en toute sécurité. Les applications peuvent même tirer parti de la gestion des espaces de travail, permettant à l'utilisateur de basculer entre des conversations (espaces de travail) dans un seul onglet du navigateur. Seam fournit non seulement un fonctionnement correct dans plusieurs fenêtres, mais également un fonctionnement similaire à plusieurs fenêtres dans une seule fenêtre!
Préférer les annotations au XML
Traditionnellement, la communauté Java était dans un état de confusion profonde quant au type de méta-informations considéré comme une configuration. J2EE et les conteneurs "légers" classiques ont fourni des descripteurs de déploiement basés sur XML, à la fois pour les éléments véritablement configurables entre différents déploiements du système et pour tout autre type ou déclaration qui ne peut pas être facilement exprimé en Java. Les annotations Java 5 ont changé tout cela.
EJB 3.0 utilise les annotations et la "configuration par exception" comme le moyen le plus simple de fournir des informations au conteneur sous une forme déclarative. Malheureusement, JSF est encore fortement dépendant de fichiers de configuration XML détaillés. Seam étend les annotations fournies par EJB 3.0 avec un ensemble d'annotations pour la gestion d'état déclarative et la démarcation déclarative de contexte.
Cela vous permet d’éliminer les déclarations de beans gérés bruyantes JSF et de réduire le nombre de
XML à cette information qui appartient vraiment à XML (les règles de navigation JSF).
Les tests d'intégration sont faciles
Les composants Seam, en tant que classes Java simples, sont par nature testables. Mais pour les applications complexes, les tests unitaires sont insuffisants. Les tests d'intégration ont toujours été une tâche confuse et difficile pour les applications Web Java. Par conséquent, Seam assure la testabilité des applications Seam en tant que caractéristique principale du framework. Vous pouvez facilement écrire des tests JUnit ou TestNG reproduisant toute une interaction avec un utilisateur, en utilisant tous les composants du système en dehors de la vue (page JSP ou Facelets). Vous pouvez exécuter ces tests directement dans votre IDE, où Seam déploiera automatiquement les composants EJB à l'aide de JBoss Embedded.
Les spécifications ne sont pas parfaites
Nous pensons que la dernière incarnation de Java EE est géniale. Mais nous savons que ça ne sera jamais parfait.
Là où il y a des trous dans les spécifications (par exemple, des limitations dans le cycle de vie de JSF pour
Requêtes GET), Seam les corrige. Et les auteurs de Seam travaillent avec les groupes d’experts JCP pour veiller à ce que ces correctifs fassent leur chemin dans la prochaine révision des normes.
Les applications Web ne se limitent pas aux pages HTML. Les infrastructures Web actuelles sont trop petites. Ils vous permettent d’obtenir les entrées de l’utilisateur à partir d’un formulaire et dans vos objets Java. Et puis ils te laissent pendre. Une infrastructure d’applications Web véritablement complète devrait résoudre des problèmes tels que la persistance, la concurrence, l’asynchronicité, la gestion des états, la sécurité, la messagerie électronique, la messagerie, la génération de PDF et de diagrammes, le flux de travail, le rendu wikitext, les services Web, la mise en cache, etc. Une fois que vous grattez la surface de Seam, vous serez étonné de voir combien de problèmes deviennent plus simples ...
Seam intègre JPA et Hibernate3 pour la persistance, le service de minuterie EJB et Quartz pour la légèreté, jBPM pour le flux de travail, JBoss Rules pour les règles commerciales, Meldware Mail pour la messagerie, Hibernate Search et Lucene pour la recherche en texte intégral, JMS pour la messagerie et JBoss.
Cache pour la mise en cache de fragments de page. Seam superpose un cadre de sécurité innovant basé sur des règles sur JAAS et JBoss Rules. Il existe même des bibliothèques de balises JSF pour le rendu de fichiers PDF, de courrier électronique sortant, de graphiques et de Wikitext. Les composants Seam peuvent être appelés de manière synchrone en tant que service Web, de manière asynchrone à partir de JavaScript côté client ou de Google Web Toolkit ou, bien sûr, directement à partir de JSF.
Commencez maintenant!
Seam fonctionne sur n’importe quel serveur d’applications Java EE et même dans Tomcat. Si votre environnement prend en charge EJB 3.0, tant mieux! Si ce n'est pas le cas, vous pouvez utiliser la gestion des transactions intégrée de Seam avec JPA ou Hibernate3 pour la persistance. Ou, vous pouvez déployer JBoss Embedded dans Tomcat et obtenir une prise en charge complète d'EJB 3.0.
Il s’avère que la combinaison de Seam, JSF et EJB3 est le moyen le plus simple d’écrire une application Web complexe en Java. Vous n'en croirez pas le peu de code nécessaire!
