Discussion

Ask the Expert - Core Engine / Rules Engine

Ask the Expert - Frank Apap - Banner.png

Meet Frank:

Frank is a Sr. Director of Product Management in the Core Engine portion of the Pega7 platform. Since joining Pega in 1998 as an intern, Frank has had a variety of roles at Pega working in the Pega Consulting organization leading numerous customer projects and helping launch Pega Academy.  He is passionate about helping others harness the powers of the Pega 7 platform.

Message from Frank:

Hi, I’m happy to be part of the “Ask the expert” series.  Over the next 2 weeks I’ll be happy to answer or help find answers to your questions related to the core engine and rules engine of the Pega 7 platform.  What does this entail?  Questions related to rule resolution, circumstancing, rule execution, utility functions, agents, declaratives, collections, business rule engine development and any other related areas. 

 

Ask the Expert Rules

  • Follow the Product Support Community's Community Rules of Engagement
  • This is not a Live Chat - Frank Apap will reply to your questions over the course of this two-week event
  • Questions should be clearly and succinctly expressed
  • Questions should be of interest to many others in the audience
  • Have fun!

Do You Have a Question for Frank? Leave a Comment below!

Group Tags

Comments

Keep up to date on this post and subscribe to comments

June 27, 2016 - 5:02pm

Hi Frank,

I would like to get some ideas about the best practices for using circumstanced rule.

Circumstancing seems like a very flexible way to handle exceptional business rules.

However, since the circumstanced rule is a copy of the base rule, there could be many common logics existing in both base and circumstanced rules, and if we have to modify those common logics, the more circumstanced rules could bring more maintenance overhead.

Another concern with circumstanced rule is the complexity of its rule resolution approach, which may cause more confusion than the clarity.

Chunzhi

June 27, 2016 - 5:11pm
Response to Chunzhi_Hong

Note that some rule types have a checkbox that says to call the base version of the rule, so you can have special cases in the circumstanced version of the rule and common cases handled in the base version.  /Eric

Pega
June 27, 2016 - 5:19pm
Response to Chunzhi_Hong

