Serveur d'archivage 2007 Installation et utilisation de la BD exist



Documents pareils
La base de données XML exist. A. Belaïd

BASE DE DONNÉES XML NATIVE

Création d une application JEE

Utilisation de Jakarta Tomcat

Programmer en JAVA. par Tama

I. Instalation de l environnement JDK et JRE : II. Configuration outil Reporting : Pentaho... 4

RMI le langage Java XII-1 JMF

Java DataBaseConnectivity

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Tutoriel d installation de Hibernate avec Eclipse

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Design patterns. Design patterns - définition. Design patterns - avantages

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

OpenPaaS Le réseau social d'entreprise

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

JavaServer Pages (JSP)

Java Licence Professionnelle CISII,

TP Programmation Java / JDBC / Oracle

BASE DE DONNÉES XML NATIVE

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Remote Method Invocation (RMI)

as Architecture des Systèmes d Information

Application web de gestion de comptes en banques

arcopole Studio Version 3.3

Introduction à JDBC. Accès aux bases de données en Java

TP1 : Initiation à Java et Eclipse

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

contact@nqicorp.com - Web :

Maîtriser le menu contextuel dans un OfficeBean

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Premiers Pas en Programmation Objet : les Classes et les Objets

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

BOUCHARD Nicolas. GENTILE Pierre

Auto-évaluation Programmation en Java

contact@nqicorp.com - Web :

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Tp 1 correction. Structures de données (IF2)

Eclipse atelier Java

Initiation à JAVA et à la programmation objet.

Corrigé des exercices sur les références

Cours 1: Java et les objets

Systeme d'exploitation

Package Java.util Classe générique

Sage 100 CRM - Guide d installation Version Mise à jour : 2015 version 8

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Construire une base de donnée pour bibliothèque

Plan du cours. Historique du langage Nouveautés de Java 7

Oracle Database SQL Developer Guide D'Installation Release 4.0 E

Java Licence Professionnelle CISII,

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Installation de la plate-forme Liberacces 2.0 «Intégrale» avec LiberInstall

Oracle WebLogic Server (WLS) 11gR1 ( et ) Installation sur Oracle Linux 5 et 6 Hypothèses Installation Oracle Linux 5 (OL5)

TP1. Outils Java Eléments de correction

Traitement de données

Un serveur d'archivage

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Architecture Orientée Service, JSON et API REST

Création d objet imbriqué sous PowerShell.

.NET - Classe de Log

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

AFTEC SIO 2. Christophe BOUTHIER Page 1

MEDIAplus elearning. version 6.6

1. Installation d'un serveur d'application JBoss:

Remote Method Invocation Les classes implémentant Serializable

Un ordonnanceur stupide

Manuel d implémentation des Web Services Sous Axis1 et Axis2/Tomcat/linux. Par Pr Bouabid EL OUAHIDI

Langage Java. Classe de première SI

JOnAS Day 5.1. Outils de développements

Programme Compte bancaire (code)

Dis papa, c est quoi un bus logiciel réparti?

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Synchro et Threads Java TM

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Java pour le Web. Cours Java - F. Michel

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Héritage presque multiple en Java (1/2)

TD/TP PAC - Programmation n 3

Serveur d application WebDev

Bases Java - Eclipse / Netbeans

Corrigés des premiers exercices sur les classes

Installation. Conception, mise en œuvre, hébergement, exploitation et

Web Tier : déploiement de servlets

Projet de programmation (IK3) : TP n 1 Correction

Installation du package esup-portail Version uportal-2.5.x-esup

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Transcription:

Type du document Procédure d'installation Auteur(s) Eric Bouladier Date de création 26/02/20007 Domaine de diffusion tous Validé par Equipe Versions Date Auteur(s) Modifications V1.00 26/02/2007 Eric Bouladier Création V1.01 28/02/2007 Eric Bouladier Problème validation fichier par schéma (bug du parseur utilisé par exist). 1/14

Table des matières...1 Téléchargement...3 Pré requis... 3 Installation... 3 Configuration de la base de données... 3 Lancement en mode serveur autonome... 4 Paramétrage du client exist... 5 Paramétrage de l'outil oxygen xml Editor...6 Configuration d'un projet Eclipse attaquant la BD exist...7 Exemple en Java... 8 2/14

