IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

persistance.xml + variable d'environnement


Sujet :

JPA Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut persistance.xml + variable d'environnement
    Bonjour à tous.

    J'ai développé une application JSE à laquelle j'ai intégré JPA afin d'assurer la persistance des données. L'application est terminée et marche très bien. Néanmoins je me retrouve face à un problème pour le déploiement. En effet, je souhaiterais placer la base de données (derby) de l'application dans le dossier AppData (sous vista) ou Application Data (sous XP). Pour cela, il faudrait que j'intège la variable d'environnement APPDATA dans l'url jdbc de mon fichier persitance.xml du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="toplink.jdbc.url" value='jdbc:derby:%AppData%/BDD/agri' />
    De cette façon, lors du déploiement de mon application sur les postes utilisateurs, JPA connaitra l'emplacement de la base de données. Néanmoins cette solution ne marche pas :

    java.sql.SQLException: Database '%AppData%/BDD/agri' not found.

    La variable n'est pas évaluée...

    Je précise que j'utilise Derby en mode embarqué afin d'éviter d'installer un serveur derby sur les postes utilisateur, donc je suis obligé d'indiquer le chemin du dossier de la base de données.

    Quelqu'un aurait une solution pour remédier à ce problème?

    Merci par avance

  2. #2
    Membre actif
    Avatar de foucha
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 121
    Points : 251
    Points
    251
    Par défaut
    Je me demande s'il ne faut pas déjà que tu passes la variable d'environnement a la jvm quand tu lances ton programme :

    Par contre, après je ne sais pas comment tu peux y accéder directement dans ton xml.... Programmatiquement c'est possible par contre, ce qui permettrais de faire un test sur l'existence du dossier avant de setter la valeur.

    Car dans ton cas de figure, il faut quand meme déclarer APP_DATA à la main dans l'environnement. Ce n'est pas différent que de le spécifier dans le xml.

    ++
    Foucha.
    ++
    Foucha.

    =========

    "du code propre c'est du code qui fait exactement ce qu'on croit que ça fait"

    Mes Articles DVP

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Tout d'abord merci pour la réponse. J'ai essayé de passer le chemin du dossier AppData en paramètre de la JVM ca marche très bien, je peux récupérer programmatiquement le chemin du dossier AppData. Mais il reste toujours le problème de savoir comment accèder à ce paramètre depuis le persistance.xml. J'ai essayé avec ${AppData} mais pareil il ne l'évalue pas.

    En fait j'ai pensé à une autre solution. grâce à un parser xml je pourrai coder la valeur de l'url de ma base de données à partir du paramètre de la JVM, néanmoins ceci n'est pas réalisable car :

    pour déployer mon application, je souhaite mette le jar de l'appli dans Program Files, et la base de données dans AppData. Sous XP, si la base de données est placée dans Program Files elle sera ouverte en lecture écriture, en revanche sous Vista elle sera ouverte en lecture seule et l'application ne marchera pas. Mon but est de réaliser un installer qui puisse fonctionner sous Vista, d'où ma décision de placer la base de données dans AppData (car dans ce dossier l'utilisateur a tous les droits). De ce fait, je ne peux parser mon persistance.xml pour changer la valeur de l'url de la base de données car lui se trouve dans Program Files, donc il s'ouvrira également en lecture seule sous Vista.

    Donc je ne sais toujours pas comment résoudre mon problème.

    D'autre suggestions?

    Merci par avance

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Re bonjour !

    Bon j'ai résolu mon problème, dont je vais donner la solution pour ceux qui se retrouveraient confrontés au même problème.

    En fait il faut bien passer un paramètre à la JVM, dans mon cas je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -DAppData=%AppData% -jar appli.jar
    (que je mettrait dans un .bat).

    Ensuite, à la création de l'entityManagerFactory, il est possible de passer en paramètre, en plus du nom de la persistence unit, un map contenant les properties que l'on souhaite modifier. De ce fait, les properties passées ddans cet Map seront utilisées à la place de celles renseignées dans le persistence.xml.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String dbUrl = "jdbc:derby:" + System.getProperty("AppData") + "\\BDD\\agri";
    Map properties = new HashMap();
    properties.put("toplink.jdbc.url", dbUrl);
    emf = Persistence.createEntityManagerFactory("PU",properties);
    Et voila, pas besoin de modifier le persistence.xml et le chemin de la base de données est bien celui spécifique à la machine de l'utilisateur

    Merci pour l'aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [minidom/XML] lecture variable d'environnement
    Par tiresias54 dans le forum Général Python
    Réponses: 0
    Dernier message: 29/05/2013, 16h25
  2. Variable d'environnement en XML
    Par kaminem dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 07/12/2007, 18h41
  3. Réponses: 4
    Dernier message: 27/07/2007, 15h37
  4. [XML] specifier la DTD par une variable d'environnement
    Par xxiemeciel dans le forum Valider
    Réponses: 2
    Dernier message: 20/03/2006, 16h28
  5. XML et variable d'environnement
    Par nicolas.79 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 21/11/2005, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo