Présentation de frameworks JEE:
JAXB et Struts 2




>> Téléchargement du .war de l'étude de cas
>> Téléchargement de la présentation des 2 frameworks au format Powerpoint
>> Téléchargement de la présentation des 2 frameworks au format pdf


JAXB

Java Architecture for XML Binding

1- Présentation

JAXB est un API Java de Sun permettant la gestion de données XML. Ce framework permet plus particulièrement l'utilisation du "Data Binding" (association de données).

Le Data Binding est une technologie permettant d'automatiser la transformation d'un modèle de données en un modèle de données objets dans un langage de programmation. Autrement dit, il permet par exemple de convertir les fichiers XML en instances de classes Java.
Pour réaliser cela, il y a trois étapes : la génération de classes, le rassemblement des données et la redistribution des données.


2- Principe et Fonctionnement

Le schéma suivant résume le principe de cet API : un document XML qui suit les règles de grammaire du "schéma", ce dernier une fois compilé permet de créer une classe correspondante. Cette classe permettra de créer une instance d'objet correspondant.

JAXB Architectural Overview


JAXB permet ainsi de créer des classes Java à partir de schémas XSD et inversement

L'utilisation de JAXB implique trois étapes :


JAXB Architectural Overview



La génération de classes Java

La première étape pour le « data binding » est de générer les classes qui permettront d'accéder aux données contenues dans les fichiers XML (Utilisation du compilateur XJC ou du Plugin Eclipse XJC).

>> Installation du Plugin XJC pour Eclipse



Le rassemblement des données

Le rassemblement des données (unmarshall en anglais) permet donc d'instancier les classes précédemment créées avec les données contenues dans les fichiers XML. En d'autre termes, il permet par exemple de faire la traduction : XML => JAVA.

La création des objets nécessite la création d'un objet de type JAXBContext en utilisant la méthode statique newInstance(). Cette méthode prend en paramètre le nom du répertoire (ou package) contenant les classes annotées (ici "schema.repertoire") générées avec le compilateur XJC

JAXBContext jc = JAXBContext.newInstance("schema.repertoire");
Il faut ensuite instancier un objet de type Unmarshaller qui va permettre de transformer un document XML en un ensemble d'objets. Un telle instance est obtenue en utilisant la méthode createUnmarshaller() de la classe JAXBContext. Ce dernier va vérifier que les données qu'il reçoit sont bien celles attendues. Si ce n'est pas le cas, des exceptions peuvent survenir.

Unmarshaller unmarshaller = jc.createUnmarshaller();
La méthode unmarshal() de la classe Unmarshaller se charge de traiter un document XML et retourne un objet du type complexe qui encapsule la racine du document XML JAXBElement. Elle possède de nombreuses surcharges à utiliser en fonction des besoins.

JAXBElement<ListeContacts> contacts = (JAXBElement) u.unmarshal(new FileInputStream("contact.xml"));
A partir de cet objet, il est possible d'obtenir et de modifier des données encapsulées dans les différents objets créés à partir des classes générées et du contenu du document. Chacun de ces objets possèdent des getter et des setter sur leur noeud direct.

Il est possible de demander la validation du document en utilisant la méthode setValidating() de la classe Unmarshaller. Cela permet de demander la validation du document à traiter avec le schéma

unmarshaller.setValidating(true);



Le redistribution des données

la redistribution des données consiste à récupérer le contenu de chaque instance de classe et de les insérer dans les fichiers XML. Il s'agit par exemple de faire la traduction JAVA => XML.

JAXB permet de créer un document XML à partir d'un graphe d'objets : cette opération est nommée marshalling. Une operation de mashalling est l'opération inverse de l'opération d'unmarshalling.

