Support Article
ORA-02391and NoClassDefFoundErrors in Marketing REST services
Summary
The following errors occur in logs while executing a strategy inside a Data Flow in a headless Decisioning application.
The issue is occurring after some minute from application start. Restarting the application is not solving the issue.
Error Messages
...
[ YourAPPLICATION:01.01.01] ( internal.services.ServiceAPI) ERROR localhost|127.0.0.1|Rest|YourServicePackage|Services|YourService|A492EAB4C903FA633A1D3BE266D41B101 - Rest service [YourServicePackage][Services][YourService] failed:PRRuntimeError:com.pega.pegarules.pub.PRRuntimeError: PRRuntimeError
at com.pega.pegarules.session.internal.mgmt.base.ThreadRunner.__AW_runActivitiesAlt(ThreadRunner.java:712)
at com.pega.pegarules.session.internal.mgmt.base.ThreadRunner.runActivitiesAlt(ThreadRunner.java)
at com.pega.pegarules.session.internal.mgmt.PRThreadImpl.runActivitiesAlt(PRThreadImpl.java:466)
at com.pega.pegarules.integration.engine.internal.services.ServiceAPI.runActivities(ServiceAPI.java:1951)
at com.pega.pegarules.session.external.engineinterface.service.EngineAPI.__AW_processRequestInner(EngineAPI.java:390)
at com.pega.pegarules.session.external.engineinterface.service.EngineAPI.processRequestInner(EngineAPI.java)
at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
at java.lang.reflect.Method.invoke(Method.java:620)
at com.pega.pegarules.session.internal.PRSessionProviderImpl.performTargetActionWithLock(PRSessionProviderImpl.java:1277)
at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:1015)
at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:848)
at com.pega.pegarules.session.external.engineinterface.service.EngineAPI.__AW_processRequest(EngineAPI.java:331)
at com.pega.pegarules.session.external.engineinterface.service.EngineAPI.processRequest(EngineAPI.java)
at com.pega.pegarules.integration.engine.internal.services.http.HTTPService.__AW_invoke(HTTPService.java:457)
at com.pega.pegarules.integration.engine.internal.services.http.HTTPService.invoke(HTTPService.java)
at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineImpl._invokeEngine_privact(EngineImpl.java:327)
at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineImpl.__AW_invokeEngine(EngineImpl.java:270)
at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineImpl.invokeEngine(EngineImpl.java)
at com.pega.pegarules.session.internal.engineinterface.etier.ejb.EngineBean.__AW_invokeEngine(EngineBean.java:225)
at com.pega.pegarules.session.internal.engineinterface.etier.ejb.EngineBean.invokeEngine(EngineBean.java)
at sun.reflect.GeneratedMethodAccessor96.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
at java.lang.reflect.Method.invoke(Method.java:620)
at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethod(PRBootstrap.java:370)
at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:411)
at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:224)
at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingException(AppServerBridgeToPega.java:246)
at com.pega.pegarules.internal.etier.ejb.EngineBeanBoot.__AW_invokeEngine(EngineBeanBoot.java:168)
at com.pega.pegarules.internal.etier.ejb.EngineBeanBoot.invokeEngine(EngineBeanBoot.java)
at com.pega.pegarules.internal.etier.interfaces.EJSLocalStatelessEngineBMT_f2439d86.invokeEngine(Unknown Source)
at com.pega.pegarules.priv.context.JNDIEnvironment.invokeEngineInner(JNDIEnvironment.java:278)
at com.pega.pegarules.priv.context.JNDIEnvironment.invokeEngine(JNDIEnvironment.java:223)
at com.pega.pegarules.web.impl.WebStandardImpl.__AW_makeEtierRequest(WebStandardImpl.java:574)
at com.pega.pegarules.web.impl.WebStandardImpl.makeEtierRequest(WebStandardImpl.java)
at com.pega.pegarules.web.impl.WebStandardImpl.__AW_doPost(WebStandardImpl.java:374)
at com.pega.pegarules.web.impl.WebStandardImpl.doPost(WebStandardImpl.java)
...
Caused by: java.lang.NoClassDefFoundError: com/google/common/base/Throwables
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.await(DataObservableImpl.java:122)
at com.pega.dsm.dnode.impl.stream.DataObservableImpl.await(DataObservableImpl.java:87)
at com.pegarules.generated.activity.ra_action_returnnba_360b62294c581f81606a9ae8118c3a9a.__AW_step6_circum0(ra_action_returnnba_360b62294c581f81606a9ae8118c3a9a.java:744)
at com.pegarules.generated.activity.ra_action_returnnba_360b62294c581f81606a9ae8118c3a9a.step6_circum0(ra_action_returnnba_360b62294c581f81606a9ae8118c3a9a.java)
at com.pegarules.generated.activity.ra_action_returnnba_360b62294c581f81606a9ae8118c3a9a.__AW_perform(ra_action_returnnba_360b62294c581f81606a9ae8118c3a9a.java:174)
at com.pegarules.generated.activity.ra_action_returnnba_360b62294c581f81606a9ae8118c3a9a.perform(ra_action_returnnba_360b62294c581f81606a9ae8118c3a9a.java)
at com.pega.pegarules.session.internal.mgmt.Executable.__AW_doActivity(Executable.java:3510)
at com.pega.pegarules.session.internal.mgmt.Executable.doActivity(Executable.java)
at com.pega.pegarules.session.internal.mgmt.base.ThreadRunner.__AW_runActivitiesAlt(ThreadRunner.java:646)
... 66 more
...
Steps to Reproduce
- Expose a REST decision service in Load Balancer.
- Route more than 300 requests per second to the service.
Root Cause
A defect or configuration issue in the operating environment.
The issue was caused by the inability to create new JDBC connections due to "ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit" errors on the database.
Issue was caused by the following configuration issues:
- An incorrect configuration of the database connection pool:
The maximum amount of connections was larger than the SESSIONS_PER_USER limit on the database - An unlimited requestor pool used in the Service Package associated with REST decision services.
Requestor pools protect the system and the underlying resources from being overloaded.
A tuned requestor pool applies back pressure when overloaded, slowing down and eventually rejecting requests above a threshold arrival rate.
This threshold should be tuned to the rate of requests which the system is capable of processing.
Resolution
Perform the following local-changes:
- Set a positive value for Maximum Active Requestors in the Pooling tab of the Service.
- Reduce the maximum amount of JDBC Connections in the datasource pool to stay within the SESSIONS_PER_USER limit on the database.
Published August 21, 2017 - 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.