Spring Stateful Bean эквивалент - методы обратного вызова синхронизации
Я хочу перенести сессионный компонент с состоянием (EJB 2.1) в компонент Spring. И Stateful Bean, и Spring Bean должны работать на сервере приложений Websphere с помощью Websphere Transaction Manager (WebsphereUowTransactionManager
интерфейс позволяет Spring получить к нему доступ).
Старый Stateful Session Bean реализует SessionSynchronization
интерфейс для использования методов обратного вызова (в частности, afterCompletion
Перезвоните).
Я попытался использовать область действия прототипа для моего bean-компонента, поскольку, насколько мне известно, он эмулирует bean-компонент Stateful и реализует интерфейс TransansactionSynchronization, предлагаемый Spring.
Как я позже понял, эти обратные вызовы не могут быть вызваны, потому что "В отличие от других областей, Spring не управляет полным жизненным циклом компонента-прототипа: контейнер создает, настраивает и иным образом собирает объект-прототип и передает его клиент, без дальнейшей записи этого экземпляра прототипа " http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html
Решением может быть область действия сеанса, но компонент Session вызывается из управляемого сообщениями Pojo, которое потребляет сообщения из очереди JMS.
РЕДАКТИРОВАТЬ: старый сессионный компонент является лишь "оберткой" для чистого Java-класса, который реализует различную запись в очереди и т. Д. Таким образом, он берет существующий класс и делает из него компонент, реализуя SessionSynchronization.
public class XXXMessageSenderBean extends MessageSenderBean implements javax.ejb.SessionBean, SessionSynchronization { }
Моя идея состояла в том, чтобы взять тот же класс Java и создать Spring Bean (классы интерфейса и реализации):
public interface XXXMessageSenderPojo extends TransactionSynchronization
public class XXXMessageSenderPojoImpl extends MessageSenderBean implements XXXMessageSenderPojo