Ce graphe d'objets peut être issu d'une opération de type unmarshalling (construction à partir d'un document XML existant) ou issu d'une création de toutes pièces de l'ensemble des objets. Dans le premier cas cela correspond à une modification du document et dans le second cas à une création de document.

La création des objets nécessite la création d'un objet de type JAXBContext en utilisant la méthode statique newInstance(). Cette méthode prend en paramètre le nom du répertoire (ou package) contenant les classes annotées générées avec le compilateur XJC

JAXBContext jc = JAXBContext.newInstance("schema.repertoire");
La méthode marshal() de la classe marshaller se charge de créer un document XML à partir d'un graphe d'objets dont l'objet racine lui est fourni en paramètre.

Marshaller marshaller = jc.createMarshaller();

L'objet Mashaller possède des propriétés qu'il est possible de valoriser en utilisant la méthode setProperty(). Les spécifications de JAXB proposent des propriétés qui doivent être obligatoirement supportées par l'implémentation. Chaque implémentation est libre de proposer des propriétés supplémentaires.

m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // Indentation du XML généré
m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); // Choisir l'encodage
Il est possible de demander la validation du graphe d'objets. La validation n'est pas intégrée à l'opération de mashalling mais elle est effectuée à la demande séparement. La validation s'effectue en utilisant la classe Validator. Une instance de cette classe est obtenue en utilisant la méthode createValidator() de la classe JAXBContext.

marshaller.setValidating(true);



3- Place de JAXB dans les frameworks JEE de gestion de persistance de données

JAXB, tout comme Hibernate, consiste à faire le lien entre la représentation objet des données et sa représentation relationnelle. L'objectif de ces frameworks est de faciliter la gestion de la persistance des données. Rendre persistant un objet, c'est sauvegarder les objets existant en mémoire vive sur un support non volatile de telle sorte qu'un objet identique à cet objet pourra être recrée lors d'une session ultérieure.

Contrairement à Hibernate, JAXB ne prend en compte que le traitement et la transformation des documents XML.

Cependant celui-ci est optimisé pour les fichiers XML et offre un gain de temps au développeur. En effet, la création de la classe représentant l'objet de la donnée Java que l'on veut rendre persistant est automatiquement générée. JAXB ne nécéssite pas non plus de fichier de configuration ni de fichiers de mapping pour son utilisation contrairement à Hibernate.


4- Principaux Avantages de JAXB


5- Webographie

Site officiel de l'API de Sun - API Sun JAXB
Article du laboratoire Sun de Supinfo - JAXB : Le Data Binding
Site de J.M. Doudoux contenant des tutoriels intéréssants sur Java et Eclipse (dont l'utilisation de l'API JAXB) - Programmation avec Java
Tutoriel des services Web Java (Sun) - Exemples d'utilisations de JAXB
Présentation du Data Binding jprojet.net - Data Binding : JAXB
Wikipedia (Article en construction au moment de la construction de cette page web) - Wikipedia JAXB
Article XML.com - The JAXB API





STRUTS2

1- Introduction de struts2

Apache Struts 2 est une élégante structure extensible pour la création d'entreprise prêts à Java des applications Web. Le cadre est conçu pour rationaliser le cycle de développement complet, de la construction, de déploiement, de maintenir des applications dans le temps.


2- Fonctionnement

Cycle de vie standard :


3- Principaux avantages de Struts 2


4- Présentation du fonctionnement MCV de Struts 2



5- De struts1 à struts2

La migration peut être envisagée en 2 étapes (afin de diminuer les risques) :


6- A retenir

Ce frameworks utilise les actions pour le traitement de formulaires HTML et les autres demandes. L'action de la classe renvoie un résultat, SUCCESS, ERROR, ou INPUT. Sur la base des mappages chargés de la struts.xml, un résultat donné peut-être une page (comme dans cet exemple), une autre action, ou une autre ressource Internet (image, PDF). Quand un serveur renvoie une page, le plus souvent, il présentera des données dynamiques fourni par l'action. Afin de simplifier l'affichage dynamique des données, le cadre prévoit un ensemble de balises qui peuvent être utilisés avec le balisage HTML pour créer un serveur de page.


7- Webographie

Site officiel de l'API Struts 2 - Apache Struts 2
Tutoriel RoseIndia - Struts 2 Tutorials
Comparaison des versions 1 et 2 de Struts - Struts 1, Struts 2, lequel choisir ?
Tutoriels Struts2 - struts2.net, java-samples.com
Forum developpez.net - Framework Struts 2