在 Payara Micro 上组合 Omnifaces 和 PrimeFaces LazyDataModel 时出现异常
Exception when combining Omnifaces and PrimeFaces LazyDataModel on Payara Micro
我 运行 在将 OmniFaces maven 依赖项添加到现有工作项目时出现异常:
[2016-06-28T17:19:09.280+0200] [Payara Micro 4.1] [SEVERE] [AS-WEB-CORE-00037] [javax.enterprise.web.core] [tid: _ThreadID=17 _ThreadName=http-listener(7)] [timeMillis: 1467127149280] [levelValue: 1000] [[An exception or error occurred in the container during the request processing
java.lang.ClassCastException: cannot assign instance of java.lang.String to field org.primefaces.model.LazyDataModel.data of type java.util.List in instance of org.primefaces.showcase.view.data.datatable.LazyCarDataModel
at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2083)
at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1261)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1995)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at java.util.HashMap.readObject(HashMap.java:1155)
at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at java.util.HashMap.readObject(HashMap.java:1155)
at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at org.apache.catalina.session.StandardSession.readRemainingObject(StandardSession.java:2079)
at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1987)
at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at org.apache.catalina.session.StandardSession.deserialize(StandardSession.java:1274)
at org.apache.catalina.session.StoreBase.readSession(StoreBase.java:296)
at org.glassfish.web.ha.session.management.ReplicationStore.getSession(ReplicationStore.java:567)
at org.glassfish.web.ha.session.management.ReplicationStore.getSession(ReplicationStore.java:519)
at org.glassfish.web.ha.session.management.ReplicationStore.loadFromBackingStore(ReplicationStore.java:433)
at org.glassfish.web.ha.session.management.ReplicationStore.load(ReplicationStore.java:416)
at org.apache.catalina.session.PersistentManagerBase.doSwapIn(PersistentManagerBase.java:1215)
at org.apache.catalina.session.PersistentManagerBase.swapIn(PersistentManagerBase.java:1175)
at org.glassfish.web.ha.session.management.ReplicationManagerBase.findSession(ReplicationManagerBase.java:161)
at org.apache.catalina.connector.Request.isRequestedSessionIdValid(Request.java:2996)
at org.apache.catalina.connector.Request.parseSessionCookiesId(Request.java:4113)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:672)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:354)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:526)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access0(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:724)
]]
我可以使用 PrimeFaces 6.0 Showcase 重现异常,所以看起来原因不在我的代码中。
这是使用 PrimeFaces showcase 重现的方法:
从 github 下载 PrimeFaces 6.0 showcase 个来源。
将 OnmiFaces 依赖项添加到 pom.xml
:
<dependency>
<groupId>org.omnifaces</groupId>
<artifactId>omnifaces</artifactId>
<version>2.3</version>
</dependency>
将用于创建 Payara Micro Uber Jar 的 Maven 代码从 http://blog.payara.fish/creating-uber-jar-with-payara-micro 添加到 pom.xml
用mvn package
构建然后用java -jar showcase-6.0.jar
开始
现在在本地主机上启动 showcase 并打开 DataTable Lazy Loading 示例,您应该会得到异常。
移除 OmniFaces 依赖项后,不会发生异常。它不会发生在 Payara Application Server 上,而只会发生在 Payara Micro 上。
所以我不确定错误是在 OmniFaces、Payara Micro、PrimeFaces 还是其他地方。
此行为是由 <distributable>
标志引起的,该标志是 added 到 OmniFaces 2.1 以在集群上支持 运行。
这又发现了 PrimeFaces 6.0、PrimeFaces 展示应用程序和 Payara Micro 中的一些错误。
- PrimeFaces 6.0 新
PhaseInfo
class implements Serializable
, but has a PhaseId
属性 根本不是 Serializable
。
- 在 PrimeFaces 展示中有几个
Serializable
视图范围 bean 具有不可序列化的服务 属性 例如 CarService
in LazyView
惰性数据后面的支持 bean table 演示页面.
- Payara Micro 似乎没有考虑 WAR 自己的
web.xml
是否设置了 <distributable>
标志。如果未设置此标志,则容器不应将 WAR 假定为 distributable.
当您完全删除 OmniFaces 但在 PrimeFaces 展示柜的 web.xml
中设置 <distributable>
标志时,与 PrimeFaces 6.0 和 PrimeFaces 展示柜的序列化问题非常相同。这些问题中的每一个都需要单独报告。我至少已将 PhaseInfo
问题报告为 issue 1570 and posted a comment 关于您的 Payara Micro 问题。
稍微相关一点,我还注意到 PrimeFaces 展示的 web.xml
已将 Mojarra 特定的 com.sun.faces.serializeServerState
设置为 false
。我没有研究设置回 true
时的效果,但是 false
的设置 不推荐 因为它可能隐藏与视图构建和状态相关的其他错误管理。
我 运行 在将 OmniFaces maven 依赖项添加到现有工作项目时出现异常:
[2016-06-28T17:19:09.280+0200] [Payara Micro 4.1] [SEVERE] [AS-WEB-CORE-00037] [javax.enterprise.web.core] [tid: _ThreadID=17 _ThreadName=http-listener(7)] [timeMillis: 1467127149280] [levelValue: 1000] [[An exception or error occurred in the container during the request processing
java.lang.ClassCastException: cannot assign instance of java.lang.String to field org.primefaces.model.LazyDataModel.data of type java.util.List in instance of org.primefaces.showcase.view.data.datatable.LazyCarDataModel
at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2083)
at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1261)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1995)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at java.util.HashMap.readObject(HashMap.java:1155)
at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at java.util.HashMap.readObject(HashMap.java:1155)
at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at org.apache.catalina.session.StandardSession.readRemainingObject(StandardSession.java:2079)
at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1987)
at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at org.apache.catalina.session.StandardSession.deserialize(StandardSession.java:1274)
at org.apache.catalina.session.StoreBase.readSession(StoreBase.java:296)
at org.glassfish.web.ha.session.management.ReplicationStore.getSession(ReplicationStore.java:567)
at org.glassfish.web.ha.session.management.ReplicationStore.getSession(ReplicationStore.java:519)
at org.glassfish.web.ha.session.management.ReplicationStore.loadFromBackingStore(ReplicationStore.java:433)
at org.glassfish.web.ha.session.management.ReplicationStore.load(ReplicationStore.java:416)
at org.apache.catalina.session.PersistentManagerBase.doSwapIn(PersistentManagerBase.java:1215)
at org.apache.catalina.session.PersistentManagerBase.swapIn(PersistentManagerBase.java:1175)
at org.glassfish.web.ha.session.management.ReplicationManagerBase.findSession(ReplicationManagerBase.java:161)
at org.apache.catalina.connector.Request.isRequestedSessionIdValid(Request.java:2996)
at org.apache.catalina.connector.Request.parseSessionCookiesId(Request.java:4113)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:672)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:354)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:526)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access0(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:724)
]]
我可以使用 PrimeFaces 6.0 Showcase 重现异常,所以看起来原因不在我的代码中。
这是使用 PrimeFaces showcase 重现的方法:
从 github 下载 PrimeFaces 6.0 showcase 个来源。
将 OnmiFaces 依赖项添加到
pom.xml
:<dependency> <groupId>org.omnifaces</groupId> <artifactId>omnifaces</artifactId> <version>2.3</version> </dependency>
将用于创建 Payara Micro Uber Jar 的 Maven 代码从 http://blog.payara.fish/creating-uber-jar-with-payara-micro 添加到
pom.xml
用
mvn package
构建然后用java -jar showcase-6.0.jar
开始
现在在本地主机上启动 showcase 并打开 DataTable Lazy Loading 示例,您应该会得到异常。
移除 OmniFaces 依赖项后,不会发生异常。它不会发生在 Payara Application Server 上,而只会发生在 Payara Micro 上。
所以我不确定错误是在 OmniFaces、Payara Micro、PrimeFaces 还是其他地方。
此行为是由 <distributable>
标志引起的,该标志是 added 到 OmniFaces 2.1 以在集群上支持 运行。
这又发现了 PrimeFaces 6.0、PrimeFaces 展示应用程序和 Payara Micro 中的一些错误。
- PrimeFaces 6.0 新
PhaseInfo
class implementsSerializable
, but has aPhaseId
属性 根本不是Serializable
。 - 在 PrimeFaces 展示中有几个
Serializable
视图范围 bean 具有不可序列化的服务 属性 例如CarService
inLazyView
惰性数据后面的支持 bean table 演示页面. - Payara Micro 似乎没有考虑 WAR 自己的
web.xml
是否设置了<distributable>
标志。如果未设置此标志,则容器不应将 WAR 假定为 distributable.
当您完全删除 OmniFaces 但在 PrimeFaces 展示柜的 web.xml
中设置 <distributable>
标志时,与 PrimeFaces 6.0 和 PrimeFaces 展示柜的序列化问题非常相同。这些问题中的每一个都需要单独报告。我至少已将 PhaseInfo
问题报告为 issue 1570 and posted a comment 关于您的 Payara Micro 问题。
稍微相关一点,我还注意到 PrimeFaces 展示的 web.xml
已将 Mojarra 特定的 com.sun.faces.serializeServerState
设置为 false
。我没有研究设置回 true
时的效果,但是 false
的设置 不推荐 因为它可能隐藏与视图构建和状态相关的其他错误管理。