集群中的Wildfly 10尝试使用org.infinispan.commons.marshall.NotSerializableException序列化JSP

时间:2018-10-03 14:34:30

标签: wildfly wildfly-10 infinispan

我正在尝试将我的应用程序与JPS中的以下代码一起使用

getText

在wilfly 10内。一切正常,但是当我打开包含上面代码的视图时,在日志中看到以下错误:

<c:forEach var="area" items="#{MissingSearchBean.workingAreas}">
     <h:commandButton value="#{area.workingAreaName}(#{area.count})"
                         action="#{MissingSearchBean.selectWorkingArea(area.workingAreaName)}"
                         styleClass="commandButton" />
</c:forEach>

我认为wildfly会尝试将视图持久保存到infinispan中,以便在我重新加载页面或在另一个节点上访问此页面时能够恢复视图。

我尝试将bean的范围更改为Caused by: org.infinispan.commons.marshall.NotSerializableException: javax.servlet.jsp.jstl.core.IteratedExpression Caused by: an exception which occurred: in field iteratedExpression in field delegate in field savedState in field m in object java.util.HashMap@85e645ff in object org.wildfly.clustering.marshalling.jboss.SimpleMarshalledValue@85e645ff 甚至更改为request,但是wildfly仍尝试对视图进行序列化。我绝对确定问题出在none中,因为当我将其注释(或内容)排除在外时,我不会遇到任何例外。

显然,c:forEach的内部包含Iterator,但事实并非如此IteratedExpression

我正在寻找任何解决方案/变通办法,以使其能够在群集中工作而不会引发异常。

1 个答案:

答案 0 :(得分:1)

问题是c:forEach创建了IteratedValueExpression,而不是Serializable,因为其中包含Iterator。一个简单的解决方法是将MissingSearchBean.workingAreas的返回类型更改为数组。

如果value由数组表示,则LoopTagSupport会创建IndexedValueExpression而不是IteratedValueExpression,并且显式地是Serializable