The choice of what approach to use to specialize logic is often based on some criteria about how the rule needs to be maintained and executed.  Circumstancing is often valuable when there are a set of rules that apply based on a given criteria (e.g. "State = "MA" or "Member"="Gold").  Having this specialization logic as structured meta data makes it easy to find all of the related rules and quickly document all the rules for a given circumstance.  Using circumstance templates can also be helpful in managing more complex specialization.  I often find that one clear indication of a good use of circumstances is if the rules for a given circumstance are managed by a specialized team (think of a team of BAs that manage the requirements for a given state or country).  There are situations, especially "one-off" specializations where the circumstancing concept may be more complex then embedding the logic as a when rule or if condition.   Hope this helps.

June 27, 2016 - 6:09pm
Response to APAPF

Frank,

     If a rule is already circumstanced based on a property, PRPC is not allowing to change the circumstance from property to template. Do you think the future version of PRPC can handle this?

Pega
June 28, 2016 - 7:24am
Response to RamiReddyK

Rami Reddy Kasu wrote:

Frank,

     If a rule is already circumstanced based on a property, PRPC is not allowing to change the circumstance from property to template. Do you think the future version of PRPC can handle this?

Good timing!  As of our upcoming 7.2.1 release you will be able to withdraw the the rule that is property circumstanced and introduce a new instance of the rule with template based circumstancing (in a higher ruleset version).

June 27, 2016 - 5:59pm

Hi Frank,

     From long time, I am having a question regarding security of PRPC Applciations exposed to internet. Then i tried several approaches to hack into PRPC which is hosted on my local environment by login into end user portal and with out login into PRPC itself.

Unfortunately i found ways to hack into PRPC with (login to end user portal) and without login into PRPC.

Now I would like to try it on some of the SSO protected internet exposed sites. Shall I use PEGA Systems internet exposed sites to play around and give the results back to PEGA Systems?

Thanks

Rami Reddy Kasu

Pega
June 28, 2016 - 7:29am
Response to RamiReddyK

Rami Reddy Kasu wrote:

Hi Frank,

     From long time, I am having a question regarding security of PRPC Applciations exposed to internet. Then i tried several approaches to hack into PRPC which is hosted on my local environment by login into end user portal and with out login into PRPC itself.

Unfortunately i found ways to hack into PRPC with (login to end user portal) and without login into PRPC.

Now I would like to try it on some of the SSO protected internet exposed sites. Shall I use PEGA Systems internet exposed sites to play around and give the results back to PEGA Systems?

Thanks

Rami Reddy Kasu

Given the sensitivity of security issues I recommend submitting a request to our support organization to discuss your concerns.  Thanks.

June 27, 2016 - 8:28pm

Hi Frank,

how does one configure a Pega node to act like a business rules engine process only (accessible via REST service)?

i.e.   No case management implementation and no login required to use (except updating/adding new business rules)

So, a REST service would listen for requests to execute the different business rules.

thank you,

Rob

Pega
June 28, 2016 - 7:28am
Response to Rob_Jago

Rob Jago wrote:

Hi Frank,

how does one configure a Pega node to act like a business rules engine process only (accessible via REST service)?

i.e.   No case management implementation and no login required to use (except updating/adding new business rules)

So, a REST service would listen for requests to execute the different business rules.

thank you,

Rob

Generally you do not need to specifically configure a node to act as a BRE.  If you want to optimize the node for BRE applications you could decide to stop any background agents that are not needed for your application (this will depend on exactly what features you are using or not using).  If you want to prevent user logins (rather than just not use them) you can secure PRServlet via your webserver.  Generally, in my experience allowing user login is still helpful for debugging issues or having managers login to review reports.

June 28, 2016 - 8:30am
Response to APAPF

Hi Frank,

thank you for the reply.  It's good to know that nothing special is required to implement a Pega Node as a BRE.  thank you..

June 27, 2016 - 8:54pm

In response to the security question:

If we read the Pega documentation under > Engine Api > Database > Open, we see that it takes a boolean parameter called "aCheckSecurity", which anyone with write-access to activity rule forms can set to "false", and hence open any access group, rule, or work object, make changes, and save it.

From this I infer that basic Pega security relies on the portal limiting users from accessing activity rule forms or any other rules that give access to the java api library.  /Eric

June 28, 2016 - 1:33pm

Frank,

On rare occasions we have recieved the following exception in our server logs:

java.lang.IllegalArgumentException: Assembled classes writer cannot be used for non generated assembled class.

When this happens, the only way we can correct is by clearing the pega cache directories on our application server. While this is simple enough to do, we want to understand this better so we can prevent it from happening in production.

Can you provide any insight to the cause of this error, and potential ways we can prevent the underlying issues from occuring in the future?

Thanks,

-Jon

Pega
June 28, 2016 - 1:42pm
Response to JonathanG0458

Jonathan Greger wrote:

Frank,

On rare occasions we have recieved the following exception in our server logs:

java.lang.IllegalArgumentException: Assembled classes writer cannot be used for non generated assembled class.

When this happens, the only way we can correct is by clearing the pega cache directories on our application server. While this is simple enough to do, we want to understand this better so we can prevent it from happening in production.

Can you provide any insight to the cause of this error, and potential ways we can prevent the underlying issues from occuring in the future?

Thanks,

-Jon

Hi, what version of the platform are you on?  In general this type of question is probably best taken to our support organization so they can help deep dive into what might be causing this.

June 28, 2016 - 1:57pm
Response to APAPF

We are on 7.1.9

Pega
June 28, 2016 - 2:21pm
Response to JonathanG0458

Jonathan Greger wrote:

We are on 7.1.9

When you get the error does it also include a package name after the error message?  Perhaps attaching a full stack trace may help me troubleshoot.  Thanks.

June 28, 2016 - 3:24pm
Response to APAPF

Sure,

Below is a sanitized stack trace. IP addresses, application names, and other sensitive info has been removed and replaced with generic filler text.

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) 2016-06-23 14:34:24,569 [http-/0.0.0.0:8080-5] [TABTHREAD0] [                    ] [Application:03.01.01] (piler.DatabaseCompilationSaver) ERROR hostname.domainname.com|XXX.XXX.XX.XX USER - Problem saving Java sources to database

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) java.lang.IllegalArgumentException: Assembled classes writer cannot be used for non generated assembled class.

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.bootstrap.phase2.jdbc.JdbcJarWriter$VersionlessHelper.checkIfClassIsGenerated(JdbcJarWriter.java:726)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.bootstrap.phase2.jdbc.JdbcJarWriter$WriteConnection.doInsertClass(JdbcJarWriter.java:1041)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.bootstrap.phase2.jdbc.JdbcJarWriter$WriteConnection.insertClass(JdbcJarWriter.java:1010)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.compiler.DatabaseCompilationSaver.saveSources(DatabaseCompilationSaver.java:154)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.compiler.PRCompilerUtil.notifyCompilationListeners(PRCompilerUtil.java:786)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.compiler.PRCompilerEclipse._compile_privact(PRCompilerEclipse.java:602)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.compiler.PRCompilerEclipse$2.run(PRCompilerEclipse.java:510)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at java.security.AccessController.doPrivileged(Native Method)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.compiler.PRCompilerEclipse.compile(PRCompilerEclipse.java:507)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.compiler.PRCompilerEclipse.compile(PRCompilerEclipse.java:470)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.compiler.PRCompilerEclipse.compile(PRCompilerEclipse.java:404)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.compiler.PRCompilerEclipse.compile(PRCompilerEclipse.java:328)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.assembly.FUAInstance.compileClass(FUAInstance.java:2396)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.external.assembly.Assembler.compileClass(Assembler.java:954)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.cache.AssemblerFunctions.writeJavaFileAndCompile(AssemblerFunctions.java:394)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.cache.AssemblyCacheBase.writeJavaFileAndCompileAndLoad(AssemblyCacheBase.java:1610)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.cache.AssemblyCacheBase.buildAndOrLoadJavaClass(AssemblyCacheBase.java:1696)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.cache.AssemblyCacheBase.getGeneratedJava(AssemblyCacheBase.java:3091)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.cache.appcentric.RACacheAppCentricImpl.addEntryToMemoryCache(RACacheAppCentricImpl.java:1161)

