Question

( Pega V 7.1.8) java.lang.ClassNotFoundException: Failed to load class com.pega.pegarules.session.internal.authorization.ContextMapDiagCallback

Hi,

I am having 2 Clusters, each cluster has 2 managed servers. I am using proxy servlet in a different managed server which is not there in these 2 clusters to perform load balancing.

Whenever the request switches from one system to another, we need to replicate the sessions, for that I have configured the weblogic.xml i.e

<session-descriptor>

<persistent-store-type>replicated</persistent-store-type>

</session-descriptor>

When I deployed the application into clusters, the managed servers in cluster 2 throw this error

<Aug 27, 2015 2:29:28 AM IST> <Error> <Cluster> <L-MAA-25004251> <ms4> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1440622768965> <BEA-000126> <All session objects should be serializable to replicate. Check the objects in the session. Failed to replicate a non-serializable object.

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

    java.lang.ClassNotFoundException: Failed to load class com.pega.pegarules.session.internal.authorization.ContextMapDiagCallback

    at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:237)

    at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:300)

    at weblogic.cluster.replication.ReplicationManager_1211_WLStub.create(Unknown Source)

    at sun.reflect.GeneratedMethodAccessor122.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at weblogic.cluster.replication.SecureReplicationInvocationHandler$ReplicationServicesInvocationAction.run(SecureReplicationInvocationHandler.java:194)

    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

    at weblogic.cluster.replication.SecureReplicationInvocationHandler.invoke(SecureReplicationInvocationHandler.java:164)

    at $Proxy77.create(Unknown Source)

    at weblogic.cluster.replication.ReplicationManager.trySecondary(ReplicationManager.java:937)

    at weblogic.cluster.replication.ReplicationManager.createSecondary(ReplicationManager.java:890)

    at weblogic.cluster.replication.ReplicationManager.getPrimary(ReplicationManager.java:866)

    at weblogic.cluster.replication.ReplicationManager.lookup(ReplicationManager.java:428)

    at weblogic.servlet.internal.session.ReplicatedSessionContext.lookupSession(ReplicatedSessionContext.java:416)

    at weblogic.servlet.internal.session.ReplicatedSessionContext.getSessionInternal(ReplicatedSessionContext.java:258)

    at weblogic.servlet.internal.session.ReplicatedSessionContext.getSessionInternal(ReplicatedSessionContext.java:250)

    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getValidSession(ServletRequestImpl.java:3102)

    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getSessionInternal(ServletRequestImpl.java:2625)

    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getSession(ServletRequestImpl.java:2592)

    at weblogic.servlet.internal.ServletRequestImpl.getSession(ServletRequestImpl.java:1352)

    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2100)

    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)

    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)

    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)

    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)

    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)

    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

Caused By: java.lang.ClassNotFoundException: Failed to load class com.pega.pegarules.session.internal.authorization.ContextMapDiagCallback

    at weblogic.rmi.utils.WLRMIClassLoaderDelegate.loadClass(WLRMIClassLoaderDelegate.java:208)

    at weblogic.rmi.utils.WLRMIClassLoaderDelegate.loadClass(WLRMIClassLoaderDelegate.java:135)

    at weblogic.rmi.utils.Utilities.loadClass(Utilities.java:305)

    at weblogic.rjvm.MsgAbbrevInputStream.resolveClass(MsgAbbrevInputStream.java:436)

    at weblogic.utils.io.ChunkedObjectInputStream$NestedObjectInputStream.resolveClass(ChunkedObjectInputStream.java:268)

    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)

    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)

    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)

    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)

    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)

    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)

    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)

    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)

    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)

    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)

    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)

    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)

    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)

    at java.util.Hashtable.readObject(Hashtable.java:844)

    at sun.reflect.GeneratedMethodAccessor86.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)

    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)

    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)

    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)

    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)

    at weblogic.servlet.internal.session.ReplicatedSessionData.readExternal(ReplicatedSessionData.java:154)

    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1791)

    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)

    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)

    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)

    at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:208)

    at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:599)

    at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:204)

    at weblogic.cluster.replication.ReplicationManager_WLSkel.invoke(Unknown Source)

    at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:696)

    at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:521)

    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)

    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)

    at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:516)

    at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:119)

    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)

    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

>

####<Aug 27, 2015 2:29:28 AM IST> <Error> <Cluster> <L-MAA-25004251> <ms4> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <e84bae63a4864aa7:1266100f:14f6bc54e80:-8000-000000000000005a> <1440622768993> <BEA-000126> <All session objects should be serializable to replicate. Check the objects in the session. Failed to replicate a non-serializable object.

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

    java.lang.ClassNotFoundException: Failed to load class com.pega.pegarules.session.internal.authorization.ContextMapDiagCallback

    at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:237)

    at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:300)

    at weblogic.cluster.replication.ReplicationManager_1211_WLStub.create(Unknown Source)

    at sun.reflect.GeneratedMethodAccessor122.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at weblogic.cluster.replication.SecureReplicationInvocationHandler$ReplicationServicesInvocationAction.run(SecureReplicationInvocationHandler.java:194)

    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

    at weblogic.cluster.replication.SecureReplicationInvocationHandler.invoke(SecureReplicationInvocationHandler.java:164)

    at $Proxy77.create(Unknown Source)

    at weblogic.cluster.replication.ReplicationManager.trySecondary(ReplicationManager.java:937)

    at weblogic.cluster.replication.ReplicationManager.createSecondary(ReplicationManager.java:890)

    at weblogic.cluster.replication.ReplicationManager.updateSecondary(ReplicationManager.java:704)

    at weblogic.servlet.internal.session.ReplicatedSessionData.syncSession(ReplicatedSessionData.java:630)

    at weblogic.servlet.internal.session.ReplicatedSessionContext.sync(ReplicatedSessionContext.java:94)

    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:3066)

    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.syncSession(ServletRequestImpl.java:3041)

    at weblogic.servlet.internal.ServletResponseImpl$1.run(ServletResponseImpl.java:1523)

    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

   

this happens when a serializable object references a non-serializable object.

Anything I am doing wrong? could anyone help me with this.

Pega V 7.1.8

**Moderation Team has archived post**

This post has been archived for educational purposes. Contents and links will no longer be updated. If you have the same/similar question, please write a new post.

Correct Answer
September 7, 2015 - 10:28am

This is seen when app server specific session replication is turned on (I have seen this on tomcat server too). I do not think Pega is using any of these, nor do we recommend that. Here is a pdn article, while a little out of date, but the essence remains valid: https://pdn.pega.com/performance/recommendations-for-load-balancing-and-weblogic-session-replication-42

Comments

Keep up to date on this post and subscribe to comments

September 7, 2015 - 10:28am

This is seen when app server specific session replication is turned on (I have seen this on tomcat server too). I do not think Pega is using any of these, nor do we recommend that. Here is a pdn article, while a little out of date, but the essence remains valid: https://pdn.pega.com/performance/recommendations-for-load-balancing-and-weblogic-session-replication-42

September 10, 2015 - 12:46pm
Response to KevinZheng_GCS

Hi Kevin,

The pdn reference helped me a lot, I had to do little more research but this pdn reference gave me a heads up.

I was able to implement fail over handling in cluster.

Thanks!!!