Выполнить сложную логику в конце транзакции - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть приложение JEE с расширенными (JPA) сущностями (использующим EclipseLink, если это имеет значение). У моей сущности есть несколько методов, которые изменяют ее поля. Некоторые из этих изменений требуют сложного и трудоемкого процесса проверки, который может обновлять и удалять несколько связанных объектов и может потребовать нескольких вызовов удаленной службы. Теперь пользователь моей сущности может вызывать несколько модифицирующих методов последовательно, поэтому я хочу оптимизировать процесс так, чтобы этот процесс проверки вызывался только один раз в конце транзакции, а не вызывал его немедленно для каждого соответствующего вызова метода. Кроме того, я хочу, чтобы это было невидимым для вызывающих, чтобы они не знали об этой функции и вручную вызывали проверку, как только они закончили.

Так что я хотел бы сделатьсостоит в том, чтобы собрать информацию о том, какие части объекта изменились в переходных полях в классе объекта, и каким-то образом запустить процесс проверки автоматически в самое позднее возможное время. Я играл с методами @PreUpdate и @PrePersist, но они вызываются во время каждого сброса, а не только в конце транзакции. Я пробовал PreDestroy, но, очевидно, уже слишком поздно, чтобы сервисные звонки все еще работали. Я также пытался использовать событие CDI с while = BEFORE_COMPLETION, но это вызывало InjectionFailedExceptions, когда логика проверки пыталась материализовать некоторые связанные объекты, поэтому, очевидно, мой контекст внедрения недоступен в этом состоянии.

Есть ли какие-либо другиеинструменты или методы, которые могут достичь этой цели? Или, может быть, один из вышеперечисленных вариантов должен работать, и я что-то не так делаю?

...