14:34:24,580 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.cache.appcentric.RACacheAppCentricImpl.find(RACacheAppCentricImpl.java:1008)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.cache.AssemblyCacheWrapper.find(AssemblyCacheWrapper.java:799)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.assembly.FUAManagerImpl.getInternal(FUAManagerImpl.java:1408)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.assembly.FUAManagerImpl.get(FUAManagerImpl.java:1296)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.generation.internal.PRGenProviderImpl.get(PRGenProviderImpl.java:476)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.StreamBuilderTools.appendStreamKeepProperties(StreamBuilderTools.java:700)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.autostreams.IncludeStreamRuntime.getStream(IncludeStreamRuntime.java:332)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.autostreams.IncludeStreamRuntime.emitIncludeStreamReference(IncludeStreamRuntime.java:252)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.autostreams.AutoStreamRuntimeImpl.emitIncludeStreamReference(AutoStreamRuntimeImpl.java:358)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.sectionBodyIncludeInCell_1(ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.java:304)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.simpleLayoutCell_7(ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.java:801)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.simpleLayout_3(ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.java:826)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.pzLayoutBodyWrapper_3(ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.java:266)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.pzLayout_3(ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.java:839)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.pzSectionBody_1(ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.java:255)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.execute(ra_stream_pzrequestormanagement_c8225c94905370378f4775d3dd71b766.java:100)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.StreamBuilderTools.appendStreamKeepProperties(StreamBuilderTools.java:717)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.autostreams.IncludeStreamRuntime.getStream(IncludeStreamRuntime.java:332)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.autostreams.IncludeStreamRuntime.emitIncludeStreamReference(IncludeStreamRuntime.java:252)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.autostreams.AutoStreamRuntimeImpl.emitIncludeStreamReference(AutoStreamRuntimeImpl.java:358)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.sectionBodyIncludeInCell_2(ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.java:645)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.simpleLayoutCell_2(ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.java:666)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.simpleLayout_2(ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.java:696)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.pzLayoutBodyWrapper_2(ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.java:605)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.pzGroup_1(ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.java:937)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.pzSectionBody_1(ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.java:224)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_section.ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.execute(ra_stream_pzlpsystemmanagementinner_8113b9bcb727a5f4a6aabbe956f0c210.java:100)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.Executable.getStream(Executable.java:4038)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.autostreams.AutoStreamRuleRuntime.getSectionStream(AutoStreamRuleRuntime.java:149)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_harness.ra_stream_pzlpsystemmanagement_923522c2abf869055537af24a7d266e0.includeSectionBody_2(ra_stream_pzlpsystemmanagement_923522c2abf869055537af24a7d266e0.java:3052)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_harness.ra_stream_pzlpsystemmanagement_923522c2abf869055537af24a7d266e0.generatePegaHarnessDiv_6(ra_stream_pzlpsystemmanagement_923522c2abf869055537af24a7d266e0.java:1846)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.html_harness.ra_stream_pzlpsystemmanagement_923522c2abf869055537af24a7d266e0.execute(ra_stream_pzlpsystemmanagement_923522c2abf869055537af24a7d266e0.java:697)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.Executable.getStream(Executable.java:4038)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.Executable.getStream(Executable.java:3866)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.activity.ra_action_displayharnesswithclass_4cc9f9e9cb9b892dd9c83273e3c08a6c.step4_circum0(ra_action_displayharnesswithclass_4cc9f9e9cb9b892dd9c83273e3c08a6c.java:495)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.activity.ra_action_displayharnesswithclass_4cc9f9e9cb9b892dd9c83273e3c08a6c.perform(ra_action_displayharnesswithclass_4cc9f9e9cb9b892dd9c83273e3c08a6c.java:120)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.Executable.doActivity(Executable.java:3505)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.Executable.invokeActivity(Executable.java:10563)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.activity.ra_action_pxopenlandingpage_5428bf8b037f392531a7606f25485c67.step7_circum0(ra_action_pxopenlandingpage_5428bf8b037f392531a7606f25485c67.java:663)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.activity.ra_action_pxopenlandingpage_5428bf8b037f392531a7606f25485c67.perform(ra_action_pxopenlandingpage_5428bf8b037f392531a7606f25485c67.java:176)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.Executable.doActivity(Executable.java:3505)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.Executable.invokeActivity(Executable.java:10563)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.activity.ra_action_douiaction_e7228a040c3bf89efe31545c6149a3d4.step16_circum0(ra_action_douiaction_e7228a040c3bf89efe31545c6149a3d4.java:1744)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pegarules.generated.activity.ra_action_douiaction_e7228a040c3bf89efe31545c6149a3d4.perform(ra_action_douiaction_e7228a040c3bf89efe31545c6149a3d4.java:321)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.Executable.doActivity(Executable.java:3505)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.base.ThreadRunner.runActivitiesAlt(ThreadRunner.java:646)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.mgmt.PRThreadImpl.runActivitiesAlt(PRThreadImpl.java:461)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.engineinterface.service.HttpAPI.runActivities(HttpAPI.java:3358)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.external.engineinterface.service.EngineAPI.processRequestInner(EngineAPI.java:385)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.GeneratedMethodAccessor97.invoke(Unknown Source)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at java.lang.reflect.Method.invoke(Method.java:498)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.PRSessionProviderImpl.performTargetActionWithLock(PRSessionProviderImpl.java:1270)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:1008)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.PRSessionProviderImpl.doWithRequestorLocked(PRSessionProviderImpl.java:841)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.external.engineinterface.service.EngineAPI.processRequest(EngineAPI.java:331)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.engineinterface.service.HttpAPI.invoke(HttpAPI.java:852)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineImpl._invokeEngine_privact(EngineImpl.java:315)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineImpl$4.run(EngineImpl.java:268)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at java.security.AccessController.doPrivileged(Native Method)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.engineinterface.etier.impl.EngineImpl.invokeEngine(EngineImpl.java:265)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.session.internal.engineinterface.etier.ejb.EngineBean.invokeEngine(EngineBean.java:225)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at java.lang.reflect.Method.invoke(Method.java:498)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethod(PRBootstrap.java:370)

