识别非集群环境中的序列化问题

Identify serialization issues in non-clustered environment

我有一个 JSF-Spring 集成应用程序。该应用程序在我的非集群环境中运行良好。在集群 [wildfly 8.0.0] 环境中部署应用程序时,我遇到了有关序列化的不同问题。一些示例是 DTO classes 未实现可序列化,尝试序列化我不想序列化的记录器 class 等

部署在集群环境中的应用程序在我的 web.xml 中有 < distributable /> 标记,因此它尝试跨节点进行会话复制,但在不可序列化时失败案例。

并非所有开发人员都遵循这些行中的准则,这导致了其中一些情况。

所以我的问题是在我的测试服务器 [wildfly 8.0.0] 中查看所有这些序列化问题的最佳选择是什么,这是一个非集群环境。

为了更清晰,添加一个异常详细信息:

Caused by: java.lang.RuntimeException: Failure to marshal argument(s)
at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.marshallCall(CommandAwareRpcDispatcher.java:333)
at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.processSingleCall(CommandAwareRpcDispatcher.java:352)
at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.invokeRemoteCommand(CommandAwareRpcDispatcher.java:167)
... 76 more
Caused by: org.infinispan.commons.marshall.NotSerializableException: com.org.account.service.AccountExpServiceImpl
Caused by: an exception which occurred:
in field accountExpService
in field m
in object java.util.HashMap@85b67fbe
in object org.jboss.as.clustering.marshalling.SimpleMarshalledValue@85b67fbe
in object org.infinispan.commands.write.ReplaceCommand@ec0c12ad
in object org.infinispan.commands.tx.PrepareCommand@ce32eb5a

我们使用以下实用程序来检查 Infinispan 是否可以序列化给定对象:

org.infinispan.manager.DefaultCacheManager.getCacheManagerConfiguration().serialization().marshaller().isMarshallable(objectToCheck);

这实际上是我们测试的一部分。

您可以在本地使用 web.xml without <distributable/> 为 运行 应用程序使用不同的配置文件,一个用于集群准备就绪的部署和因此 带有 <distributable/> 标签。如果您使用 Maven 进行构建,则需要查看 war 插件和配置文件。参见 this answer for providing profile dependant web.xml

但是这个解决方案在 devproduction 之间极大地改变了系统的行为环境。仅在部署后发现序列化问题可能代价高昂(在时间和精力方面)。

因此,逐一整理序列化问题是可行的方法。