相关疑难解决方法(0)

在序列化方面,Spring会话范围的bean(控制器)和对服务的引用

  • 标准案例 - 你有一个控制器(@Controller)@Scope("session").
  • 例如,通常期望放入会话中的类实现,Serializable以便在服务器重新启动时可以物理存储它们
  • 如果控制器实现Serializable,这意味着它所引用的所有服务(其他spring bean)也将被序列化.它们通常是代理,引用了交易管理器,实体管理器工厂等.
  • 某些服务甚至控制器ApplicationContext通过实现来保持对引用的引用并不是不太可能ApplicationContextAware,因此这可以有效地意味着整个上下文被序列化.并且鉴于它拥有许多连接 - 即不能通过思想序列化的东西,它将在腐败状态下恢复.

到目前为止,我大多忽略了这些问题.最近我想到声明我所有的spring依赖项transientreadResolve()通过静态实用程序类将它们重新WebApplicationContextUtils导入,并将请求/ ServletContext保存在ThreadLocal.这很乏味,但它保证了,当反序列化对象时,它的依赖关系将与当前应用程序上下文"保持同步" .

是否有任何公认的做法,或任何序列化春季背景部分的指南.

请注意,在JSF中,托管bean(~controller)是有状态的(与基于动作的Web框架不同).所以也许我的问题更多的是JSF,而不是spring-mvc.

java jsf serialization spring servlets

43
推荐指数
3
解决办法
3万
查看次数

如何在反序列化时重新注入瞬态@ManagedProperty?

我正在使用Spring和JSF 2来创建Web应用程序.业务对象保存在Spring容器中,我使用@ManagedProperty将它们注入Managed Beans,如下所示:

@ManagedBean
@ViewScoped
public class SomeMB implements Serializable {
    private static final long serialVersionUID = 1L;

    @Getter @Setter
    @ManagedProperty("#{someService}")
    private SomeService someService;
    // ...
Run Code Online (Sandbox Code Playgroud)

问题是,我一直在NotSerializableException从Spring(ServiceLocatorFactoryBean)获取一个类,它正被SomeService bean使用.

如果我这样做transient,我怎样才能在反序列化后重新注入它?

或者,解决这个问题的其他方法是什么?

我一直在阅读类似的其他几个问题,但找不到任何与此问题完全相关的问题.

spring dependency-injection jsf-2

7
推荐指数
1
解决办法
3027
查看次数

服务器重启后的 JSF 问题:找不到保存的视图状态

继续解决这个问题,我已经更换了钻嘴鱼科通过的MyFaces和升级JDK,当我继续工作形式的服务器重新启动后,显示以下错误:

发生错误:

/food.xhtmlNo saved view state could be found for the view identifier: /food.xhtml

Caused by:
javax.faces.application.ViewExpiredException - /food.xhtmlNo saved view state could be found for the view identifier: /food.xhtml
Run Code Online (Sandbox Code Playgroud)

控制台

SEVERE: Exception loading sessions from persistent storage
java.lang.IllegalStateException: unread block data
    at java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2376)
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

javax.faces.application.ViewExpiredException: /food.xhtmlNo saved view state could be found for the view identifier: /food.xhtml
    at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:128)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at …
Run Code Online (Sandbox Code Playgroud)

java jsf myfaces

3
推荐指数
1
解决办法
2万
查看次数