Ошибка при запуске нескольких приложений Grails под Glassfish - PullRequest
1 голос
/ 08 января 2012

Я написал два маленьких приложения hello world с использованием Grails (V2.0.0.RC1) и хочу развернуть их с помощью Glassfish (v3.1).

Если я разверну одно из всех приложений на Glassfish, приложение будет работать нормально, и я смогу получить к нему доступ либо по http://t1-0.1, либо по http://t2-0.1. Однако если вместо этого я разверну одно из приложений, а затем разверну другое (чтобы оба они были доступны людям, посещающим мой веб-сайт), то вторая команда развертывания выдает мне следующее сообщение об ошибке:

c:> asadmin deploy t2-0.1.war

удаленный сбой: во время развертывания произошла ошибка: исключение при загрузка приложения: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: ошибка создание bean-компонента с именемactionManagerPostProcessor: Не удалось инициализировать бин; вложенное исключение org.springframework.beans.factory.BeanCreationException: ошибка создание компонента с именемactionManager: не удается разрешить ссылку для bean-компонента sessionFactory при установке свойства bean-компонента sessionFactory; вложенное исключение org.springframework.beans.factory.BeanCreationException: ошибка создание компонента с именем 'sessionFactory': невозможно разрешить ссылку на bean-компонент 'hibernateProperties' при установке свойства bean-компонента 'hibernateProperties'; вложенное исключение org.springframework.beans.factory.BeanCreationException: создание ошибки bean-компонент с именем 'hibernateProperties': не удается разрешить ссылку на bean'dialectDetector 'при установке свойства bean' properties 'с помощью ключ [hibernate.dialect]; вложенное исключение org.springframework.beans.factory.BeanCreationException: ошибка создание компонента с именем 'dialectDetector': вызов init methodfailed; вложенное исключение org.springframework.jdbc.support.MetaDataAccessException: ошибка во время извлечение DatabaseMetaData; вложенное исключение org.apache.commons.dbcp.SQLNestedException: невозможно создать PoolableConnectionFactory (база данных может уже использоваться: "заблокировано другой процесс ". Возможные решения: закрыть все другие соединения; использовать режим сервера; SQL утверждение: нуль / 1349c415392c6dc06a3e7086cd1bb075c7881fc0650 [90020-147]). Пожалуйста, смотрите server.log для более подробной информации.

Что здесь происходит? Я предполагаю, что в Grails и его использовании Hibernate есть что-то особенное (поскольку в противном случае Glassfish не будет жаловаться на то, что мне разрешено иметь два приложения, которые работают вместе). Но, может быть, я неправильно понимаю сообщение об ошибке? У кого-нибудь есть рекомендации?

1 Ответ

0 голосов
/ 14 января 2012

Оказывается, проблема заключается в неправильном использовании конфигурации по умолчанию, предоставленной Grails. В файле DataSource.groovy каждому приложению присваивается указатель на базу данных, и по умолчанию этот указатель выглядит так:

development {
    dataSource {
        dbCreate = "create-drop" 
        url = "jdbc:h2:mem:devDb;MVCC=TRUE"
    }
}

Проблема заключается в том, что нескольким приложениям будут присвоены одинаковые конфигурации, а базовые ссылки на базы данных h2 между несколькими приложениями конфликтуют. Поэтому решение для пары примеров приложений "Hello World" состоит в том, чтобы изменить одну из этих ссылок. Например:

development {
    dataSource {
        dbCreate = "create-drop" 
        url = "jdbc:h2:mem:devDb2;MVCC=TRUE"
    }
}

Конечно, в рабочем коде вы, скорее всего, в конечном итоге будете ссылаться на реальную базу данных, и тогда ваши приложения будут естественным образом взаимодействовать в своих ссылках на базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...