1

这是场景:

目前我们正致力于在非集群环境中运行应用程序。但是现在我们需要一个能够部署在集群 weblogic 环境中的现有应用程序。

这是一个基于 JSF 的应用程序,包含许多托管 bean。现在的问题是我们还没有设置任何集群环境,并且将在 3 周内到达。

在一个weblogic集群中,相信我们一定会遇到这个问题

java.io.NotSerializableException: 

我的问题是,有没有办法找出我现有的类中哪些在集群环境中会失败,而无需将其部署在集群环境中。

我不确定是否有办法测试一个类的所有成员变量是否都是可序列化的,这样它就不会在集群环境中失败。

4

1 回答 1

0

使用 Mojarra 时,您可以使用以下上下文参数告诉它始终序列化 JSF 状态:

<context-param>
    <param-name>com.sun.faces.serializeServerState</param-name>
    <param-value>true</param-value>
</context-param>

(MyFaces 等效项是org.apache.myfaces.SERIALIZE_STATE_IN_SESSION,但默认为true已经)

在测试期间,您将获得NotSerializableException未标记的实例Serializable。通常,需要可序列化的是视图和会话范围的 bean 及其所有属性。

请注意,标记属性transient不是正确的解决方案,它会null在反序列化后(恢复视图后)保留,这是错误的。然而,在某些情况下没有其他方法(例如 3rd 方 API),在这种情况下,您最好考虑以下解决方案之一:

至于业务服务,只要使用EJB或CDI,就不需要将业务类标记为可序列化。无论如何,它们被注入为可序列化的代理。

于 2013-09-09T10:39:49.890 回答