JSF - управляемый EJB-компонент Session-scoped не имеет зависимостей, повторно вводимых при десериализации сеанса
Я не уверен, что то, что я делаю, неправильно, или я просто пропустил где-то аннотацию или элемент конфигурации. Вот ситуация:
У меня есть приложение JSF с сессионным компонентом с именемSessionData
, Этот бин имеет ссылку на бин в области приложения (типаApplicationData
) вводится в него во время создания. Это работает нормально, когда сессия создается впервые. Внедрение зависимостей выполняется с<managed-bean>
элементы вfaces-config.xml
файл, как показано здесь:
<managed-bean>
<managed-bean-name>sessionData</managed-bean-name>
<managed-bean-class>my.package.SessionData</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>applicationData</property-name>
<property-class>my.package.ApplicationData</property-class>
<value>#{applicationData}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>applicationData</managed-bean-name>
<managed-bean-class>my.package.ApplicationData</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
Потому что не имеет смысла иметь мойSessionData
объект включает в себяApplicationData
объект, когда он сериализован, я пометилApplicationData
ссылка как переходный процесс в моемSessionData
объект:
transient private ApplicationData applicationData;
Все хорошо, пока веб-приложение не остановлено (в моем контейнере Tomcat 6.x) и сеансы не сериализуются. Когда я перезапускаю приложение и сеансы десериализуются, моя ссылка наApplicationData
не повторно вводится JSF. Я знаю, что десериализация должна оставить переходные поля без значения.Есть ли способ сообщить JSF, что этот объект в области сеанса требует, чтобы его зависимости были снова установлены после десериализации?
Я использую MyFaces JSF 1.2 и Tomcat 6.0.26 в качестве контейнера веб-приложения.