Téléchargement Le site utilisé est : http://exist.sourceforge.net/index.html A la date de rédaction de ce document, deux versions de la base de données sont disponibles : les versions 1.0 et 1.1. Elles se distinguent principalement par leur moteur d'indexation. La version 1,1 est plus souple d'utilisation. C'est cette dernière version que nous choisissons bien qu'elle soit déclarée comme moins finalisée. Comme l'api est indépendante de la version (à quelque chose près), il serait aisé de passer à la version 1.1 en cas de difficulté. L base de données exist propose un déploiement en base autonome ou installée dans un moteur de servlet tel que Tomcat ou Jetty. Cette dernière option n'est pas retenue puisque le serveur de présentation (faisant tourner Tomcat) n'abrite pas la base de données. La version téléchargée est donc : exist-1.1.1-newcore.jar Pré requis La version 1.4.2 au minimum du JDK Java doit être installée sur le serveur faisant tourber exist (attention, il s'agit bien du JDK : une JRE n'est pas suffisante). Il est préférable que la variable d'environnement JAVA_HOME soit présente. Installation Sous Windows, il suffit de double-cliquer sur le fichier téléchargé pour obtenir un enchaînement d'écrans ne présentant aucune difficulté particulière de compréhension. Configuration de la base de données La base de données lancée comme serveur autonome utilise le conteneur de Servlet en mode dégradé sur le port 8080. Ce port doit être modifié s'il est déjà utilisé par un autre logiciel (Tomcat par exemple). Pour changer le port, modifier le fichier jetty.xml du répertoire C:\Program Files\eXist\tools\jetty\etc. La variable d'environnement EXIST_HOME peut être définie (pas forcément indispensable) pour contenir le chemin du répertoire d'installation (C:\Program Files\eXist dans notre exemple). Les fichiers conf.xml et server.xml de C:\Program Files\eXist contiennent les paramètres de configuration. Dans conf.xml, passer le paramètre validation= «auto» à «no». Cela empèche exist d'effectuer une vérification du fichier xml lors de l'ajout du fichier dans la base de données. C'est nécessaire car un bug dans le parseur utilisé par exist rend inutilisable cette option avec un schéma xml. Dans server.xml, modifier si nécessaire le profile et le mot de passe de l'administrateur. 3/14

Lancement en mode serveur autonome Pour lancer exist en mode serveur autonome, il faut utiliser le fichier server.bat du répertoire C:\Program Files\eXist\bin. L'arrêt de la base de données peut s'effectuer par un Ctrl C dans la fenêtre DOS résultant de l'exécution de server.bat. La fenêtre DOS se présente comme ceci à l'issue du lancement. 4/14

Paramétrage du client exist Le paramétrage de la connexion dans le client exist est le suivant (noter l'url qui n'est pas celle proposée par défaut) : 5/14

Paramétrage de l'outil oxygen xml Editor Dans l'outil Oxygene XML Editor, il faut créer une source de données et une connexion telles que montrées ci-dessous: 6/14

Configuration d'un projet Eclipse attaquant la BD exist Les fichiers jar suivants doivent être incorporés dans le chemin de génération. L'emplacement de la javadoc est indiqué : profitez en. Les fichiers jar suivants doivent être incorporés dans le chemin d'accès aux classes (exécution). 7/14

Exemple en Java package serv_exist; import java.io.file; import javax.xml.transform.outputkeys; import org.exist.xmldb.xqueryservice; import org.w3c.dom.document; import org.xmldb.api.databasemanager; import org.xmldb.api.base.collection; import org.xmldb.api.base.compiledexpression; import org.xmldb.api.base.database; import org.xmldb.api.base.resource; import org.xmldb.api.base.resourceiterator; import org.xmldb.api.base.resourceset; import org.xmldb.api.base.xmldbexception; import org.xmldb.api.modules.collectionmanagementservice; import org.xmldb.api.modules.xmlresource; Classe gérant l'accès aux données stockées dans la base de données XML exist.<br/> La classe est utilise le pattern Singleton. @author Eric BOULADIER @version 1.0 public class GestColl { public final static String driver = "org.exist.xmldb.databaseimpl"; public final static String URI = "xmldb:exist://localhost:8088/xmlrpc"; public final static String rootcoll = "/db"; public final static String colltypdoc = "typesdoc"; public final static String pathcolltypdoc = rootcoll + "/" + colltypdoc; public final static String colldoc = "biblio"; public final static String pathcolldoc = rootcoll + "/" + colldoc; public final static String dbadmin_user = "admin"; public final static String dbadmin_pwd = "admin"; L'unique instance statique private static GestColl gestcoll; Le constructeur est privé pour interdir la création d'instances de GestColl par new. Il faut utiliser la méthode getinstance(). @see #getinstance() @throws ClassNotFoundException @throws InstantiationException @throws IllegalAccessException @throws XMLDBException private GestColl() throws ClassNotFoundException, InstantiationException, IllegalAccessException, XMLDBException { super(); Class cl = Class.forName(driver); Database database = (Database) cl.newinstance(); DatabaseManager.registerDatabase(database); 8/14

