2012-01-08 2 views
1

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

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

c :> asadmin развернуть t2-0.1.war

удаленного сбой: произошла ошибка во время развертывания: исключение при загрузки приложения: java.lang.IllegalStateException: ContainerBase.addChild: старт: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Ошибка создание bean-компонента с именем «transactionManagerPostProcessor»: Инициализация компонента не выполнена; вложенное исключение: org.springframework.beans.factory.BeanCreationException: Ошибка создание bean-компонента с именем «transactionManager»: не удается разрешить ссылку bean 'sessionFactory' при настройке bean-свойства 'sessionFactory'; вложенной исключение org.springframework.beans.factory.BeanCreationException: Ошибка создании компонента с именем «SessionFactory»: Не удается разрешить ссылку на боб «hibernateProperties» при установке свойства компонента «hibernateProperties»; вложенное исключение org.springframework.beans.factory.BeanCreationException: Errorcreating боб с именем «hibernateProperties»: Не удается разрешить ссылку на bean'dialectDetector»при установке свойства компонента„свойства“с клавиши [hibernate.dialect]; вложенное исключение: org.springframework.beans.factory.BeanCreationException: Ошибка создание bean-компонента с именем 'dialectDetector': вызов init methodfailed; вложенное исключение: org.springframework.jdbc.support.MetaDataAccessException: ошибка при извлечение DatabaseMetaData; вложенное исключение: org.apache.commons.dbcp.SQLNestedException: не удается создать PoolableConnectionFactory (база данных может быть уже использована: «Заблокировано другим процессом». Возможные решения: закрыть другое соединение (ы); использовать режим сервера; SQL заявление: null/1349c415392c6dc06a3e7086cd1bb075c7881fc0650 [90020-147]). Дополнительную информацию см. На странице server.log.

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

+0

Можете ли вы, пожалуйста, разместить конфигурацию поставщика стационарной рыбы? Обычно приложение обращается к db поверх api не только напрямую - я думаю, проблема здесь где-то здесь. Конфигурация вашего Grails DB также будет очень полезна. –

ответ

0

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

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

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

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

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

Смежные вопросы