14:34:24,581 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:411)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:223)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingException(AppServerBridgeToPega.java:245)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.etier.ejb.EngineBeanBoot.invokeEngine(EngineBeanBoot.java:168)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.GeneratedMethodAccessor84.invoke(Unknown Source)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at java.lang.reflect.Method.invoke(Method.java:498)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.tx.EjbBMTInterceptor.handleInvocation(EjbBMTInterceptor.java:104)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.tx.BMTInterceptor.processInvocation(BMTInterceptor.java:60)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:43)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.security.AuthorizationInterceptor.processInvocation(AuthorizationInterceptor.java:116)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:86)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.component.interceptors.EjbExceptionTransformingInterceptorFactories$2.processInvocation(EjbExceptionTransformingInterceptorFactories.java:103)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:185)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.etier.interfaces.EngineLocal$$$view18.invokeEngine(Unknown Source)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.priv.context.JNDIEnvironment.invokeEngineInner(JNDIEnvironment.java:278)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.priv.context.JNDIEnvironment.invokeEngine(JNDIEnvironment.java:223)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.web.impl.WebStandardImpl.makeEtierRequest(WebStandardImpl.java:574)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.web.impl.WebStandardImpl.doPost(WebStandardImpl.java:374)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.GeneratedMethodAccessor96.invoke(Unknown Source)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at java.lang.reflect.Method.invoke(Method.java:498)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethod(PRBootstrap.java:370)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.bootstrap.PRBootstrap.invokeMethodPropagatingThrowable(PRBootstrap.java:411)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethodPropagatingThrowable(AppServerBridgeToPega.java:223)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.boot.internal.extbridge.AppServerBridgeToPega.invokeMethod(AppServerBridgeToPega.java:272)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.web.servlet.WebStandardBoot.doPost(WebStandardBoot.java:121)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at com.pega.pegarules.internal.web.servlet.WebStandardBoot.doGet(WebStandardBoot.java:92)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at java.lang.reflect.Method.invoke(Method.java:498)

14:34:24,582 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:264)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:262)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at java.security.AccessController.doPrivileged(Native Method)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at javax.security.auth.Subject.doAsPrivileged(Subject.java:549)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:296)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:156)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:288)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:59)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:197)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at java.security.AccessController.doPrivileged(Native Method)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:420)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.web.session.ClusteredSessionValve.handleRequest(ClusteredSessionValve.java:134)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.web.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:99)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.web.session.JvmRouteValve.invoke(JvmRouteValve.java:92)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.web.session.LockingValve.invoke(LockingValve.java:64)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)

14:34:24,583 INFO  [stdout] (Dispatcher-Thread-111) at java.lang.Thread.run(Thread.java:745)

-Jon

Pega
June 28, 2016 - 7:23pm
Response to JonathanG0458

Do you happen to be running with Java Security enabled?

June 28, 2016 - 10:27pm
Response to JonathanG0458

You can open a ticket with GCS to investigate further. We have a similar issue with HFix-24731 for Websphere. Most likely you need a port to jboss.

June 29, 2016 - 10:51am

Hi Frank,

Circumstanced rules have a limitation while developing in branches. The base rule must be saved into branch and then the circumstanced rule. This  causes issues for code base in large parallel development projects. There may be another team who has to really change the base rule, but they will  have to take care of merge conflicts, manual verification...etc with base rule versions in other branches even though those were just saved because of the limitation. What are your thoughts on this ?

Pega
June 29, 2016 - 12:59pm
Response to RaviR054

Ravi Ramineni wrote:

Hi Frank,

Circumstanced rules have a limitation while developing in branches. The base rule must be saved into branch and then the circumstanced rule. This  causes issues for code base in large parallel development projects. There may be another team who has to really change the base rule, but they will  have to take care of merge conflicts, manual verification...etc with base rule versions in other branches even though those were just saved because of the limitation. What are your thoughts on this ?

Hi Ravi,

I was able to create a circumstanced rule in a branch without having to copy the base rule into the branch.  Can you verify the behavior? Perhaps show a screenshot of what happens when you try to circumstance the rule without the base rule in the branch.

Also, it may be helpful to know what version of the platform you are on.

Thanks.

June 29, 2016 - 2:55pm

Hi Frank

How do you switch your ruleset stack midstream in PRPC 7.1.9?

WHen I say midstream I mean for example within the activity that a REST Service would call.

I've tried switching access groups like called setActiveAccessGroup but it still does not seem to switch my ruleset stack.

Keep in mind also my requestor I believe would be an APP requestor

Pega
June 30, 2016 - 7:59am
Response to TerranceK

Terrance Krolak wrote:

Hi Frank

How do you switch your ruleset stack midstream in PRPC 7.1.9?

WHen I say midstream I mean for example within the activity that a REST Service would call.

I've tried switching access groups like called setActiveAccessGroup but it still does not seem to switch my ruleset stack.

Keep in mind also my requestor I believe would be an APP requestor

setActiveAccessGroup is the preferred mechanism IF the access group is an access group listed as an additional access group in the user's profile.  You didn't mention if your service requestor (APP) is authenticated or unauthenticated.  If it was authenticated than any access group passed to setActiveAccessGroup would need to be listed in that operators record.  If unauthenticated then setActiveAccessGroup will not work.  There are lower level APIs that may fit your use case.  Can you elaborate on what you are trying to achieve (from a high level) and if the service is authenticated or unauthenticated?

June 30, 2016 - 12:22pm
Response to APAPF

This is for our DevOps project where we are trying to build a continuous integration feature in for deployment but we want to run unit tests first for the target application to determine if we should deploy or not based on the results of the unit tests.

Its not authenticated.  I'm trying call a REST service and the REST service will then execute Pega unit tests for a particular target application (and ruleset stack).  So the REST service is associated with a service package pointing to some more generic access group containing the ruleset the service is in and when the service calls an activity I then need the activity to execute the unit tests for the target application.  I was going to pass the name of the target applications access group into the REST service and have the activity that it calls switch to it (-ie- switch ruleset stacks) so it then is able to run the units tests that are in that new ruleset stack.

Pega
June 30, 2016 - 4:06pm
Response to TerranceK

Terrance Krolak wrote:

This is for our DevOps project where we are trying to build a continuous integration feature in for deployment but we want to run unit tests first for the target application to determine if we should deploy or not based on the results of the unit tests.

Its not authenticated.  I'm trying call a REST service and the REST service will then execute Pega unit tests for a particular target application (and ruleset stack).  So the REST service is associated with a service package pointing to some more generic access group containing the ruleset the service is in and when the service calls an activity I then need the activity to execute the unit tests for the target application.  I was going to pass the name of the target applications access group into the REST service and have the activity that it calls switch to it (-ie- switch ruleset stacks) so it then is able to run the units tests that are in that new ruleset stack.

In this case I believe you may need to use the tools.getThread().getAuthorization().setRuleSetList APIs.  They are documented in the engine API javadocs under PRAuthorization class.  I'm going to continue to check if there are other options as well.

July 1, 2016 - 3:00pm
Response to APAPF

It would seem to imply that using this I would need to gather the list of rulesets instead of just be able to specify an application or access group?

June 29, 2016 - 10:00pm

What are The Significant, potential features in Pega7x versions over Pega6x versions that are useful for

1) DEVELOPERs and

2) END Users.

Thanks,

Pega
June 30, 2016 - 8:28am
Response to RAJAKUMARB0603

Short answer: A LOT!

Seriously, since Pega6, Pega7 has introduced 100s if not 1000s of features that impact developer productivity, platform performance and stability, end user experience and more. Off of the top of my head some of the areas I'd be most excited about:

  • Live Data access - THrough the use of the data page construct retrieving and access data (both internal and external) is much simpler and more efficient than it ever was.  The auto populate properties capability can almost feel like your data magically appears when you need it.
  • "Huuuge" improvements in UI modeling (Live UI) - Working in the core engine I can't really do justice to all of the large improvements in this area.  It's now much easier to build beautiful interfaces without HTML or JS.  Also our generated code has become more efficient.
  • Tons of improvements to building mobile applications from within the model
  • Pega 7 Express - an amazing experience for quickly getting application development moving quickly and helping business users get started building an application.
  • Multiple Built On Applications - Allows for more robust application modeling which in return reduces complexity in maintenance.
  • So many more.... Check out some of these what's new documents for more detail on new capabilities:

https://pdn.pega.com/products/pega-717

https://pdn.pega.com/products/pega-718

https://pdn.pega.com/products/pega-719

https://pdn.pega.com/products/pega-72

https://pdn.pega.com/products/pega-721

June 30, 2016 - 4:40am

Hi Frank,

from an academic standpoint, we shouldn't be using any activities at all. Yet in the field and as You most certainly know, activities can't be avoided at some point. Unfortunately, we're being penalized a lot by guardrails for using them even where they are necessary (e.g. integration).

Having this in mind, what is the roadmap for activities (and its alternatives)? Is it a strategic goal to get rid of them after all?

Thanks + regards

Wojtek

