Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
785 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Problème de lecture hibernate.cfg.xml à cause dtd

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de lecture hibernate.cfg.xml à cause dtd

n°905306
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 23-11-2004 à 10:49:48  profilanswer
 

Bonjour,
 
J'utilise Hibernate v2.1 pour faire du O/R mapping. J'ai un souci tout bête que tout le monde a déjà dû rencontré sur un projet lié au fait que le fichier de configuration hibernate.cfg.xml est validé par rapport à une DTD nommé hibernate-mapping-2.0.dtd.
 
Mon problème, c'est que lorsque j'exécute le code suivant
 

Code :
  1. SessionFactory sessionFactory = new Configuration().configure().buildSessionfactory();


 
La méthode configure() appelée sans paramètre recherche le fichier nommé hibernate.cfg.xml, qu'elle trouve chez moi dans le répertoire des classes. Or ce fichier XML référence la DTD citée plus haut, laquelle est située dans le même répertoire. A la place la JVM me sort une FileNotFoundException avec un chemin style C:\IBM\WSAD\hibernate-mapping-2.0.dtd alors que le chemin de la DTD est C:\IBM\WSAD\Workspace\monAppli\classes\hibernate-mapping-2.0.dtd.
 
Mon problème, c'est que la DTD est référencée de manière relative dans l'en-tête du fichier hibernate.cfg.xml mais que le répertoire de base qui sert à calculer l'URL absolue de la DTD n'est pas le répertoire des classes mais plutôt le répertoire considéré comme le "home" de la JVM.
 
J'ai ce problème en local pour mes tests donc j'imagine que je l'aurai aussi lors des phases de déploiement sur différentes serveurs.
 
Y'a-t-il un moyen propre (une best practice) pour résoudre ce problème à part mettre un chemin en dur dans l'en-tête du fichier hibernate.cfg.xml (Ce qui est quand même dégueulasse) ?  
 
En espérant avoir été clair :)
 
Merci d'avance. Je ne suis pas constamment sur le forum car obligé d'utiliser un poste en libre-service (arf)

mood
Publicité
Posté le 23-11-2004 à 10:49:48  profilanswer
 

n°905464
the real m​oins moins
Posté le 23-11-2004 à 13:25:14  profilanswer
 

bah tu references ta dvd correctement dans ton xml
et "le répertoire de base qui sert à calculer l'URL absolue de la DTD", c'est celui d'ou est lancé ton appli.
tu peux peut etre aussi passer par le classpath, on bien referencer l'url de la dtd (http://www.hibernate.org/....), en esperant pour toi que le contenu en soit caché en local :p

n°905940
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 23-11-2004 à 19:00:31  profilanswer
 

Citation :

bah tu references ta dvd correctement dans ton xml


 
Quelle est la manière correcte de référencer la DTD dans mon fichier XML ?
 
Actuellement, j'ai cela:
 

Code :
  1. <!DOCTYPE hibernate-configuration PUBLIC
  2.         "-//Hibernate/Hibernate Configuration DTD 2.0//EN"
  3.  "hibernate-configuration-2.0.dtd">


 
Avec le XML et la DTD dans le même répertoire. Ca me semble correct.
 

Citation :


et "le répertoire de base qui sert à calculer l'URL absolue de la DTD", c'est celui d'ou est lancé ton appli.


 
C'est plus ou moins ce que j'avais compris...
 

Citation :


tu peux peut etre aussi passer par le classpath, on bien referencer l'url de la dtd (http://www.hibernate.org/....), en esperant pour toi que le contenu en soit caché en local :p


 
Oui, je vais tenter de la placer dans un répertoire du classpath

n°935839
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 03-01-2005 à 16:13:26  profilanswer
 

Bon,
 
je reuppe car j'avais trouvé une solution de contournement qui ne marche pas lorsque je déploie mon application.  
 
Si j'ai bien compris (suite à mes recherches sur le net), référencer correctement la DTD c'est la référencer par une URL du style "http://hibernate.sourceforce.net/hibernate-configuration-2.0.dtd" au lieu de "hibernate-configuration-2.0.dtd" tout seul.
 