// initilisation de la base de données exist (création des collections // de base) initdb(); Retourne l'unique instance de GestColl @return gestcoll, objet permetant de manipuler la base de données exist. public static GestColl getinstance() { if (null == gestcoll) { // Premier appel gestcoll = new GestColl(); catch (ClassNotFoundException e) { catch (InstantiationException e) { catch (IllegalAccessException e) { catch (XMLDBException e) { return gestcoll; Empeche la duplication du singleton par clonage. @see java.lang.object#clone() public Object clone() throws CloneNotSupportedException { throw new CloneNotSupportedException(); Ajoute un nouveau type de document. La procédure crée deux nouvelles collections portant le nom 'nomtypdoc' dans la base de données : une sous la racine biblio et l'autre sous la racine typdoc. Si le chemin 'pathshematypdoc' est renseigné, le shema XML est enregistré dans la base de données sous la racine typdoc/'nomtypdoc'. @param nomtypdoc : nom du type de document (exemple : these, annale) @param pathshematypdoc : Chemin avec le nom du fichier schema XML public void addtypdoc(string nomtypdoc, String pathshematypdoc) { addcollection(nomtypdoc, pathcolldoc); addcollection(nomtypdoc, pathcolltypdoc); if (pathshematypdoc!= null) { addresource(pathcolltypdoc + "/" + nomtypdoc, "shemaxml", pathshematypdoc); catch (XMLDBException e) { Ajoute le fichier de métadonnées d'un document d'un type déjà défini (par addtypdoc). Si le document existe déjà, il est supprimé et remplacé. @param nomtypdoc : nom du type de document (exemple : these, annale) 9/14

