有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Tomcat会话复制问题。伊奥。NotSerializableException:com。太阳面孔。cdi。会话制作人

我在使用DeltaManager进行tomcat会话复制时遇到问题。在我解决了SessionScoped beans(CDI)的所有问题(不是可序列化属性)之后,现在我得到了一个无法修复的错误,因为我不知道问题出在哪里。下面是stacktrace

我浏览了我的代码,搜索了可疑的HttpSession setAttribute调用或类似的东西,但什么也没找到。Im使用weld servlet 2.4.5。最终和焊接api 2.4。决赛

我怎样才能找出真正的问题是什么

`11-Sep-2019 11:15:43.331 SEVERE [http-nio-8081-exec-5] org.apache.catalina.ha.session.DeltaManager.requestCompleted Unable to serialize delta request for sessionid [8C493261547F84FCDF306258240EFC76]
 java.io.NotSerializableException: com.sun.faces.cdi.SessionProducer$$Lambda$43/678571560
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at org.apache.catalina.ha.session.DeltaRequest$AttributeInfo.writeExternal(DeltaRequest.java:401)
    at org.apache.catalina.ha.session.DeltaRequest.writeExternal(DeltaRequest.java:294)
    at org.apache.catalina.ha.session.DeltaRequest.serialize(DeltaRequest.java:308)
    at org.apache.catalina.ha.session.DeltaManager.serializeDeltaRequest(DeltaManager.java:594)
    at org.apache.catalina.ha.session.DeltaManager.requestCompleted(DeltaManager.java:979)
    at org.apache.catalina.ha.session.DeltaManager.requestCompleted(DeltaManager.java:946)
    at org.apache.catalina.ha.tcp.ReplicationValve.send(ReplicationValve.java:523)
    at org.apache.catalina.ha.tcp.ReplicationValve.sendMessage(ReplicationValve.java:511)
    at org.apache.catalina.ha.tcp.ReplicationValve.sendSessionReplicationMessage(ReplicationValve.java:493)
    at org.apache.catalina.ha.tcp.ReplicationValve.sendReplicationMessage(ReplicationValve.java:404)
    at org.apache.catalina.ha.tcp.ReplicationValve.invoke(ReplicationValve.java:333)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)`

共 (1) 个答案

  1. # 1 楼答案

    我已经弄明白了。我已经为“请求”创建了一个名为bean的替代bean,它是由来自CDI的SessionProducer类创建的。我的bean提供了我需要的方法,它的请求范围是有限的,而不是会话范围。我仍然不明白为什么jsf/cdi框架创建的这种bean是会话范围的。我认为当您使用tomcat并尝试序列化会话对象时,它总是会抛出一个错误