Mon problème, c'est que le réseau sur lequel sera déployé l'application ne sera pas connecté à internet. Comment dois-je faire dans ce cas à part coller le fichier "en dur" dans l'arborescence de WAS là où WAS le cherche ?
 
Merci d'avance

n°935852
the real m​oins moins
Posté le 03-01-2005 à 16:22:20  profilanswer
 

je suis pas sur, mais si tu mets SYSTEM a la place de PUBLIC, il se peut qu'il cherche dans le rep courant ou dans le classpath; et la dtd est probablement dans le jar d'hibernate


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°935860
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 03-01-2005 à 16:29:44  profilanswer
 

super, je teste ça... :jap:

n°935863
the real m​oins moins
Posté le 03-01-2005 à 16:32:45  profilanswer
 

(cela dit, c'est pas du tout lié a hibernate, mais a la librairie xml utilisée en dessous)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°935886
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 03-01-2005 à 16:50:07  profilanswer
 

La DTD est bien dans le JAR d'Hibernate. Mais ça ne marche pas actuellement. Je teste...
 
Je tente de voir la différence avec ce que j'ai pour Log4J pour lequel le parsing du log4j.xml est bien effectué via la DTD du (semble-t-il) log4j.jar.
 
C'est frustrant ce truc car je bidouille maiu je n'ai pas vraiment d'idée de ce que je fais, je n'aurai rien appris si je réussis à faire marcher mon parsing de hibernate.cfg.xml

n°935887
the real m​oins moins
Posté le 03-01-2005 à 16:50:46  profilanswer
 

et si tu googlais un coup?
a coup sur c'est dans la doc, la faq ou un blog quelconque


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°935889
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 03-01-2005 à 16:55:02  profilanswer
 

donc je dois comprendre comment fonctionne la librairy xml utilisée par hibernate pour comprendre mon bug... :/

mood
Publicité
Posté le 03-01-2005 à 16:55:02  profilanswer
 

n°935891
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 03-01-2005 à 16:56:40  profilanswer
 

j'ai déjà googler mais je n'ai pas trouvé de sujet proche. Je ne dois pas rechercher avec les bons mots-clés...

n°935913
the real m​oins moins
Posté le 03-01-2005 à 17:20:24  profilanswer
 

ça marche pas en mettant SYSTEM au lieu de PUBLIC? normalement quand tu met SYSTEM tu peux specifier un path complet vers la dtd, sur le file system... mais il me semble l'avoir déjà vu marcher sur des dtd qui étaient dans le classpath...
OU tu t'arranges pour desactiver la validation [:joce]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°935915
the real m​oins moins
Posté le 03-01-2005 à 17:22:42  profilanswer
 
n°935937
benou
Posté le 03-01-2005 à 17:46:28  profilanswer
 

Citation :

This means that your XML parser does not support the EntityResolver


ca existe ça [:le kneu]


---------------
ma vie, mon oeuvre - HomePlayer
n°935947
the real m​oins moins
Posté le 03-01-2005 à 17:52:17  profilanswer
 

vieux xerces peut etre ? [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°936065
krosso
j'suis à la bourre
Posté le 03-01-2005 à 20:16:21  profilanswer
 

Et mettre la dtd dans le répertoire de contenu statique de ton appli, t'as  essayé ?
 
./web/images
./web/html
./web/css
./web/dtd
 
ça me parait trop simple, y a kekechose qui m'échappe ?

n°936240
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-01-2005 à 07:19:47  profilanswer
 


 
Merci. Par défaut Hibernate utilise Dom4J qui semble poser problème comme tu disais. Je vais tenter d'utiliser Xerces à la place...

n°936317
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-01-2005 à 10:05:32  profilanswer
 

Les recherches sur le net montrent clairement que la faute revient à Dom4J.
 
Les astuces données sur cette page (Mettre SYSTEM au lieu de PUBLIC et utiliser Xerces à la place de Dom4J) ne marchent pas.
 
La 1ère astuce ne change absolument rien à moins qu'il y ait un endroit spécial du serveur WebSphere où je dois placer mes DTDs afin qu'elles soient trouvées correctement dans le cas d'un DOCTYPE SYSTEM ???  
 
Pour cette 2nde astuce, j'ai tenté de parser le fichier hibernate.xfg.xml "manuellement" avec Xerces puis de le passer en paramètre de sessionFactory.configure(org.w3c.Document document) au lieu d'appeler sessionFactory.configure(String filename). Ca marche mais l'erreur se déporte ensuite aux fichiers de mappings *.hbm.xml car le fichier hibernate.cfg.xml comporte des chemins vers les fichiers de mapping xml qui sont parsés par Dom4J et rebelote, il me recherche les DTDs au mauvais endroit... :/
 
J'arrive pas à comprendre...


Message édité par machinbidule1974 le 04-01-2005 à 10:10:11
n°936323
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 04-01-2005 à 10:11:17  profilanswer
 

krosso a écrit :

Et mettre la dtd dans le répertoire de contenu statique de ton appli, t'as  essayé ?
 
./web/images
./web/html
./web/css
./web/dtd
 
ça me parait trop simple, y a kekechose qui m'échappe ?


 
J'y crois pas trop, la DTD doit être recherchée dans le classpath. Le parser SAX n'a aucune idée de l'existence de ces répertoires.

n°936788
krosso
j'suis à la bourre
Posté le 04-01-2005 à 15:55:53  profilanswer
 

machinbidule1974 a écrit :

J'y crois pas trop, la DTD doit être recherchée dans le classpath. Le parser SAX n'a aucune idée de l'existence de ces répertoires.


Mettre dans le fichier hibernate là où c'est bien  
http://url_de_ton_appli/dtd/machin.dtd
pourquoi çe ne marcherait pas ?
 
Dans mes applis je vais carrément le chercher là :
http://hibernate.sourceforge.net/h [...] on-2.0.dtd
donc je ne comprends pas pourquoi çe ne fonctionnerait pas en "local".
Ceci dit j'utilise tomcat et j'ai la flemme de faire le test   :sleep:


Message édité par krosso le 04-01-2005 à 15:57:13
n°937985
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 05-01-2005 à 15:42:17  profilanswer
 

J'avais pensé à mettre une url locale comme tu conseilles mais le problème, c'est que mon fichier XML va contenir  une url en dur alors que le déploiement de l'EAR peut se faire sous n'importe quelle root URI.
 
J'en avais marre de me prendre la tête alors je l'ai mis là où Dom4J cherchait la DTD, à la racine du répertoire de WebSphere. Je sais que c'est dégueulasse mais la solution correcte semble être d'utiliser Xerces au lieu du parser intégré à Dom4J en utilisant JAXP et en positionnant des variables d'environnements pour indiquer quel parser instancier. Comme j'y connais rien ç JAXP et que ça commence à me gaver...
 
Merci de votre aide à tous

n°1062417
tidam4
Posté le 27-04-2005 à 11:04:24  profilanswer
 

Bonjour,
 
je débute sous hibernate. j'utilise eclipse comme editeur. Et j'ai un petit souci pour le fichier de mapping file.
j'ai une base oracle.
j'utilise le driver oracle.jdbc.driver.OracleDriver
mon URL : jdbc: Oracle: Oci:@/localhost:9999:VPMD_VPMWFRCD
j'entre bien mon nom d'utilisateur et mon mot de passe.
 
Lorsque je clik sur refresh la barre de chargement se met en route. Une fois qu'elle est terminé aucunes erreur s'est produites mais rien ne s'est affiché dans mes tables? :(  
cela vient peut etre de mon URL... :??:  

n°1063248
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 27-04-2005 à 18:57:48  profilanswer
 

J'ai rien compris à ton problème. Ouvre plutôt un topic à toi en détaillant mieux

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Problème de lecture hibernate.cfg.xml à cause dtd

 

Sujets relatifs
probleme script perl[HTML] Problème tout bête à propos d'un tableau.
[jsp]problème à la compilation : class file contains wrong class[lingo director] problème de cursor
Problème d'ouverture d'url avec fopen()Problème preg_replace() et chiffres, numéros
Probleme d'URL REWRITINGProbleme de gestion de la souris...
probleme comparaison de variableCompiler du C sous OSX - probleme -
Plus de sujets relatifs à : Problème de lecture hibernate.cfg.xml à cause dtd


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR