Questions Tagged With ruleenginehttps://answers.axonivy.com/tags/ruleengine/?type=rssquestions tagged <span class="tag">ruleengine</span>enMon, 04 Jun 2018 02:09:18 -0400Can we configure location for Rules in ivy?https://answers.axonivy.com/questions/3306/can-we-configure-location-for-rules-in-ivy<p>Hi ivyteam</p> <p>I'm using ivy 7.0.3 with rules functionality. By default the rule will be stored in <code>&lt;project source&gt;\rules</code> . My question is: Can we configure to load rule from external folder?</p> <p>Thanks</p>trungdvMon, 04 Jun 2018 02:09:18 -0400https://answers.axonivy.com/questions/3306/can-we-configure-location-for-rules-in-ivyivy7xruleengineDifferent mechanism of loading rule between Designer and Enginehttps://answers.axonivy.com/questions/2742/different-mechanism-of-loading-rule-between-designer-and-engine<p>Hi all</p> <p>I have a project that using api <em>ivy.rules.engine</em> to execute Drool rule, i just found a difference between Designer and Engine about the way it load rule package.</p> <p>Here is folder rule i have: <img alt="alt text" src="http://answers.axonivy.com/upfiles/Untitled_RkIO6RW.png"></p> <p>I have two main folders: <em>salaryReference</em> and <em>salaryCalculation</em>, each of them has a child package called <em>demo</em>. </p> <p>Here is the code that i load those rule bases:</p> <pre><code>//salaryRuleBase and basicSalaryRuleBase are IRuleBase type in.salaryRuleBase = ivy.rules.engine.createRuleBase(); in.salaryRuleBase.loadRulesFromNamespace("salaryCalculation"); in.basicSalaryRuleBase = ivy.rules.engine.createRuleBase(); in.basicSalaryRuleBase.loadRulesFromNamespace("salaryReference"); </code></pre> <p>Those two rule base only need to load main package (not childs). To be sure that it load correct package, i put two test rules on child packages, ex:</p> <pre><code>import ch.ivyteam.ivy.environment.Ivy; rule "SalaryCal.demo" when then Ivy.log().info("=========Rule SalaryCal.demo"); end </code></pre> <p>and</p> <pre><code>import ch.ivyteam.ivy.environment.Ivy; rule "SalaryRef.demo" when then Ivy.log().info("=========Rule SalaryRef.demo"); end </code></pre> <p>When executing this code on Designer (Axon ivy 6.3.0.52421), it work exactly as i want. only rules from <em>salaryCalculation/basic.drl</em> and <em>salaryReference/default.drl</em> are loaded and executed. I don't see any logs from test rules. </p> <p>But when i deploy this project to server(same version with Designer) , i saw this line: <img alt="alt text" src="http://answers.axonivy.com/upfiles/Untitled_iNiDG64.png"></p> <p>That a big trouble in our real project because we separate rule by packages and somehow expect rule engine will only load package that we set to them, non recursively. </p> <p>Do you know why do we have this difference? it's quite confused and strange to us</p> <p><a href="https://drive.google.com/file/d/0B6qldkZvvHgHRWM5X1dWb1VvM1k/view?usp=sharing">Here</a> is demo project if you want to try it out</p> <p>Thanks</p>trungdvMon, 10 Jul 2017 06:32:38 -0400https://answers.axonivy.com/questions/2742/different-mechanism-of-loading-rule-between-designer-and-engineivyruleengineRuleEngine - Use more then one object within one decision table.https://answers.axonivy.com/questions/2628/ruleengine-use-more-then-one-object-within-one-decision-table<p>In your example from the ivy demos, you show how to apply an decision table.</p> <pre><code>/* * We need to create a rule session to execute the rules. * * 'out.member' is the input object that stores the information of a member. * This object will be modified during the rule execution. */ in.ruleBaseForDecisionTable.createSession().execute(out.member); </code></pre> <p>Is it also possible, to use more the one object, for example:</p> <pre><code>in.ruleBaseForDecisionTable.createSession().execute(out.member1,out.member2,out.member3); </code></pre> <p>Or is that not provided?</p> <p>regards, Stefan</p>Stefan13Tue, 16 May 2017 08:35:13 -0400https://answers.axonivy.com/questions/2628/ruleengine-use-more-then-one-object-within-one-decision-tableruleenginejava.lang.NoClassDefFoundError: ch/ivyteam/ivy/job/IJobManager when creating instance of Rule Engine in jUnithttps://answers.axonivy.com/questions/2435/java-lang-noclassdeffounderror-ch-ivyteam-ivy-job-ijobmanager-when-creating-instance-of-rule-engine-in-junit<p>Hi all</p> <p>Now i'm using ivy 6.3.0 and also use rule engine was already embedded inside, everything was fine when i use in ivy environment. but when i want to write unit test for the rule (.drl), i got exception in this line:</p> <pre><code>IRuleBase ruleBase = Rules.engine().createRuleBase() </code></pre> <p>Here is exception:</p> <pre><code>com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: ch/ivyteam/ivy/job/IJobManager at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2199) at com.google.common.cache.LocalCache.get(LocalCache.java:3934) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) at com.google.inject.internal.FailableCache.get(FailableCache.java:48) at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50) at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:136) at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:547) at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:884) at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805) at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282) at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214) at com.google.inject.internal.ProvidedByInternalFactory.initialize(ProvidedByInternalFactory.java:57) at com.google.inject.internal.LinkedProviderBindingImpl.initialize(LinkedProviderBindingImpl.java:76) at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:547) at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:884) at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805) at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282) at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214) at com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:1006) at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1038) at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1001) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051) at ch.ivyteam.di.restricted.DiInjector.getInstance(DiInjector.java:43) at ch.ivyteam.ivy.rule.engine.internal.RuleEngine.createRuleBase(RuleEngine.java:14) at ch.axonivy.fintech.standard.guiframework.util.RuleStore.getStatelessRuleSession(RuleStore.java:64) at ch.axonivy.fintech.standard.rulesengine.DroolsService.applyBusinessRules(DroolsService.java:51) at ch.axonivy.fintech.standard.rulesengine.DroolsRuleEngine.executeBusinessRule(DroolsRuleEngine.java:71) at ch.axonivy.fintech.standard.rulesengine.BusinessRuleProvider.executeBusinessRule(BusinessRuleProvider.java:49) at ch.axonivy.fintech.standard.guiframework.core.RuleProcessor.executeBusinessRule(RuleProcessor.java:76) at ch.axonivy.fintech.standard.guiframework.workflow.BaseGuiWorkflow.initGlobalVar(BaseGuiWorkflow.java:316) at ch.axonivy.fintech.standard.qualification.processor.QualificationBusinessDecisionProcessor.initGlobalVarIfNeeded(QualificationBusinessDecisionProcessor.java:28) at ch.axonivy.fintech.mortgage.qualification.service.QualificationBusinessService.proceedQualificationDecision(QualificationBusinessService.java:22) at ch.axonivy.fintech.soba.test.integration.SobaQualificationBusinessServiceTest.should_return_dossier_status_GREEN_when_all_check_result_GREEN(SobaQualificationBusinessServiceTest.java:47) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: ch/ivyteam/ivy/job/IJobManager at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2199) at com.google.common.cache.LocalCache.get(LocalCache.java:3934) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) at com.google.inject.internal.FailableCache.get(FailableCache.java:48) at com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:68) at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:74) at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:29) at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:37) at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:33) at com.google.inject.internal.FailableCache$1.load(FailableCache.java:37) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) ... 57 more Caused by: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: ch/ivyteam/ivy/job/IJobManager at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2199) at com.google.common.cache.LocalCache.get(LocalCache.java:3934) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) at com.google.inject.internal.FailableCache.get(FailableCache.java:48) at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50) at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:136) at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:547) at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:884) at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805) at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282) at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214) at com.google.inject.internal.InjectorImpl.createImplementedByBinding(InjectorImpl.java:749) at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:647) at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:882) at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805) at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282) at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214) at com.google.inject.internal.SingleFieldInjector.&lt;init&gt;(SingleFieldInjector.java:42) at com.google.inject.internal.MembersInjectorStore.getInjectors(MembersInjectorStore.java:131) at com.google.inject.internal.MembersInjectorStore.createWithListeners(MembersInjectorStore.java:98) at com.google.inject.internal.MembersInjectorStore.access$000(MembersInjectorStore.java:37) at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:45) at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:42) at com.google.inject.internal.FailableCache$1.load(FailableCache.java:37) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) ... 72 more Caused by: java.lang.ClassNotFoundException: ch.ivyteam.ivy.job.IJobManager at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 238 more </code></pre> <p>Does anyone know why and is there any ways to write ut test for rules?</p>trungdvThu, 09 Feb 2017 10:28:57 -0500https://answers.axonivy.com/questions/2435/java-lang-noclassdeffounderror-ch-ivyteam-ivy-job-ijobmanager-when-creating-instance-of-rule-engine-in-junitruleengine