У нас есть приложение с плагином, который содержит сервис:
public class TaskService {
public void doSomething( Task task ) {
// do something with task
task.save();
}
}
Это отлично работает.
Для нашего «специального» клиента с его особыми требованиями у нас есть второе приложение, которое содержит плагин из первого приложения и еще один плагин со специальным сервисом для этого клиента, который расширяет исходный сервис и переопределяет некоторые методы:
public class SpecialTaskService extends TaskService{
@Override
public void doSomething( Task task ) {
// do something special with task
task.save();
}
}
В каждом месте во втором приложении, где внедряется taskService, мы хотим иметь SpecialTaskService сейчас (также в плагине из первого приложения). Итак, мы добавили специальный ресурс к resources.groovy под grails-app / conf / spring:
beans = {
taskService( SpecialTaskService )
}
Но теперь мы получаем HibernateException, когда мы вызываем "task.save ()" в специальном сервисе:
org.hibernate.HibernateException: Сессия Hibernate не привязана к потоку, и конфигурация не позволяет создавать нетранзакционный сеанс здесь
Мы знаем, что могли бы внедрить SessionFactory в SpecialService, но когда мы вызываем sessionFactory.currentSession, мы получаем то же исключение.
Исключение также возникает, когда мы настраиваем службу в resources.groovy, которая не расширяет другую.
Есть ли способ сделать специальный сервис своего рода "hibernateSessionAware", чтобы мы могли вызывать save () и merge () для доменных объектов?