Spring + EJB 3.1 CMT против транзакций BMT - PullRequest
2 голосов
/ 14 июня 2011

У нас есть простой таймер EJB без сохранения состояния, который получает экземпляр службы Spring, внедренный в него. У службы Spring есть метод, помеченный как транзакционный. Когда EJB использует тип управления транзакциями CONTAINER, вызов службы Spring приводит к IllegalStateException: операция не разрешена. Поэтому мы установили тип управления транзакциями EJB как BEAN, и все работает так, как объявлено. Это нормально? У меня сложилось впечатление, что весеннее управление транзакциями присоединится к CMT.

пример 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 Ответ

0 голосов
/ 25 июля 2011

Вероятно, проблему можно решить, если вы определите уровень распространения для транзакции Spring как SUPPORTS (по умолчанию ТРЕБУЕТСЯ).Я не помню точное значение для настроек по умолчанию в EJB, но кажется, что метод EJB не запускает транзакцию (распространение - DEFAULT), но попытка «hello» делает это, и это вызывает конфликт.

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