@param iddoc : identifiant unique du document. @param pathfile : Chemin avec le nom du fichier XML contenant les métadonnées. public void addmetadata(string nomtypdoc, String iddoc, String pathfile) { addresource(pathcolldoc + "/" + nomtypdoc, iddoc, pathfile); catch (XMLDBException e) { Supprime un fichier de métadonnées d'un document d'un type donné. @param nomtypdoc : nom du type de document (exemple : these, annale) @param iddoc : identifiant unique du document. @param pathfile public void rmvmetadata(string nomtypdoc, String iddoc) { rmvresource(pathcolldoc + "/" + nomtypdoc, iddoc); catch (XMLDBException e) { Renvoie le fichier de métadonnées sous forme d'un document DOM (org.w3c.dom.document). @param nomtypdoc : nom du type de document (exemple : these, annale) @param iddoc : identifiant unique du document. @return : fichier de métadonnées sous forme d'un document DOM. public Document rtvmetadataasdom(string nomtypdoc, String iddoc) { return rtvresourceasdom(pathcolldoc + "/" + nomtypdoc, iddoc); catch (XMLDBException e) { return null; Renvoie le fichier de métadonnées dans un Sax content handler. @param nomtypdoc : nom du type de document (exemple : these, annale) @param iddoc : identifiant unique du document. @param handler : Sax Content handler devant recevoir le fichier de métadonnées. public void rtvmetadataassax(string nomtypdoc, String iddoc, org.xml.sax.contenthandler handler) { rtvresourceassax(pathcolldoc + "/" + nomtypdoc, iddoc, handler); catch (XMLDBException e) { 10/14

Renvoie le nombre de documents présents dans la base de données pour un type donné. @param nomtypdoc : nom du type de document dont on souhaite compter les documents présents. @return nombre de documents de type nomtypdoc. public int nombredocumentspartype(string nomtypdoc) { / Récupération de la collection si elle existe int nbdoc = 0; Collection col; col = DatabaseManager.getCollection(URI + pathcolldoc + "/" + nomtypdoc, dbadmin_user, dbadmin_pwd); if (col!= null) { XQueryService service = (XQueryService) col.getservice( "XQueryService", "1.0"); service.setproperty("indent", "yes"); service.declarevariable("collection", pathcolldoc + "/" + nomtypdoc); String query = "count(collection($collection))"; CompiledExpression compiled = service.compile(query); ResourceSet result = service.execute(compiled); ResourceIterator i = result.getiterator(); while (i.hasmoreresources()) { Resource r = i.nextresource(); nbdoc += Integer.parseInt(r.getContent().toString()); catch (XMLDBException e) { return nbdoc; public void listdocumentspartype(string nomtypdoc) { / Récupération de la collection si elle existe Collection col; col = DatabaseManager.getCollection(URI + pathcolldoc + "/" + nomtypdoc, dbadmin_user, dbadmin_pwd); if (col!= null) { XQueryService service = (XQueryService) col.getservice( "XQueryService", "1.0"); service.setproperty("indent", "yes"); service.declarevariable("collection", colldoc + "/" + nomtypdoc); String query = "<res>{for $i in collection($collection) return <doc>{$i/</doc></res>"; CompiledExpression compiled = service.compile(query); ResourceSet result = service.execute(compiled); ResourceIterator i = result.getiterator(); while (i.hasmoreresources()) { Resource r = i.nextresource(); // XMLResource res = (XMLResource) i.nextresource(); System.out.println((String) r.getcontent()); catch (XMLDBException e) { private void addcollection(string nomcollection, String pathcollection) throws XMLDBException { / Récupération de la collection si elle existe String collection = pathcollection + "/" + nomcollection; 11/14

Collection col = DatabaseManager.getCollection(URI + collection, dbadmin_user, dbadmin_pwd); if (col == null) { / si la collection n'éxiste pas, elle est crée Collection root = DatabaseManager.getCollection(URI + pathcollection); CollectionManagementService mgtservice = (CollectionManagementService) root.getservice("collectionmanagementservice", "1.0"); col = mgtservice.createcollection(collection); Ajoute ou remplace une ressource dans une collection. Si la ressource existe dèjà dans la collection elle est remplacée (dixit internet : à vérifier) @param pathcollection : chemin de la collection @param idresource : identifiant de la ressource @param pathfile : chemin du fichier XML (avec le nom du fichier) @throws XMLDBException private void addresource(string pathcollection, String idresource, String pathfile) throws XMLDBException { / Récupération de la collection si elle existe Collection col = DatabaseManager.getCollection(URI + pathcollection, dbadmin_user, dbadmin_pwd); if (col!= null) { // create new XMLResource XMLResource document = (XMLResource) col.createresource(idresource, "XMLResource"); File f = new File(pathFile); if (!f.canread()) { System.out.println("cannot read file " + pathfile); return; document.setcontent(f); System.out.print("enregistrement document " + document.getid() + "..."); col.storeresource(document); System.out.println("ok."); private void rmvresource(string pathcollection, String idresource) throws XMLDBException { / Récupération de la collection si elle existe Collection col = DatabaseManager.getCollection(URI + pathcollection, dbadmin_user, dbadmin_pwd); if (col!= null) { // create new XMLResource XMLResource document = (XMLResource) col.createresource(idresource, "XMLResource"); System.out.print("suppression document " + document.getid() + "..."); col.removeresource(document); System.out.println("ok."); private Document rtvresourceasdom(string pathcollection, String idresource) throws XMLDBException { / Récupération de la collection si elle existe Collection col = DatabaseManager.getCollection(URI + pathcollection, dbadmin_user, dbadmin_pwd); Document doc = null; if (col!= null) { col.setproperty(outputkeys.indent, "no"); XMLResource res = (XMLResource) col.getresource(idresource); 12/14

if (res == null) System.out.println("document non trouvé!"); else System.out.println(res.getContent()); doc = (Document) res.getcontentasdom(); return doc; private void rtvresourceassax(string pathcollection, String idresource, org.xml.sax.contenthandler handler) throws XMLDBException { / Récupération de la collection si elle existe Collection col = DatabaseManager.getCollection(URI + pathcollection, dbadmin_user, dbadmin_pwd); if (col!= null) { col.setproperty(outputkeys.indent, "no"); XMLResource res = (XMLResource) col.getresource(idresource); if (res == null) System.out.println("document non trouvé!"); else System.out.println(res.getContent()); res.getcontentassax(handler); private void initdb() throws XMLDBException { // création des 2 collections de base (biblio et typesdoc) sous /db addcollection(colldoc, rootcoll); addcollection(colltypdoc, rootcoll); // ajouts des collections correspondant aux types de document these et // annale. addcollection("these", pathcolldoc); addcollection("these", pathcolltypdoc); addcollection("annale", pathcolldoc); addcollection("annale", pathcolltypdoc); 13/14

package serv_exist; import org.w3c.dom.document; import org.xmldb.api.base.xmldbexception; public class TestDB { @param args @throws XMLDBException @throws IllegalAccessException @throws InstantiationException @throws ClassNotFoundException public static void main(string[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, XMLDBException { String nomtypdoc = args[0]; GestColl gestcoll = GestColl.getInstance(); gestcoll.addtypdoc(nomtypdoc, null); String iddoc = args[1]; String pathfile = args[2]; gestcoll.addmetadata(nomtypdoc, iddoc, pathfile); Document doc = gestcoll.rtvmetadataasdom(nomtypdoc, iddoc); System.out.println(doc.getTextContent()); gestcoll.listdocumentspartype(nomtypdoc); System.out.println(gestColl.nombreDocumentsParType(nomTypDoc)); gestcoll.rmvmetadata(nomtypdoc, iddoc); 14/14