【问题标题】:Wildfly 10 in cluster tries to serialize JSP with org.infinispan.commons.marshall.NotSerializableException集群中的 Wildfly 10 尝试使用 org.infinispan.commons.marshall.NotSerializableException 序列化 JSP
【发布时间】:2019-03-08 19:53:12
【问题描述】:

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

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

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

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

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

我尝试将 bean 的范围更改为 request 甚至更改为 none,但 Wildfly 仍然尝试序列化视图。我绝对确定问题出在c:forEach 中,因为当我将它(以及它的内容)注释掉时——我没有得到任何例外。

也很明显IteratedExpression里面包含了Iterator,这不是Serializable真的。

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

【问题讨论】:

    标签: wildfly wildfly-10 infinispan


    【解决方案1】:

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

    如果value 由数组表示,LoopTagSupport 会创建IndexedValueExpression 而不是IteratedValueExpression,这就是明确的Serializable

    【讨论】:

    • @GalderZamarreño 是的,看看我的回答
    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 2016-06-23
    • 2015-03-13
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多