Как совершить транзакцию весной из пользовательского слушателя?
У меня следующая ситуация: в классе GigaspaceEventListener у меня есть метод, который вызывается после записи объекта SomeType в базу данных. Например:
public class GigaSpaceEventListener {
@Autowired
private JiniPlatformTransactionManager transactionManager;
//our handler method
public void onSomeObjectWrittenAction(WrittenObject obect) {
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
definition.setTimeout(10000000);
TransactionStatus status = transactionManager.getTransaction(definition);
LOGGER.info("Event with interactionId = [{}] has been received", event.getInteractionId());
//there is some logic, which results registering
//**new SomeListener**
}
}
Сейчас. Важно, что я не хочу совершать транзакции, пока новый слушатель не перехватит newEvent. И я пытаюсь совершить транзакцию в методе newListener
public class NewListener
@Autowired
private JiniPlatformTransactionManager transactionManager;
//this is the same status as in the first listener
private TransactionStatus status;
public void eventHanlder(NewEvent event) {
//some logic
transactionManager.commit(status);
}
В последней строке кода я всегда ловлю:
java.lang.IllegalStateException: Cannot deactivate transaction synchronization - not active
Как я могу это исправить? Может быть, мы сможем достичь нашей цели с помощью декларативного подхода? Я уверен, я что-то упустил или неправильно понял философию весенних транзакций. Заранее спасибо!