О транзакциях и прослушивателях событий - PullRequest
0 голосов
/ 31 января 2012

Дайте мне посмотреть, правильно ли я это понимаю.Обычно мы должны стремиться поместить все операции, которые принадлежат одной «единице работы», в одну транзакцию, верно?Это помогает вернуть состояние БД в случае исключения где-то в цепочке операций.

Однако, в моем конкретном случае, у меня есть старый сервис, который не очень легко подключить к моему текущему коду.Поэтому я должен держать его работающим отдельно, и дать ему права на ту же базу данных, где мое текущее приложение хранит данные.

Проблема возникает, когда мне нужно вставить новый элемент в БД.Тогда я должен позвонить в службу.Если я сделаю это в рамках одной транзакции, служба начнет поиск записи в БД, прежде чем транзакция будет фактически зафиксирована.Таким образом, я начал использовать прослушиватели событий, а именно PostInsertEventListener и PostDeleteEventListener.

Теперь все работает нормально, поскольку транзакция фиксируется заранее, но это полностью нарушает мою архитектуру кода.Я построил серию сервисов, которые внедряются друг в друга, и теперь я должен объявить эти два класса слушателей.Думаю, лучшее, что я могу сделать, - это заставить мою службу координаторов реализовать эти два интерфейса слушателя, но таким образом я полностью связываю ее с Hibernate, верно?

В общем, действительно ли использование этих слушателей действительно правильнодля таких случаев, как мой?

1 Ответ

2 голосов
/ 31 января 2012

Я не вижу, как вы пришли от "Мне нужно зафиксировать транзакцию перед вызовом внешней службы" - "Я решил использовать слушатели" .

Почему у вас просто нет следующего кода:

public void someNonTransactionalMethod() {
    someTransactionalService.insertThingsInDatabase();
    externalService.foo();
}

или

public void someMethod() {
    someTransactionalService.insertThingsInDatabase();
    externalService.foo();
}

, где insertThingsInDatabase использует тип распространения REQUIRES_NEW?

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