ISPN000188:处理两阶段事务中的提交时出错:org.infinispan.marshall.NotSerializableException

ISPN000188: Error while processing a commit in a two-phase transaction: org.infinispan.marshall.NotSerializableException

在 JBoss 中部署我的应用程序后,我在 server.log 中收到以下错误,并且在尝试登录时发生此错误....

基本上 JBoss 说两阶段提交失败,而 inifinispan 试图编组对象....它引发异常NotSerializableException...

因此,JBoss-Infinispan 表示 DummyTransaction.java:287 ISPN000111: afterCompletion() failed for SynchronizationAdapter

13:28:38,186 ERROR [org.infinispan.transaction.TransactionCoordinator] (http-/192.nnn.nnn.nn:8080-3) ISPN000188: Error while processing a commit in a two-phase transaction: org.infinispan.marshall.NotSerializableException: com.singtel.um.transaction.TransactionManager
Caused by: an exception which occurred:
       in field transactionManager
       in object java.util.HashMap@f1852ac6
       in object org.jboss.as.clustering.SimpleMarshalledValue@f1852ac6
              -> toString = {User=com.singtel.um.dto.UserDto@4c08e73b, Userid=1, Username=sysadmin, org.apache.struts.action.LOCALE=en_US, Response=com.singtel.um.dto.ResponsePageDto@72c5cec1, userManager=com.singtel.um.UserManager@418634d5}
       in object org.infinispan.util.FastCopyHashMap@373deff8
              -> toString = {0=11, 1=1444195716345, 2=org.jboss.as.clustering.web.DistributableSessionMetadata@40843124, 3={User=com.singtel.um.dto.UserDto@4c08e73b, Userid=1, Username=sysadmin, org.apache.struts.action.LOCALE=en_US, Response=com.singtel.um.dto.ResponsePageDto@72c5cec1, userManager=com.singtel.um.UserManager@418634d5}}
       in object org.infinispan.atomic.AtomicHashMap@3345fa74
              -> toString = AtomicHashMap
       in object org.infinispan.container.entries.ImmortalCacheEntry@cca5812b
              -> toString = ImmortalCacheEntry{key=ZVx0ehVWVUvmITSBGMT9pQmB, value=ImmortalCacheValue {value=AtomicHashMap}}
       in object org.infinispan.loaders.bucket.Bucket@18891bc5
              -> toString = Bucket{entries={ZVx0ehVWVUvmITSBGMT9pQmB=ImmortalCacheEntry{key=ZVx0ehVWVUvmITSBGMT9pQmB, value=ImmortalCacheValue {value=AtomicHashMap}}}, bucketId='1607025664'}

