Spring + EJB 3.1 CMT vs BMT transactions
У нас есть простой таймер EJB без состояния, который получает экземпляр службы spring, введенный в него. Весенняя служба имеет метод, отмеченный как транзакционный. Когда EJB использует управления контейнер тип сделки весеннее обслуживание вызов приводит к IllegalStateException: операция не разрешена. Поэтому мы установили тип управления транзакциями EJB BEAN, и все работает так, как рекламируется. Это нормально? Я был под впечатлением, что весной управление транзакциями присоединится к КРТ.
Пример EJB
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@Interceptors(SpringBeanAutowiringInterceptor.class
public class TimerService {
@Autowired
IHelloService helloService;
@Schedule(second="*/1", minute="*",hour="*", persistent=false)
public void doWork(){
helloService.hello();
}
}
Пример весенней службы
@Service
public class HelloService implements IHelloService {
@Transactional
public void hello(){
}
}
1 ответ:
Вероятно, проблема может быть исправлена, если вы бы определили уровень распространения для Spring transaction в качестве опор (по умолчанию требуется). Я не помню точное значение для настроек по умолчанию в EJB, но похоже, что метод EJB не запускает транзакцию (распространение по умолчанию), но "hello" пытается сделать это, и это вызывает конфликт.