Использование Hibernate внутри веб-сервиса Glassfish 3 - PullRequest
1 голос
/ 19 августа 2010

У меня есть Java-приложение, которое использует Hibernate для постоянного хранения. Сейчас я пытаюсь представить часть этого приложения в виде веб-службы, развернутой на Glassfish 3.0.1.

Код, реализующий службу, находится в файле JAR, который развертывается вместе с файлом WAR в Glassfish. У служебного кода в WAR нет проблем с доступом к классам, которые используют Hibernate в файле JAR.

Однако, когда я пытаюсь вызвать службу, возникает исключение, сообщающее, что Hibernate не может найти файл hibernate.cfg.xml. Для жизни я не могу понять, где файл .cfg должен находиться в JAR, WAR или в Glassfish, чтобы его можно было найти на пути к классам.

Я пытался поместить его в каталог META-INF в файле WAR (который на самом деле является «мета-inf», когда я проверяю WAR) и в тот же каталог в JAR. Я также попытался создать каталог META-INF в нескольких различных каталогах Glassfish, но все безрезультатно.

При разработке этого сервиса в Eclipse мне пришлось немало поразмыслить, куда поместить файл .cfg, чтобы поместить его в путь к классам. Кажется, это проблема при развертывании его в GF.

Может кто-нибудь сказать мне, куда должен идти файл .cfg, чтобы к нему можно было получить доступ при развертывании этой службы в GF?

Спасибо

Chris

1 Ответ

1 голос
/ 19 августа 2010

Если вы используете метод no-arg Configure#configure(), тогда ожидается, что файл hibernate.cfg.xml будет иметь корень пути к классам.

Вот соответствующий фрагмент из o.h.c.Configuration.java:

/**
 * Use the mappings and properties specified in an application
 * resource named <tt>hibernate.cfg.xml</tt>.
 */
public Configuration configure() throws HibernateException {
    configure( "/hibernate.cfg.xml" );
    return this;
}

/**
 * Use the mappings and properties specified in the given application
 * resource. The format of the resource is defined in
 * <tt>hibernate-configuration-3.0.dtd</tt>.
 * <p/>
 * The resource is found via <tt>getConfigurationInputStream(resource)</tt>.
 */
public Configuration configure(String resource) throws HibernateException {
    log.info( "configuring from resource: " + resource );
    InputStream stream = getConfigurationInputStream( resource );
    return doConfigure( stream, resource );
}

Это фактически задокументировано в справочном руководстве по Hibernate Core:

3,7. XML-файл конфигурации

Альтернативный подход к Конфигурация должна указывать полный Конфигурация в файле с именем hibernate.cfg.xml. Этот файл может быть используется в качестве замены для hibernate.properties файл или, если оба присутствуют, чтобы переопределить свойства.

Файл конфигурации XML по умолчанию должен находиться в корне ваш класпат. (...)

...