Pega
June 30, 2016 - 8:30am
Response to Wojtek

Wojtek Nowak wrote:

Hi Frank,

from an academic standpoint, we shouldn't be using any activities at all. Yet in the field and as You most certainly know, activities can't be avoided at some point. Unfortunately, we're being penalized a lot by guardrails for using them even where they are necessary (e.g. integration).

Having this in mind, what is the roadmap for activities (and its alternatives)? Is it a strategic goal to get rid of them after all?

Thanks + regards

Wojtek

Our roadmap is to continue to work to reduce the need for activities by providing additional capabilities in the model in rules like data pages and transforms.  You mentioned integration as a case where activities are still required.  In many cases integration can be achieved with data pages, do you have a use case (or 2) where integration still requires activities?

June 30, 2016 - 12:41pm
Response to APAPF

Thank You, Frank! I am using 7.1.9, hence I don't know whether later versions are improving on this.

As far as integration goes, yes, You can use a Data Page on Connector side of things. On the Service side (REST, SOAP, Java) and AFAIK, there's really no other way than activities. Is there?

Pega
June 30, 2016 - 4:04pm
Response to Wojtek

Wojtek Nowak wrote:

Thank You, Frank! I am using 7.1.9, hence I don't know whether later versions are improving on this.

As far as integration goes, yes, You can use a Data Page on Connector side of things. On the Service side (REST, SOAP, Java) and AFAIK, there's really no other way than activities. Is there?

Yes that is an area that still requires some activities to be written.  We continue to try to find ways to eliminate the need for the activities.

Pega
June 30, 2016 - 3:44pm
Response to APAPF

Hi Frank, Good morning!

>>> do you have a use case (or 2) where integration still requires activities?

  • we've to provide/configure activity rules in Integrator and Assignment service flow shapes.
    • integrator and assignment service flow shape provides OOTB error handling via ConnectionProblem flow rule.

Please share your thoughts/comments, Thank you!

psahukaru

Pega
July 1, 2016 - 1:38pm
Response to sahup1

Yes, these are areas that still use activities when you wish to extend the behavior.

July 1, 2016 - 2:23pm
Response to APAPF

Hi Frank,

As we started using Pega 7 in our env, we would like to know the new list of API's introduced as a part of core engine. Do you have a list of API's and the documentation for it? Or, if you can give me the link where I can find the consolidated list for all the new API's in Pega 7.

Thank you and have a nice weekend.

Ravi Kumar.

July 1, 2016 - 2:22pm

Hi Frank,

As we started using Pega 7 in our env, we would like to know the new list of API's introduced as a part of core engine. Do you have a list of API's and the documentation for it? Or, if you can give me the link where I can find the consolidated list for all the new API's in Pega 7.

Thank you and have a nice weekend.

Ravi Kumar.

Pega
July 1, 2016 - 2:31pm
Response to Ravi Kumar Pisupati

Ravi Kumar Pisupati wrote:

Hi Frank,

As we started using Pega 7 in our env, we would like to know the new list of API's introduced as a part of core engine. Do you have a list of API's and the documentation for it? Or, if you can give me the link where I can find the consolidated list for all the new API's in Pega 7.

Thank you and have a nice weekend.

Ravi Kumar.

Hi, when you say core engine APIs are you referring to the public Java API?  We also have the process engine API (rules) and JS APIs.  The Public Java API can be found from your prhelp deployment (usually prhelp/javadocs/index.html ).  It does not contain a "delta" unfortunately.  Most of this API does not changes from version to version.  I will look further to see if we have an easy way to provide you with a list of APIs that were added.

July 1, 2016 - 2:34pm
Response to APAPF

Thanks for the quick reply, Frank. Will wait for your reply and at the same time I will keep checking the help system.

Thanks,

Ravi Kumar.

July 3, 2016 - 12:42am

Hi Frank,

In Datapages, when the  value for "Structure"  fields is selected as "List"  -- we are seeing one option :  'Access pages with user defined keys' and when Checking that option , it is displaying the section - "PAGE LIST KEYS" and "Allow multiple pages per key"

So i have 2 Questions here :

1) What is the use/when do we actually use "Allow multiple pages per key"

2) What is the significant difference betweeen  'Parameterized' Data pages   vs  'Access pages with user defined keys'

Thanks,

Raj

