2010-09-03 10 views
1

J'ai créé un projet EJB3 et un projet JPA. J'essaye de créer une classe d'assistance (qui sera dans un projet/jar séparé) qui retournera le nom d'unité de persistance du fichier persistance.xml qui se trouve dans le dossier META-INF de mon projet JPA. Comment puis-je lire ce fichier en tant que flux d'entrée?Lecture du fichier persistence.xml à partir d'un POJO

Je peux analyser les valeurs une fois que j'ai une référence à ce fichier, mais comment puis-je lire les fichiers dans le dossier META-INF d'un pot d'une classe d'un autre pot?

S'il vous plaît fournir vos suggestions.

Répondre

1

Cela fonctionne ...

InputStream is = Thread.currentThread().getContextClassLoader().getResource("META-INF/persistence.xml").openStream(); 
+0

Comment cela fonctionne-t-il pour obtenir le nom de l'unité Persistence? – Achyut

+0

Une fois que vous avez obtenu une référence au fichier xml (par exemple, en tant que flux d'entrée dans la réponse ci-dessus), utilisez l'analyseur DOM ou SAX pour lire l'attribut name du nœud persistence-unit. – jobinbasani

0

Si votre autre fichier est dans le classpath, vous devriez pouvoir charger ce fichier en utilisant: getClass(). GetResourceAsStream ("META-INF/persistence.xml");

+0

Essayé, mais il est revenu que nulle pour une raison quelconque. .. – jobinbasani

2

J'ai eu le problème après un certain temps en utilisant la persistance unité (« soudainement »).

voici ce qui a aidé (ab ****** - solution, mais le problème ne se produit que dans devmode et est résolu à ce sujet):

try { 
     InputStream is = Thread.currentThread().getContextClassLoader(
       ).getResource("META-INF/persistence.xml").openStream(); 
     FileOutputStream output= new FileOutputStream("c:/tmp/show.xml"); 
     IOUtils.copy(is, output); 
     IOUtils.closeQuietly(output); 
     PersistenceUnitInfoImpl impl= new PersistenceUnitInfoImpl(); 
     impl.setPersistenceXmlFileUrl(new URL("file://c:/tmp/show.xml")); 
     JpaBasics basics= new JpaBasics("spektrum"); 
     basics.init(false); 
     EntityManager em= basics.getEm(); 
     _log.debug("have we an em: " + em); 
     new TestLoad().testLoadMagazines(); 
    } catch (Exception e) { 
     _log.error("", e); 
    } 
}