370 likes | 464 Views
JEE Approfondi. Makumba & xmlbeans. Plan. I- Makumba Introduction Installation Exemple Test II- XMLBeans Introduction Installation Exemple Test. Makumba. Makumba - Introduction. Conception en 2001 par une association d’étudiants Basé sur le design pattern MVC
E N D
JEE Approfondi Makumba&xmlbeans Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Plan I- Makumba • Introduction • Installation • Exemple • Test II- XMLBeans • Introduction • Installation • Exemple • Test Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba- Introduction • Conception en 2001 par une association d’étudiants • Basé sur le design pattern MVC • Librairie de tags JSP => facilite l’interaction entre l’application et la BDD associée Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Installation • Outils nécessaires : • Makumba ! • Un conteneur de servlets JEE • Un serveur SQL • Un driver JDBC • ANTLR : Another Tool for Language Recognition Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Exemple • Arborescence du projet File > New > Dynamic Web Projet monProjet/ WEB-INF/ lib/ classes/ web.xml Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Exemple • Ajout des librairies (sous Eclipse) Clic droit sur le projet > Build Path > Configure Build Path > Onglet Librairies > Add External JARs • makumba.jar • antlr-?.?.?.jar • mysql-connector-java-?.?.?-bin.jar Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Exemple • Configuration du web.xml Le fichier est déjà fait si on utilise Tomcat : • Aller sur : http://www.makumba.org/makumba-install.html • Récupérer le web.xml dans la partie « Deployment Descriptor » Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Exemple • Fichiers de configuration BDD (1/2) monProjet/WEB-INF/classes/localhost_mysql_maBDD.properties Clic droit sur le dossier classes > New > File maBDD est le nom de la base de données • # Nom d’utilisateur pour se connecter à la BDD • sql.user=root • # Mot de passe • sql.password= • # AutoriserMakumba à modifier la BDD • alter#=true Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Exemple • Fichiers de configuration BDD (2/2) monProjet/WEB-INF/classes/MakumbaDatabase.properties Clic droit sur le dossier classes > New > File • #Base de données par défaut • default=localhost_mysql_monProjet Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Exemple • Définition des données monProjet/WEB-INF/classes/dataDefinitions/*.mdd • Créer un dossier nommé « dataDefinitions » dans le dossier « classes » • Créer un fichier nomTable.mdd par table existante • # Personne.mdd • # Fichier de description pour la table Personne • nom=not null char[32] ; • age=not null int ; Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Exemple • Application monProjet/WEB-INF/index.jsp • Clic droit sur monProjet > New > JSP > index.jsp Les balises « mak » permettent d’agir sur la BDD et d’y récupérer des données. • <%@tagliburi="http://www.makumba.org/presentation" prefix="mak" %> • <mak:listfrom="Person p"> • <mak:valueexpr="p.name"/>, • <mak:valueexpr="p.age"/> • </mak:list> Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Test • Après l’installation on lance la jsp et on obtient une erreur de lancement du serveur Tomcat : java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) Caused by: java.lang.SecurityException: La servlet de classe org.apache.catalina.servlets.InvokerServlet est privil�gi�e (privileged) et ne peut �tre charg� par cette application web at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1145) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) ... 6 more Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Test • La configuration de Tomcat ne convient pas à Makumba ! • Dans le répertoire d’installation de tomcat, trouver le fichier context.xml dans le répertoire conf • Ajouter l’attribut « privileged=¨true¨ » à la balise <context> Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Test On supprime la configuration de tomcat sous Eclipse et on relance la page jsp. On obtient cette fois : org.makumba.commons.RuntimeWrappedException: java.lang.NoClassDefFoundError: ch/ubique/inieditor/IniEditor Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Test • En fait il manque toutes les autres librairies extérieures • On peut les trouver dans la version sources de makumba et il faut les ajouter toutes sauf « jsp-api.jar » car Tomcat inclut déjà cette librairie dans la version 6 Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Test • Ca fonctionne enfin ! • Une table person_ est créée. • Si on insère des champs il seront listés par la JSP. Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Test • Structure de la table auto créée Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Test • Un autre exemple <mak:newForm> Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Makumba - Test • <mak:editForm> Chamilah Ingar - Guillaume Monteil - Cyril Tovena
xmlbeans Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - introduction • Conception en 2003 par Apache • Permet le databinding Java/XML • Travail à partir des schémas XSD Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - installation • Outils nécessaires • JDK (minimum 1.4) • ANT • Saxon XSLT et XQuery • XMLBeans Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - installation • Variables d’environnement – Windows (1/3) (après avoir téléchargé et dézippéXMLBeans) Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - installation • Variables d’environnement – Windows (2/3) (après avoir téléchargé et dézippéXMLBeans) Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - installation • Variables d’environnement – Windows (3/3) (après avoir téléchargé et dézippéXMLBeans) Pour la V2 de XMLBeans, il faut également ajouter jsr173_1.0_api.jar Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - installation • Variables d’environnement – Linux (après avoir téléchargé et dézippéXMLBeans) • export XMLBEANS_HOME = « chemin » • export PATH=$PATH:$XMLBEANS_HOME/bin • export CLASSPATH=$XMLBEANS_HOME/lib/xbean.jar:$CLASSPATH • For XMLBeans V2, export CLASSPATH=$CLASSPATH:$XMLBEANS_HOME/lib/jsr173[_1.0]_api.jar Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - installation • Ajout des librairies au projet (Eclipse) • Toutes les librairies se trouvant dans le répertoire lib du dossier xmlbeans sauf xmlpublic.jar • Pour une compatibilité XPath/XQuery, ajouter les librairies de saxon. • Les librairies obtenues après génération des classes (cfslide suivant). Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - exemple • Génération des classes : 1ère méthode • Elle se fait à partir d’un schéma XSD • Création d’une tâche ANT (build.xml) : L’archive mesSchemas.jar est à placer dans le buildpath du projet. <?xml version="1.0" encoding="UTF-8" ?> <projectname= " monProjet" default="xmlbean" basedir="."> <propertyname="xmlbeans.home" value="." /> <propertyname="schema" value="schema/monSchema.xsd" /> <propertyname="dest.jar" value="dest/mesSchemas.jar" /> <path id="xmlbeans.path"> <filesetdir="${xmlbeans.home}/lib" includes="*.jar"/> </path> <taskdefname="xmlbean" classname="org.apache.xmlbeans.impl.tool.XMLBean" classpathref="xmlbeans.path" /> <targetname="xmlbean"> <xmlbeanschema="${schema}" srcgendir="src" destfile="${dest.jar}" classpathref="xmlbeans.path" /> </target> </project> Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - exemple • Génération des classes : 2ème méthode • Elle se fait à partir d’un schéma XSD • Utilisation de la commande SCOMP test.jar : version compilée à ajouter aux librairies du projet src contient les classes Java non compilées Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - exemple • Problème avec Eclipse Si vous utilisez XMLBeans avec Eclipse et Apache Tomcat, et que vous obtenez l’erreur : ExceptionClassNotFound « Impossible de compiler la page », il faut faire : Clic droit sur le projet > Propriétés > Java EE Module Dependencies Il faut cocher toutes les cases. Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - exemple • Génération d’un fichier XML // import des classes Java générées précédemment public class GenerationXML { public static void main(String[] args) throws IOException{ ParcautomobileDocument parc = ParcautomobileDocument.Factory.newInstance(); Parcautomobile parcautomobile = parc.addNewParcautomobile(); Vehicule vehicule1 = parcautomobile.addNewVehicule(); vehicule1.setModele(Modele.COUPE); Marque marque1 = vehicule1.addNewMarque(); marque1.setNom(Nom.RENAULT); boolean estValide = parc.validate(); XmlOptions opts = new XmlOptions(); opts.setSavePrettyPrint(); System.out.println(parc.xmlText(opts)); parc.save(new File ("d:/parcAuto.xml"), opts); } <?xml version="1.0" encoding="UTF-8"?> <parcautomobile> <vehicule modele="coupe"> <marque> <nom>Renault</nom> </marque> </vehicule> </parcautomobile> Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - exemple • Parsing d’un fichier XML // import des classes Java générées précédemment public class ParseXML { public static void main(String[] args) throws Exception { //Parsing du fichier XML ParcautomobileDocument Parcautomobile = ParcautomobileDocument.Factory.parse(new File ("d:/parcAuto.xml")); Vehicule[] modelesVehicule = parc.getVehiculeArray(); for (Vehicule v : modelesVehicule){ System.out.println(v.getModele()); Marque[] lesMarques = v.getMarqueArray(); for (Marque m : lesMarques){ } } } Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - exemple • L’interface XMLCursor // import des classes Java générées précédemment public class InsertionXML { public static void main(String[] args) throws Exception { ParcautomobileDocument Parcautomobile = ParcautomobileDocument.Factory.parse(new File ("d:/parcAuto.xml")); XmlCursor filtreCursor = Parcautomobile.newCursor(); filtreCursor.toNextToken(); filtreCursor.toNextToken(); filtreCursor.beginElement("vehicule"); filtreCursor.insertAttributeWithValue("modele", "sport"); filtreCursor.dispose(); } Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - exemple • XQuery <parcautomobile> <vehicule> <marque> <nom> Peugeot </nom> <nombre> 7 </nombre> </marque> </vehicule> </parcautomobile> // import des classes Java générées précédemment public class XQueryXML { public static void main(String[] args) throws Exception { ParcautomobileDocument Parcautomobile = ParcautomobileDocument.Factory.parse(new File ("d:/parcAuto.xml")); String requete = "for $e in //parcautomobile/vehicule/marque " + "where $e/nom = 'Peugeot' " + "return $e//nombre"; XmlCursor monCursor1 = parcautomobile.newCursor().execQuery(requete); System.out.println(monCursor1.getObject().toString()); System.out.println("Expression 1 : le nombre de vehicules de marque Peugeot est : " + monCursor1.getTextValue()); } Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - exemple • XPath <parcautomobile> <vehicule> <marque> <nom> Peugeot </nom> <nombre> 7 </nombre> </marque> </vehicule> </parcautomobile> // import des classes Java générées précédemment public class XPathXML { public static void main(String[] args) throws Exception { ParcautomobileDocument Parcautomobile = ParcautomobileDocument.Factory.parse(new File ("d:/parcAuto.xml")); XmlCursor monCursor = Parcautomobile.newCursor(); monCursor.toFirstChild(); monCursor.selectPath("$this//marque//nom"); while (monCursor.toNextSelection()) { System.out.println(monCursor.getTextValue()); } } Chamilah Ingar - Guillaume Monteil - Cyril Tovena
Xmlbeans - test Chamilah Ingar - Guillaume Monteil - Cyril Tovena