Не могу найти SessionFactory в Hibernate на моем сервере приложений Glassfish - PullRequest
1 голос
/ 24 мая 2011

Я просто играю с реализацией Hibernate в качестве поставщика персистентности на сервере приложений Glassfish. Я уже настроил источник данных JNDI, пул соединений и т. Д. Моя конфигурация Hibernate выглядит следующим образом:

        <?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.connection.datasource">jdbc/myDatasource</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.factory_class">net.sf.hibernate.transaction.JTATransactionFactory</property>
        <property name="hibernate.session_factory_name">hibernateSessionFactory</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">validate</property>
        <property name="hibernate.current_session_context_class">thread</property>

        <mapping class="org.me.jsf.entities.Node" />
      </session-factory>    
</hibernate-configuration>

Когда я пытаюсь использовать Session Factory следующим образом:

    try {  
        sessionFactory = (SessionFactory) new InitialContext()
                .lookup("hibernateSessionFactory");  
    } catch (Throwable ex) {  
        throw new ExceptionInInitializerError(ex);      
    }

Я получаю исключение «ExceptionInInitializerError», вызванное, согласно журналам, «Сбой поиска для« hibernateSessionFactory »». Но когда я использую этот код:

    try {    
         AnnotationConfiguration cfg = new AnnotationConfiguration();
         cfg.configure();
         sessionFactory = cfg.buildSessionFactory();
    } catch (Throwable ex) {  
         throw new ExceptionInInitializerError(ex);  
    }

... все идет хорошо.

Что я здесь не так понял? Я даже пытался создать запись для управляемого объекта bean hibernateSessionFactory для соответствующего класса в Face-config.xml, но все равно не повезло ...

1 Ответ

1 голос
/ 24 мая 2011

Наличие hibernate.session_factory_name означает, что фабрика сеансов будет связана с JNDI при создании, но вы все равно должны выполнить код, который создает ее во время запуска. Из документации Hibernate :

Hibernate автоматически поместит SessionFactory в JNDI после вызова cfg.buildSessionFactory (). Это означает, что у вас будет этот вызов в некотором коде запуска или служебном классе в вашем приложении, если вы не используете развертывание JMX с HibernateService (это будет обсуждаться позже более подробно).

...