13:28:38,210 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3) ERROR [http-/192.nnn.nnn.nn:8080-3] (TransactionCoordinator.java:213) - ISPN000188: Error while processing a commit in a two-phase transaction
13:28:38,213 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3) org.infinispan.marshall.NotSerializableException: com.singtel.um.transaction.TransactionManager
13:28:38,216 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3) Caused by: an exception which occurred:
13:28:38,218 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)      in field transactionManager
13:28:38,219 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)      in object java.util.HashMap@f1852ac6
13:28:38,221 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)      in object org.jboss.as.clustering.SimpleMarshalledValue@f1852ac6
13:28:38,224 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)             -> toString = {User=com.singtel.um.dto.UserDto@4c08e73b, Userid=1, Username=sysadmin, org.apache.struts.action.LOCALE=en_US, Response=com.singtel.um.dto.ResponsePageDto@72c5cec1, userManager=com.singtel.um.UserManager@418634d5}
13:28:38,228 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)      in object org.infinispan.util.FastCopyHashMap@373deff8
13:28:38,231 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)             -> toString = {0=11, 1=1444195716345, 2=org.jboss.as.clustering.web.DistributableSessionMetadata@40843124, 3={User=com.singtel.um.dto.UserDto@4c08e73b, Userid=1, Username=sysadmin, org.apache.struts.action.LOCALE=en_US, Response=com.singtel.um.dto.ResponsePageDto@72c5cec1, userManager=com.singtel.um.UserManager@418634d5}}
13:28:38,237 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)      in object org.infinispan.atomic.AtomicHashMap@3345fa74
13:28:38,239 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)             -> toString = AtomicHashMap
13:28:38,241 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)      in object org.infinispan.container.entries.ImmortalCacheEntry@cca5812b
13:28:38,243 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)             -> toString = ImmortalCacheEntry{key=ZVx0ehVWVUvmITSBGMT9pQmB, value=ImmortalCacheValue {value=AtomicHashMap}}
13:28:38,246 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)      in object org.infinispan.loaders.bucket.Bucket@18891bc5
13:28:38,249 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3)             -> toString = Bucket{entries={ZVx0ehVWVUvmITSBGMT9pQmB=ImmortalCacheEntry{key=ZVx0ehVWVUvmITSBGMT9pQmB, value=ImmortalCacheValue {value=AtomicHashMap}}}, bucketId='1607025664'}
13:28:38,253 ERROR [org.infinispan.transaction.tm.DummyTransaction] (http-/192.nnn.nnn.nn:8080-3) ISPN000111: afterCompletion() failed for SynchronizationAdapter{localTransaction=LocalTransaction{remoteLockedNodes=null, isMarkedForRollback=false, lockedKeys=null, backupKeyLocks=null, topologyId=-1, isFromStateTransfer=false} org.infinispan.transaction.synchronization.SyncLocalTransaction@42} org.infinispan.transaction.synchronization.SynchronizationAdapter@61: org.infinispan.CacheException: Could not commit.
       at org.infinispan.transaction.synchronization.SynchronizationAdapter.afterCompletion(SynchronizationAdapter.java:83)
       at org.infinispan.transaction.tm.DummyTransaction.notifyAfterCompletion(DummyTransaction.java:285)
       at org.infinispan.transaction.tm.DummyTransaction.runCommitTx(DummyTransaction.java:334)
       at org.infinispan.transaction.tm.DummyTransaction.commit(DummyTransaction.java:91)
       at org.infinispan.transaction.tm.DummyBaseTransactionManager.commit(DummyBaseTransactionManager.java:102)
       at org.jboss.as.clustering.web.impl.TransactionBatchingManager.endBatch(TransactionBatchingManager.java:75)
       at org.jboss.as.web.session.DistributableSessionManager.processSessionRepl(DistributableSessionManager.java:1574) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
       at org.jboss.as.web.session.DistributableSessionManager.storeSession(DistributableSessionManager.java:872) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
       at org.jboss.as.web.session.InstantSnapshotManager.snapshot(InstantSnapshotManager.java:47) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
       at org.jboss.as.web.session.ClusteredSessionValve.handleRequest(ClusteredSessionValve.java:142) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
       at org.jboss.as.web.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:99) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
       at org.jboss.as.web.session.JvmRouteValve.invoke(JvmRouteValve.java:92) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
       at org.jboss.as.web.session.LockingValve.invoke(LockingValve.java:64) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
       at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19]
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
       at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_80]
Caused by: javax.transaction.xa.XAException
       at org.infinispan.transaction.TransactionCoordinator.handleCommitFailure(TransactionCoordinator.java:224)
       at org.infinispan.transaction.TransactionCoordinator.commit(TransactionCoordinator.java:185)
       at org.infinispan.transaction.synchronization.SynchronizationAdapter.afterCompletion(SynchronizationAdapter.java:81)
       ... 21 more

13:28:38,308 INFO  [stdout] (http-/192.nnn.nnn.nn192.nnn.nnn.nn:8080-3) ERROR [http-/192.nnn.nnn.nn:8080-3] (DummyTransaction.java:287) - ISPN000111: afterCompletion() failed for SynchronizationAdapter{localTransaction=LocalTransaction{remoteLockedNodes=null, isMarkedForRollback=false, lockedKeys=null, backupKeyLocks=null, topologyId=-1, isFromStateTransfer=false} org.infinispan.transaction.synchronization.SyncLocalTransaction@42} org.infinispan.transaction.synchronization.SynchronizationAdapter@61
13:28:38,317 INFO  [stdout] (http-/192.nnn.nnn.nn:8080-3) org.infinispan.CacheException: Could not commit.

请有人帮我解决这个问题。

您的其中一个 类(不确定名称是什么,但包含 com.singtel.um.dto.ResponsePageDtocom.singtel.um.dto.UserDtocom.singtel.um.UserManager)似乎有一个字段 transactionManager,并且您的 TM 实现不可序列化。您应该使该字段成为瞬态。

不确定为什么 HashMap 在堆栈中,但是,除非有东西正在检测 Java 类。

理想情况下,您还应该使用 ExternalizableAdvancedExternalizer 来优化对象的序列化。参见 Infinispan User Guide