Jakarta ee 高可用性Java项目集群:如何序列化项目中使用的第三方框架中的类?

Jakarta ee 高可用性Java项目集群:如何序列化项目中使用的第三方框架中的类?,jakarta-ee,serialization,primefaces,glassfish-4,payara,Jakarta Ee,Serialization,Primefaces,Glassfish 4,Payara,我正在将我的项目分配给Payara服务器,该服务器具有群集功能,以实现高可用性。我的项目在JavaWeb中,它使用JSF框架和Primefaces以及一些扩展类,比如DataTable(org.Primefaces.component.DataTable.DataTable) 由于这个类没有实现可序列化的接口,我无法在服务器复制失败时成功,因为服务器要求序列化所有类 在这种情况下,我需要序列化所有类,但我无法控制第三方框架使用的类,我该怎么办?您需要修改引用不可序列化DataTable对象的Vi

我正在将我的项目分配给Payara服务器,该服务器具有群集功能,以实现高可用性。我的项目在JavaWeb中,它使用JSF框架和Primefaces以及一些扩展类,比如DataTable(org.Primefaces.component.DataTable.DataTable)

由于这个类没有实现可序列化的接口,我无法在服务器复制失败时成功,因为服务器要求序列化所有类


在这种情况下,我需要序列化所有类,但我无法控制第三方框架使用的类,我该怎么办?

您需要修改引用不可序列化DataTable对象的ViewScope bean的序列化。为此,您需要实现方法
writeObject(java.io.ObjectOutputStream out)
readObject(java.io.ObjectInputStream in)
,如中所述。您可以使用
out.defaultWriteObject
方法序列化所有可序列化字段,并仅为DataTable对象编写自定义序列化


<>但我会认真考虑通过使用“代码>瞬态标记字段来从序列化中删除DATABATE对象。DataTable是一个复杂的对象,如果包含在会话中,可能会浪费大量内存。最好只存储重新创建DataTable对象所需的数据。通常,您应该只保留DataTable对象的datamodel。

许多用户使用组件“绑定”到ViewScope bean,这应该避免。 请阅读:

组件类在设计上是不可序列化的


您始终可以通过findComponent API查找它们。

什么不能序列化?JSF视图状态?其中之一是从primefaces导入的DataTable属性。例如:导入org.primefaces.component.datatable.datatable;公共数据表dt;是的,这已经很清楚了,但是在哪里使用这个呢?在viewstate中,在您自己的mamaged bean中?为复制而序列化的“根”类是什么。如果它是您的bean,您可以将其标记为transient.Yes@Kukeltje,在我的带有ViewScope的ManagedBean上。已尝试将其设置为transient,但不起作用。是否使用transient尝试了自己的不可序列化类(甚至可能是具有不可序列化属性的类)?它起作用了吗?如果不是,那么这件事就不相关了,您可以搜索为什么transient不起作用。如果有,那就是有价值的信息。你是如何让它暂时化的:我真的认为你是对的,但根据评论,OP-alread y试图将其标记为暂时性的。我还发布了一些关于正确的
'transient'
(不是`@transient')的信息,但几乎一周都没有回复。。。我倾向于