Discussions
Categories
- 196.7K All Categories
- 2.2K Data
- 235 Big Data Appliance
- 1.9K Data Science
- 449.8K Databases
- 221.5K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 549 MySQL Community Space
- 477 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 532 SQLcl
- 4K SQL Developer Data Modeler
- 186.8K SQL & PL/SQL
- 21.2K SQL Developer
- 295.4K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.1K Development Tools
- 104 DevOps
- 3.1K QA/Testing
- 645.9K Java
- 27 Java Learning Subscription
- 37K Database Connectivity
- 153 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 17 Java Essentials
- 158 Java 8 Questions
- 85.9K Java Programming
- 79 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.2K Java SE
- 13.8K Java Security
- 203 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 392 LiveLabs
- 37 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.6K Other Languages
- 2.3K Chinese
- 170 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 230 Portuguese
Getting java.io.NotSerializableException: oracle.adf.share.logging.ADFLogger for HA enabled apps

Team,
We are planning to make our application HA enabled. Made the necessary configuration and deployed the apps. When running the app getting below error
All session objects should be serializable to replicate. Check the objects in the session. Failed to replicate a non-serializable object in context /AppName/CRoot. java.rmi.MarshalException: failed to marshal update(Lweblogic.cluster.replication.ROID;ILjava.io.Serializable;Ljava.lang.Object;); nested exception is: java.io.NotSerializableException: oracle.adf.share.logging.ADFLogger at weblogic.rjvm.BasicOutboundRequest.marshalArgs(BasicOutboundRequest.java:100) at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:297) at weblogic.cluster.replication.RemoteReplicationServicesInternalImpl_12213_WLStub.update(Unknown Source) at sun.reflect.GeneratedMethodAccessor1277.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at weblogic.cluster.replication.SecureReplicationInvocationHandler$ReplicationServicesInvocationAction.run(SecureReplicationInvocationHandler.java:222) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:137) at weblogic.cluster.replication.SecureReplicationInvocationHandler.invoke(SecureReplicationInvocationHandler.java:192) at com.sun.proxy.$Proxy261.update(Unknown Source) at weblogic.cluster.replication.ReplicationServicesImplBase.sendUpdateRequestToSecondary(ReplicationServicesImplBase.java:1670) at weblogic.cluster.replication.ReplicationServicesImplBase.updateSecondaryInternal(ReplicationServicesImplBase.java:1559) at weblogic.cluster.replication.ReplicationServicesImplBase.updateSecondary(ReplicationServicesImplBase.java:1525) at weblogic.cluster.replication.ReplicationServicesImplBase.updateSecondary(ReplicationServicesImplBase.java:1520) at weblogic.servlet.internal.session.ReplicatedSessionData._syncSession(ReplicatedSessionData.java:741) at weblogic.servlet.internal.session.ReplicatedSessionData.syncSession(ReplicatedSessionData.java:705) at weblogic.servlet.internal.session.SessionContext.sync(SessionContext.java:161) at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:3447) at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSessions(ServletRequestImpl.java:3425) at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:3413) at weblogic.servlet.internal.ServletResponseImpl$1.run(ServletResponseImpl.java:1811) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344) at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197) at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203) at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71) at weblogic.servlet.internal.ServletResponseImpl.syncSession(ServletResponseImpl.java:1807) at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1742) at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1715) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1665) at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:272) at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352) at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337) at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57) at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:652) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420) at weblogic.work.ExecuteThread.run(ExecuteThread.java:360) Caused By: java.io.NotSerializableException: oracle.adf.share.logging.ADFLogger 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.writeObject(ObjectOutputStream.java:348) at weblogic.servlet.internal.session.ReplicatedSessionChange.writeMapKeysAndValuesToStream(ReplicatedSessionChange.java:234) at weblogic.servlet.internal.session.ReplicatedSessionChange.writeExternal(ReplicatedSessionChange.java:202) at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1459) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1430) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at weblogic.cluster.replication.WrappedSerializable.writeExternal(WrappedSerializable.java:23) at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1459) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1430) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:674) at weblogic.rjvm.MsgAbbrevOutputStream.writeObjectWL(MsgAbbrevOutputStream.java:666) at weblogic.rmi.internal.ObjectIO.writeObject(ObjectIO.java:38) at weblogic.rjvm.BasicOutboundRequest.marshalArgs(BasicOutboundRequest.java:96) at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:297) at weblogic.cluster.replication.RemoteReplicationServicesInternalImpl_12213_WLStub.update(Unknown Source) at sun.reflect.GeneratedMethodAccessor1277.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at weblogic.cluster.replication.SecureReplicationInvocationHandler$ReplicationServicesInvocationAction.run(SecureReplicationInvocationHandler.java:222) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:137) at weblogic.cluster.replication.SecureReplicationInvocationHandler.invoke(SecureReplicationInvocationHandler.java:192) at com.sun.proxy.$Proxy261.update(Unknown Source) at weblogic.cluster.replication.ReplicationServicesImplBase.sendUpdateRequestToSecondary(ReplicationServicesImplBase.java:1670) at weblogic.cluster.replication.ReplicationServicesImplBase.updateSecondaryInternal(ReplicationServicesImplBase.java:1559) at weblogic.cluster.replication.ReplicationServicesImplBase.updateSecondary(ReplicationServicesImplBase.java:1525) at weblogic.cluster.replication.ReplicationServicesImplBase.updateSecondary(ReplicationServicesImplBase.java:1520) at weblogic.servlet.internal.session.ReplicatedSessionData._syncSession(ReplicatedSessionData.java:741) at weblogic.servlet.internal.session.ReplicatedSessionData.syncSession(ReplicatedSessionData.java:705) at weblogic.servlet.internal.session.SessionContext.sync(SessionContext.java:161) at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:3447) at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSessions(ServletRequestImpl.java:3425) at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:3413) at weblogic.servlet.internal.ServletResponseImpl$1.run(ServletResponseImpl.java:1811) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344) at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197) at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203) at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71) at weblogic.servlet.internal.ServletResponseImpl.syncSession(ServletResponseImpl.java:1807) at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1742) at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1715) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1665) at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:272) at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352) at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337) at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57) at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:652) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420) at weblogic.work.ExecuteThread.run(ExecuteThread.java:360)
Answers
-
Timo Hahn Senior Principal Technical Consultant - Oracle ACE Director Member, Moderator Posts: 38,270 Red Diamond
Well, that's plain java. If you mark a class to be serializable, all properties or class variables should be serializable. In your case, the ADFLogger is not serializable and your class can't be serialized.
A solution is to make the ADFLogger transient as transient variables are not serialized.
Timo
-
Your application is attempting to place a non-serializable object in the HttpSession. The problem is not in one of your classes, but a standard Java class oracle.adf.share.logging.ADFLogger, which is not serializable and is being added to the HttpSession.
-
For a serializable logger, use class ContextualLoggerProvider which extends LoggerProvider<ContextualLogger>, which implements java.io.Serializable
This provider will always create instances of
DefaultContextualLogger
. Consumers are free to extend this provider and override methodcreateLogger()
to make it create any custom implementation of the FunctionalLogger interface.