2009-10-25 13 views
4

J'utilise les fonctionnalités de reverse engineering intégrées au plugin eclipse hibernate pour générer les fichiers dao et hbm.xml pour chaque table.Problèmes d'utilisation du plugin Hibernate eclipse - impossible de localiser sessionfactory dans JNDI

Il le fait très bien, mais quand j'essaie d'utiliser les objets générés, je ne parviens pas à localiser SessionFactory en erreur JNDI.

J'ai vu un message qui suggérait que cela se produisait lorsque vous nommez votre SessionFactory dans le fichier hibernate.cfg.xml. J'ai donc supprimé la balise de nom et j'ai toujours la même erreur.

Ceci est mon hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.password">qwerty</property> 
     <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/agilegroup3</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.default_catalog">agilegroup3</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> 
     <mapping resource="generated/Usersroles.hbm.xml" /> 
     <mapping resource="generated/Role.hbm.xml" /> 
     <mapping resource="generated/Logdata.hbm.xml" /> 
     <mapping resource="generated/Logtrigger.hbm.xml" /> 
     <mapping resource="generated/User.hbm.xml" /> 
    </session-factory> 
</hibernate-configuration> 

Ceci est le code généré qui déclenche l'exception

protected SessionFactory getSessionFactory() { 
    try { 
     return (SessionFactory) new InitialContext() 
       .lookup("SessionFactory"); 
    } catch (Exception e) { 
     log.error("Could not locate SessionFactory in JNDI", e); 
     throw new IllegalStateException(
       "Could not locate SessionFactory in JNDI"); 
    } 
} 

Je ne sais pas beaucoup sur JNDI mais je suppose que son une sorte de recherche équivalent à un fichier de configuration. Je ne veux pas utiliser JNDI mais je ne sais pas comment y parvenir en utilisant le plugin eclipse.

Modification du code généré wont me aide vraiment parce que je dois continuer à le régénérer à certains endroits, donc si quelqu'un pourrait expliquer pourquoi/comment cela se passe et ce que je peux faire à ce sujet, je serais reconnaissant

Merci

Jonathan

+0

Je suis également face à la même question. Vous êtes-vous débarrassé de ce problème? Si oui pouvez-vous s'il vous plaît laissez-nous savoir la solution .... –

Répondre

3

Vous pouvez spécifier toute la connexion, mot de passe, nom d'utilisateur, etc. directement dans un fichier de configuration de mise en veille prolongée, puis charge à l'aide du code comme:

Configuration cfg = new Configuration(); 
cfg.configure(); 
SessionFactory sf = cfg.buildSessionFactory(); 

Ou, vous pouvez l'obtenir auprès de JNDI. Cela permet à votre administrateur système de modifier la connexion, le mot de passe, le nom d'utilisateur, etc. après le déploiement, en enregistrant une SessionFactory différente avec JNDI.

Vous devez consulter la documentation de votre serveur d'applications pour spécifier les ressources JNDI avec le serveur d'applications.

0

A l'intérieur de la méthode de buildSessionFactory initialize initialcontext.pass le nom SessionFactory JNDI dans la méthode de l'usine de session get (i.e. en recherche)