Support Article
NoClassDefFoundError for ThrowableInformation while Pega upgrade
SA-5381
Summary
During upgarde from 5.5 to 7.1.5, java.lang.NoClassDefFoundError: com/pega/apache/log4j/spi/ThrowableInformation and many other errors were observed in the logs.
Following PDN link suggests network latency issue to be the cause -
https://pdn.pega.com/deployment/troubleshooting-noclassdeffounderror-during-rulebase-setup-from-remote-machine
Below are the upgrade steps that were followed with status:
o Upgrading from Standard schema to split schema within in the same database
o Created the Blank Schema for rules – XYZ. Data Schema is XYZ- Completed
o Performed migration of the rules tables from Data schema to Rules schema - Completed
o Deploy the DDL scripts required for the rule base upgrade manually - Completed
o Perform rulebase upgrade with command “Upgrade.sh” - In progress. Build Failed with Error.
o Deploy the DDLs required for Data Upgrade Manually - Not Started
o Perform Data Upgrade using the command “Upgrade.sh --DataOnly true” - Not Started
Error Messages
[java] 2015-01-17 18:34:39,166 [server1] [ STANDARD] [ ] ( internal.util.ImportImpl) INFO - Uncommitted memory threshold exceeded -- issuing commit.
--------------------------------------------------------------------------------------------------------------
[java] com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2030][11211][3.64.106] A communication error occurred during operations on the connection's underlying socket, socket input stream,
[java] or socket output stream. Error location: T4Agent.sendRequest() - flush (-1). Message: There is no process to read data written to a pipe.. ERRORCODE=-4499, SQLSTATE=08001
[java] at com.ibm.db2.jcc.am.bd.a(bd.java:321)
[java] at com.ibm.db2.jcc.t4.a.a(a.java:548)
[java] at com.ibm.db2.jcc.t4.a.a(a.java:543)
[java] at com.ibm.db2.jcc.t4.a.f(a.java:484)
[java] at com.ibm.db2.jcc.t4.a.flush_(a.java:390)
[java] at com.ibm.db2.jcc.am.Agent.flow(Agent.java:230)
[java] at com.ibm.db2.jcc.am.jo.b(jo.java:3976)
[java] at com.ibm.db2.jcc.am.jo.ec(jo.java:735)
[java] at com.ibm.db2.jcc.am.jo.executeQuery(jo.java:708)
[java] at com.pega.pegarules.configdbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:99)
--------------------------------------------------------------------------------------------------------------
[java] at com.pega.pegarules.pub.PegaRULES.main(PegaRULES.java:85)
[java] Exception in thread "server1" java.lang.RuntimeException: Problem during method invocation (main)
[java] at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethod(PRBootstrap.java:515)
[java] at com.pega.pegarules.pub.PegaRULES.main(PegaRULES.java:85)
[java] Caused by: java.lang.NoClassDefFoundError: com/pega/apache/log4j/spi/ThrowableInformation
[java] at com.pega.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:155)
[java] at com.pega.apache.log4j.Category.forcedLog(Category.java:391)
[java] at com.pega.apache.log4j.Category.error(Category.java:322)
[java] at com.pega.pegarules.priv.LogHelper.error(LogHelper.java:1039)
[java] at com.pega.pegarules.deploy.external.util.Application.main(Application.java:446)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
[java] at java.lang.reflect.Method.invoke(Method.java:611)
[java] at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethod(PRBootstrap.java:419)
[java] at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:460)
[java] at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethod(PRBootstrap.java:509)
[java] ... 1 more
Steps to Reproduce
None
Root Cause
The root cause of this problem was due to communication error on the underlying socket for DB2 and VPN lost connectivity while running upgrade script.
Resolution
Following error caused the upgrade script to fail. Local fix for this error discussed on the IBM site was suggested. This was not implemented as later the connection to database was re-established.
[java] com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2030][11211][3.64.106] A communication error occurred during operations on the connection's underlying socket, socket input stream,
[java] or socket output stream. Error location: T4Agent.sendRequest() - flush (-1). Message: There is no process to read data written to a pipe.. ERRORCODE=-4499, SQLSTATE=08001
The second error "Uncommitted memory threshold exceeded -- issuing commit." that was suspected to be the impacting was ruled out.
Firstly, it just a threshold exceeded for uncommitted instances and after this threshold a commit is issued. The uncommitted memory threshold is determined by Dynamic System Setting deployment/import/UncommittedMemoryThresholdMB on owning Ruleset Pega-EngineCode. This is by default set to 50Mb.
If size of uncommitted instances during upgrade is greater than UNCOMMITED_INST_MEM_THRESHOLD(50MB), it issues a commit and sets the counter to zero. This explained there is no scarcity of memory on JVM or DB2 at this time.
Running resume.sh was suggested after reviewing the resume.properties file and that failed again due to VPN connection issues. A second running of resume.sh completed successfully.
Published January 31, 2016 - Updated October 8, 2020
Have a question? Get answers now.
Visit the Collaboration Center to ask questions, engage in discussions, share ideas, and help others.