Проблемы с использованием плагина eclipse Hibernate - не удалось найти sessionfactory в JNDI

Я использую возможности обратного проектирования, встроенные в плагин eclipse hibernate, для создания файлов dao и hbm.xml для каждой таблицы.

Он делает это довольно хорошо, но когда я пытаюсь использовать сгенерированные объекты, я получаю сообщение «Не удалось найти SessionFactory в ошибке JNDI».

Я видел сообщение, в котором предполагалось, что это происходит, когда вы называете свою SessionFactory в файле hibernate.cfg.xml, поэтому я удалил тег имени, и я все еще получаю ту же ошибку.

Это мой 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>

Это сгенерированный код, который вызывает исключение

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

Я мало что знаю о JNDI, но я думаю, что это своего рода эквивалент поиска в файле конфигурации. Я не хочу использовать JNDI, но я не знаю, как этого добиться с помощью плагина eclipse.

Изменение сгенерированного кода на самом деле мне не поможет, потому что мне нужно будет продолжать его регенерировать в некоторых моментах, поэтому, если кто-нибудь может объяснить, почему/как это происходит и что я могу с этим поделать, я был бы признателен.

Спасибо

Джонатан


person mancmanomyst    schedule 25.10.2009    source источник
comment
Я также сталкиваюсь с той же проблемой. Вы избавились от этой проблемы? если да, то не могли бы вы сообщить нам решение....   -  person Prasad S Deshpande    schedule 29.08.2012


Ответы (2)


Вы можете указать все соединения, пароль, имя пользователя и т. д. непосредственно в файле конфигурации гибернации, а затем загрузить с помощью кода, например:

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

Или вы можете получить его от JNDI. Это позволяет вашему системному администратору изменить соединение, пароль, имя пользователя и т. д. после развертывания путем регистрации другой SessionFactory с помощью JNDI.

Вам нужно будет проконсультироваться с документацией вашего сервера приложений о том, как указать ресурсы JNDI с сервером приложений.

person toolkit    schedule 25.10.2009

Внутри метода buildsessionfactory инициализируйте initialcontext.pass имя jndi sessionfactory в методе get session factory (т.е. в поиске)

person karan    schedule 13.11.2009