Как совершить транзакцию весной из пользовательского слушателя?

У меня следующая ситуация: в классе 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

Как я могу это исправить? Может быть, мы сможем достичь нашей цели с помощью декларативного подхода? Я уверен, я что-то упустил или неправильно понял философию весенних транзакций. Заранее спасибо!

0 ответов

Другие вопросы по тегам