2014-11-04 3 views
0

Я использую плагин CXF версии 2.0.1 и имею простое использование GORM в SOAP-сервисе. Когда я запускаю тест в службе, он выдает исключение, говоря, что он не может инициализировать прокси-сервер, потому что сеанса не было. Согласно некоторым запросам, которые я сделал, это проблема спящего режима, которую я предполагаю, означает, что GORM не была правильно инициализирована. Может ли кто-нибудь дать мне указатель на то, как инициализировать GORM вручную в классе конечной точки?Плагин Grails CXF и GORM

ответ

1

Вы используете для работы с гибернацией в действиях контроллера (или оттуда называемых там методов), и там всегда есть активный сеанс Hibernate, потому что Grails использует шаблон Open Session in View, открывая сеанс в начале запроса, привязывая его в ThreadLocal, чтобы его можно было легко получить, а затем очистить и закрыть сеанс в конце запроса. Некоторые плагины также делают это, например, плагин Quartz использует прослушиватели запуска/остановки работы, чтобы сделать то же самое, чтобы вы могли удобно использовать GORM там, как в контроллере.

Самый простой способ гарантировать, что сеанс открыт в течение всего периода кода, - использовать статический метод withTransaction для любого класса домена. Он запускает транзакцию, поэтому, если вы делаете обновления базы данных, вы также выиграете от этого, но даже если вы только читаете, это путь, потому что сеанс будет открыт, и вы сможете работать с лениво загруженные 1-много и много-много ссылок.

Сделки/сеанс не имеет ничего общего с классом домена, поэтому выбрать случайную одно и использовать его:

User.withTransaction { 

    def games = Game.findAllByFooAndBar(foo, bar) 
    games.each { ... } 
    ... 
} 
Смежные вопросы