Hibernate Tools: ошибка разбора имени JNDI

Мы пытаемся перейти с Hibernate 3.6.7 на 4.1.2 и Hibernate Tools с 3.2.0 до 3.5.0

Мы создаем создание БД script с помощью Ant:

     <hibernatetool destdir="${target}">
        <jpaconfiguration persistenceunit="stdcmpOrderPersistenceUnit" propertyfile="@{propertyfile}"/>
        <classpath refid="@{classpathid}"/>
        <!-- the file name is relative to $destdir -->
        <hbm2ddl outputfilename="@{output}" format="true" export="false" drop="false"/>
     </hibernatetool>

Наша единица персистентности выглядит следующим образом:

<persistence-unit name="stdcmpOrderPersistenceUnit" transaction-type="JTA">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/lakshmi_stdcmp</jta-data-source>
    <mapping-file>META-INF/stdcmpOrderNamedQueries.xml</mapping-file>

    <class>ch.ethz.id.wai.lakshmi.stdcmp.persistency.PersistentOrder</class>

    <exclude-unlisted-classes>true</exclude-unlisted-classes>

    <properties>
        <property name="hibernate.show_sql" value="false"/>
        <property name="hibernate.format_sql" value="false"/>
    </properties>

</persistence-unit>

После обновления мы получим следующую ошибку:

[hibernatetool] org.hibernate.service.jndi.JndiException: Error parsing JNDI name [jdbc/lakshmi_stdcmp]
[hibernatetool] 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

Почему Hibernate пытается разрешить имя JNDI, поскольку доступна вся информация о PersistenceUnit? У нас не было проблем со старой версией.

И в любом случае, как мы можем указать NamingFactory? (и какой?)

Ответы

Ответ 1

Проблема заключается в вашем инструменте спящего режима, вы настроили инструмент hibernate для использования единицы непрерывности, который имеет jta-источник данных, настроенный через JNDI. Чтобы задача ant была связана с JNDI, ей требуется именовать URL-адрес factory и провайдера. Используйте класс имен factory вашего сервера приложений, на котором настроен источник данных.

Надеюсь, что это поможет.

Ответ 2

У меня была похожая проблема, в частности вызвавшая "Ошибка синтаксического анализа имени JNDI", и это было легко устранить, просто удалив пустой атрибут name из тега session-factory.

Мой hibernate.cfg.xml имел

<session-factory name="">

Это было сгенерировано автоматически, поэтому я просто удалил name attrib.

Это исправление было найдено здесь: https://forum.hibernate.org/viewtopic.php?f=1&t=1014760