Pega
July 5, 2016 - 3:28pm
Response to RAJAKUMARB0603

Allow multiple keys per page allows you to return a pagelist for a key instead of a single page.  So in a situation where you "key" is not unique accessing the data page by the key returns you a pagelist and not a page.

The difference between parameterized pages and access pages with user defined keys is a subtle but important one.  Take "customer address page" as one example.  Using parameterized pages you may have the acct # as the parameter, this means when you access the page for Acct=A1234 a separate page is created and the load activity is run for A1234.  When you access it for B5678 the same thing occurs again (load activity / connector is run).  With user defined keys the entire set of data is loaded at once and the key provides fast lookups of that data.  An example of that might be a list of valid "Product Codes".  You would bring the entire list into memory with one call to the load activity, then you could lookup a product codes description based on the user defined key (ProductID).

Hope that helps!

July 4, 2016 - 2:46am

Hi Frank,

Do we have any document to understand how Lock Cache works?

In few cases, we are facing the issue with lock cache.. Eg: Lock should be acquired when Work object was opened to perform the assignment (default locking in use). But while opening the assignment, it says lock was already owned, but i couldn't see any entry in the pr_sys_locks table.

LockManagerImpl and Lockcache loggers are enabled and tried to debug,  it says lock hit/found by LockCache impl class. As the lock was not present  in pr_sys_locks, after running through few assignments and when i am resolving the case it throws

commit error saying lock was not held.

PRPC Version: 7.2

July 5, 2016 - 5:10am
Response to BharattejaGangi1

The root cause for the lock issue was, we have multiple nodes that are running in different time zones and due to the difference in time zones, the lock was treated as a soft lock whenever the work object was processed/access by another node with different time zone.

As the expiredatetime in pr_sys_locks was not maintained in GMT, this might be the expected behavior .. maintaining the same time zone in all servers will resolve the issue

July 5, 2016 - 7:10am
Response to BharattejaGangi1

Have you observed any issues other than unexpected soft lock ?

Does PRPC functions normally at all if the AP server runs on a different time zone than that of the DB server?

Pega
July 7, 2016 - 12:59am
Response to Chunzhi_Hong

The issue is having different time zones w.r.t to App Server, so far we haven't observed other issues 

Pega
July 5, 2016 - 4:07pm
Response to BharattejaGangi1

Yes, as mentioned in the installation guide the appservers and DB should have the same timezone.

See page 14 of https://pdn.pega.com/documents/pega-721-platform-installation-guide-oracle-weblogic-server-and-oracle

 

July 7, 2016 - 11:32am

Hello Frank,

We have used performance monitoring tools like Dynatrace, yslow, and have the below recommendations. How can we address the below? Do you have plans to address the below issues in your next version of Pega? Are there any local workarounds for time being?

Combine JavaScript and CSS into individual files instead of multiple
By having fewer files to retrieve, the browser and web server communicate less. This means fewer round trips between the two.

Minify JavaScript and CSS where available
Minifying the JavaScript and CSS would reduce the size of the content being retrieved.

Reduce content size with gzip
Just like minifying, this reduces the size of the content being retrieved from the web browser, allowing the page to load faster.

Pega
July 7, 2016 - 3:26pm
Response to Harish Adama

We are always looking to improve the performance of the platform especially the way HTML/CSS is constructed and transferred.  We are actively looking at ways to greatly reduce the amount of content that goes "across the wire" which should help with at least the first two areas listed above.  I'm not aware of any local ways you can easily enact these recommendations.  

July 8, 2016 - 10:38am

Hi 

I am getting the below Error while creating the Work object trough agent or manually running the standalone activity

"Cannot obtain a lock on instance XXX, as Requestor null already has the lock ".

Can you please provide any inputs to overcome the above issue

Pega
July 8, 2016 - 4:12pm
Response to KrishnaBabu999

This sounds like a requestor already has a lock on the object, the requestor null part is a bit confusing.  Can you elaborate further on what else is going on in the system?

You can also use the All Locks report to see if a lock is held:
Process & Tools | Tools | Work Admin | All Locks

July 11, 2016 - 11:21am

Thank you to everyone on a successful Ask the Expert session with Frank Apap!

If you have additional questions, please continue to Write a Post in our main Community area!

Marissa | Community Moderator | Pegasystems Inc.