null

Hibernate 3.6 и offline-валидация конфигурационных файлов

При апгрейде одного проекта с древнего Hibernate 3.3 на чуть менее древний Hibernate 3.6 столкнулся со следующей забавной проблемой - на тестовой машине приложение работало нормально, а на продакшне - деплоилось, после чего валилось с кучей страшных ошибок в логе:

Ужос

Информативная часть стектрейса выглядела примерно так:

Caused by: org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
        at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1542)
        at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:1035)
        at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:64)
        at org.hibernate.cfg.Configuration.configure(Configuration.java:1476)
        at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1017)
        at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:64)
        at org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
        at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1011)
        at com.myproject.core.dataaccess.persistence.HibernateUtil.init(HibernateUtil.java:46)
        at com.myproject.core.dataaccess.DataAccessFactory.prepareHibernateUtil(DataAccessFactory.java:27)
        at com.myproject.core.dataaccess.DataAccessFactory.getHibernateUtil(DataAccessFactory.java:42)
        at com.myproject.core.dataaccess.managers.users.UsersGroupsManager.<clinit>(UsersGroupsManager.java:36)
        ... 225 more
Caused by: org.dom4j.DocumentException: Operation timed out Nested exception: Operation timed out
        at org.dom4j.io.SAXReader.read(SAXReader.java:484)
        at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1532)
        ... 236 more

Логично было предположить, что сообщение "Operation timed out" выдаётся при попытке "достучаться" до какого-то внешнего ресурас, доступ к которому с продакшна, естественно, закрыт. Т.к. всё это безобразие происходило при парсинге hibernate.cfg.xml, то не менее логично было предположить, что этот ресурс - DTD конфигурационного файла, которая "тянется" для его валидации. Анализ исходящих с сервера приложений запросов подтвердил это предположение.

Довольно продолжительное гугление так и не дало мне ответа на вопрос, возможно ли совсем прибить эту валидацию, зато выяснилось, что нужный нам файл DTD находится внутри jar с хибернейтом, т.е., вообще говоря, для доступа к нему лезть на какие-либо внешние серверы не обязательно - достаточно просто слегка поправить сам валидируемый xml-файл, заменив в нём одну строчку. В итоге вместо такого текста:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    ...
</hibernate-configuration>

Мы получим вот такой:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
    "hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    ...
</hibernate-configuration>

После этой замены всё заработало нормально.

Коротко о себе:

Работаю ведущим программистом в компании Tune IT и ассистентом кафедры Вычислительной техники в Университете ИТМО .

Занимаюсь проектами, связанными с разработкой разного рода веб-приложений (порталы, CRM-системы, системы электронного документооборота), а также, в рамках научной работы на кафедре, изучаю возможности применения семантического анализа в задачах САПР.

Ничего не найдено. n is 0