Yaptığım şeyin yanlış olup olmadığından emin değilim, ya da bir açıklama ya da yapılandırma öğesinin bir noktasını kaçırdım.JSF - Oturumla yönetilen yönetilen fasulyenin, oturumun kaldırılması sırasında yeniden enjekte edilen bağımlılıkları yok
Ben SessionData
adında bir oturum kapsamlı fasulye ile bir JSF uygulama var: İşte durum bu. Bu fasülyenin, yaratılış süresinde enjekte edilmiş bir uygulama-kapsamlı fasulye referansı (tip ApplicationData
) vardır. Bu, oturum ilk oluşturulduğunda işe yarıyor. burada gösterildiği gibi bağımlılık enjeksiyon faces-config.xml
dosyada <managed-bean>
elemanları ile yapılır: bu tefrika olduğunda benim SessionData
nesne olması mantıklı değil çünkü
<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>
ApplicationData
nesneyi içerir, ben ApplicationData
referansı işaretlediğiniz benim SessionData
nesnesindeki geçici olarak: web uygulaması (benim Tomcat 6.x kapta) durdurulur ve oturumlar serileştirildi kadar
transient private ApplicationData applicationData;
Tüm iyidir. Uygulamayı yeniden başlattığımda ve oturumlar seri hale getirildiğinde, ApplicationData
numaralı referansa JSF tarafından yeniden enjekte edilmiyor. Deserialization'un geçici alanları değersiz bırakması gerektiğini biliyorum. JSF'ye bu oturum kapsamındaki nesnenin seri hale getirilmesinden sonra bağımlılıklarının yeniden ayarlanmasını gerektirdiğini bildirmenin bir yolu var mı?
benim web uygulama kapsayıcı olarak MyFaces JSF 1.2 ve Tomcat 6.0.26 kullanıyorum.
Bir readObject() yöntemini sağladığım ve FacesContext kullanarak seri hale getirme sırasında orada ApplicationData nesnesini el ile ayarlamanız önerildi. FacesContext sadece bir talep ömrü boyunca kullanılabilir beri işe yaramaz sanmıyorum. Uygulama başlangıcında serileştirme gerçekleşiyor. –
doğru, bu yüzden cevabımı sildim. Daha karmaşık görünüyor (bu nedenle soru için +1) – Bozho