Getting SEVERE: Could not locate SessionFactory in JNDI while getting sessionfactory

Я использую Hibernate в качестве постоянного слоя для связи с базой данных. Я использовал плагин maven hbm2java для генерации dao, java, *hbm.xml и hibernate.cfg.xml. до этого времени плагины работают нормально.

Но когда я пытаюсь связаться с БД, это дает следующее исключение.

Aug 30, 2012 1:45:46 PM org.hbm2dao.AssemblyHome getSessionFactory
SEVERE: Could not locate SessionFactory in JNDI
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:     java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at org.hbm2dao.AssemblyHome.getSessionFactory(AssemblyHome.java:29)
at org.hbm2dao.AssemblyHome.<init>(AssemblyHome.java:24)
at com.myhadoop.app.App.main(App.java:22)
java.lang.IllegalStateException: Could not locate SessionFactory in JNDI
at org.hbm2dao.AssemblyHome.getSessionFactory(AssemblyHome.java:33)
at org.hbm2dao.AssemblyHome.<init>(AssemblyHome.java:24)
at com.myhadoop.app.App.main(App.java:22)
Exception in thread "main" java.lang.NullPointerException
at com.myhadoop.app.App.main(App.java:32)

по умолчанию hibernate3:hbm2cfgxml создает файл hibernate.cfg.xml с именем фабричной сессии в качестве SessionFactory. так же, как следующий.

<session-factory name="SessionFactory">

Плагин генерирует следующий код для получения фабрики сессий.

private final SessionFactory sessionFactory = getSessionFactory();

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");
    }
}

Я обнаружил похожие проблемы с использованием плагина eclipse Hibernate - не удалось найти фабрику сессий в JNDI.

Однако невозможно изменить 400+ классов, сгенерированных плагином, чтобы получить фабрику сессий из *Home.java.

Как избавиться от этой проблемы с плагином hibernate, не меняя 400+ классов?

Я не хочу использовать какой-либо веб-сервер / сервер приложений, это мое автономное приложение.

1 ответ

Решение

Используя то, что сгенерировано getSessionFactory() метод будет работать, только если вы настроили свою среду так, чтобы InitialContext могу найти свой hibernate.cfg.xml файл, и это звучит как не может.

Вы можете решить эту проблему, настроив InitialContext и ваше окружение правильно согласно InitialContext Javadocs. В качестве альтернативы вы можете полностью отключить JNDI, изменив getSessionFactory метод просто создать Configuration и сообщая, где находятся файлы сопоставления.

Другие вопросы по тегам