Re: [rules-users] Process variables in split/action nodes
Yes! It works with drools 5.1.0! Thanks Kris!! -- Renato Herebia ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Process variables in split/action nodes
Renato, You stumbled on a bug that was still in Drools 5.0. There are issues in using an Integer variable inside constraints (as the constraint will try to interpret it as a String). This has been fixed a long time ago in the snapshot releases: http://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/ As workaround, you could also change the type of your variable to Object and then use java.lang.Integer as class. Kris Quoting Renato Herebia : > Kris, thanks for your answer... > > I've tried to access the variable in a split constraint (return count > != 1;) > with mvel dialect and I got this trace in runtime: > > Uncaught exception on client > java.lang.RuntimeException: unable to execute ReturnValueEvaluator > at > org.drools.workflow.instance.impl.ReturnValueConstraintEvaluator.evaluate(ReturnValueConstraintEvaluator.java:124) > at > org.drools.workflow.instance.node.SplitInstance.internalTrigger(SplitInstance.java:62) > at > org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111) > at > org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141) > at > org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128) > at > org.drools.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:37) > at > org.drools.workflow.instance.node.EventBasedNodeInstance.triggerCompleted(EventBasedNodeInstance.java:96) > at > org.drools.workflow.instance.node.EventBasedNodeInstance.triggerCompleted(EventBasedNodeInstance.java:77) > at > org.drools.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:192) > at > org.drools.workflow.instance.node.HumanTaskNodeInstance.triggerCompleted(HumanTaskNodeInstance.java:74) > at > org.drools.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:246) > at > org.drools.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:222) > at > org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:258) > at > org.drools.process.instance.impl.DefaultWorkItemManager.completeWorkItem(DefaultWorkItemManager.java:96) > at > org.drools.process.workitem.wsht.WSHumanTaskHandler$GetCompletedTaskResponseHandler.execute(WSHumanTaskHandler.java:282) > at > org.drools.task.service.TaskClientHandler.messageReceived(TaskClientHandler.java:67) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:752) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:414) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:49) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:832) > at > org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:379) > at > org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:173) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:414) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:49) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:832) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$HeadFilter.messageReceived(DefaultIoFilterChain.java:616) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:414) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:408) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:578) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:540) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:532) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:58) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor$Worker.run(AbstractPollingIoProcessor.java:857) > at > org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) > at java.lang.Thread.run(Thread.java:619) > Caused by: java.lang.ClassCastException: java.lang.Integer cannot be > cast to > java.lang.String > at > org.mvel2.math.MathProcess
Re: [rules-users] Process variables in split/action nodes
Kris, thanks for your answer... I've tried to access the variable in a split constraint (return count != 1;) with mvel dialect and I got this trace in runtime: Uncaught exception on client java.lang.RuntimeException: unable to execute ReturnValueEvaluator at org.drools.workflow.instance.impl.ReturnValueConstraintEvaluator.evaluate(ReturnValueConstraintEvaluator.java:124) at org.drools.workflow.instance.node.SplitInstance.internalTrigger(SplitInstance.java:62) at org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111) at org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141) at org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128) at org.drools.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:37) at org.drools.workflow.instance.node.EventBasedNodeInstance.triggerCompleted(EventBasedNodeInstance.java:96) at org.drools.workflow.instance.node.EventBasedNodeInstance.triggerCompleted(EventBasedNodeInstance.java:77) at org.drools.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:192) at org.drools.workflow.instance.node.HumanTaskNodeInstance.triggerCompleted(HumanTaskNodeInstance.java:74) at org.drools.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:246) at org.drools.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:222) at org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:258) at org.drools.process.instance.impl.DefaultWorkItemManager.completeWorkItem(DefaultWorkItemManager.java:96) at org.drools.process.workitem.wsht.WSHumanTaskHandler$GetCompletedTaskResponseHandler.execute(WSHumanTaskHandler.java:282) at org.drools.task.service.TaskClientHandler.messageReceived(TaskClientHandler.java:67) at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:752) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:414) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:832) at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:379) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:173) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:414) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:49) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:832) at org.apache.mina.core.filterchain.DefaultIoFilterChain$HeadFilter.messageReceived(DefaultIoFilterChain.java:616) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:414) at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:408) at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:578) at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:540) at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:532) at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:58) at org.apache.mina.core.polling.AbstractPollingIoProcessor$Worker.run(AbstractPollingIoProcessor.java:857) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at org.mvel2.math.MathProcessor.getInternalNumberFromType(MathProcessor.java:555) at org.mvel2.math.MathProcessor._doOperations(MathProcessor.java:155) at org.mvel2.math.MathProcessor.doOperations(MathProcessor.java:79) at org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:102) at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:37) at org.mvel2.ast.ReturnNode.getReducedValueAccelerated(ReturnNode.java:45) at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85) at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:107) at org.mvel2.MVEL.executeExpression(MVEL.java:978) at
Re: [rules-users] Process variables in split/action nodes
You should use a code constraint, that allows you to access the variable directly (if you define them as variables of your process at least, click the background of your process and edit the "variables" property). For example, if you have a variable "count", you can have a code constraint (MVEL or Java dialect) like: return count > 10; Also, inside your actions, you also have direct access to your process variables, so your action could be written like this: kcontext.setVariable("count", count++); Kris Quoting Renato Herebia : > Hi! > > How can I access process variables inside split nodes, in fact, in > split > contraints? > > I accessed a process variable named "count" in an action node like > that: > > Integer c = (Integer) kcontext.getVariable("count"); > kcontext.setVariable("count", ++c); > > But, in a split constraint doesn't work. So, my doubts are: > - How is the way in split constraints? > - Is there a simpler way to access process variables in action node? > > Thanks! > > -- > Renato Herebia > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
[rules-users] Process variables in split/action nodes
Hi! How can I access process variables inside split nodes, in fact, in split contraints? I accessed a process variable named "count" in an action node like that: Integer c = (Integer) kcontext.getVariable("count"); kcontext.setVariable("count", ++c); But, in a split constraint doesn't work. So, my doubts are: - How is the way in split constraints? - Is there a simpler way to access process variables in action node? Thanks! -- Renato Herebia ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users