[jboss-jira] [JBoss JIRA] Closed: (JBRULES-2403) Accumulate with from chaining fails with Rule Compilation Error when reverse is used
Edson Tirelli (JIRA)
jira-events at lists.jboss.org
Thu Jul 29 01:56:33 EDT 2010
[ https://jira.jboss.org/browse/JBRULES-2403?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Edson Tirelli closed JBRULES-2403.
----------------------------------
> Accumulate with from chaining fails with Rule Compilation Error when reverse is used
> ------------------------------------------------------------------------------------
>
> Key: JBRULES-2403
> URL: https://jira.jboss.org/browse/JBRULES-2403
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: drools-compiler
> Affects Versions: 5.0.1.FINAL
> Environment: Eclipse Galileo, JDK 1.6 (64-bit), Drools 5.0.1, Vista 64-bit
> Reporter: hoogenbj
> Assignee: Edson Tirelli
> Fix For: 5.1.0.FINAL
>
>
> Hi,
> While trying to upgrade from Drools 4.0.7 to Drools 5.0.1 I noticed a problem with the rules that use accumulate-with-from-chaining.
> If there is a reverse action, then I get a Rule Compilation error:
> java.lang.RuntimeException: Rule Compilation error : [Rule name='Accumulate with From Chaining']
> org/drools/Rule_Accumulate_with_From_Chaining_0.java (11:62) : File org/drools/Rule_Accumulate_with_From_Chaining_0.java, Line 11, Column 62: Operator "[" expected
> at org.drools.TestKnowledgeBuilder.test(TestKnowledgeBuilder.java:34)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
> at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
> at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
> at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
> at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> It works fine with Drools 4.0.7.
> If the "reverse" is removed, then the rule compiles fine. So I guess that is the workaround - but only if you don't need the reverse.
> I have an eclipse project that demonstrates the problem but there does not seem to be a way to upload it.
> Here's what the rule looks like:
> package org.drools;
> import java.util.List;
> import java.util.ArrayList;
> global java.util.List results;
> rule "Accumulate with From Chaining" salience 80
> when
> $cheesery : Cheesery()
> $person : Person( $likes : likes )
> $list : List( size > 2 )
> from accumulate( $cheese : Cheese( type == $likes ) from $cheesery.getCheeses(),
> init( List l = new ArrayList(); ),
> action( l.add( $cheese ); ),
> reverse( l.remove( $cheese ); ),
> result( l ) )
> then
> results.add( $list );
> end
> I modified test_AccumulateWithFromChaining.drl in drools-5.0\src\drools-compiler\src\test\resources\org\drools\integrationtests for my test.
> Here is my test code:
> Properties props = new Properties();
> props.setProperty("drools.dialect.java.compiler", "JANINO");
> KnowledgeBuilderConfiguration config = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(props, this.getClass().getClassLoader());
> KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(config);
> knowledgeBuilder.add(ResourceFactory.newInputStreamResource(getClass().getResourceAsStream( "test_AccumulateWithFromChaining.drl" )), ResourceType.DRL);
> if (knowledgeBuilder.hasErrors()) {
> throw new RuntimeException(knowledgeBuilder.getErrors().toString());
> }
> which results in a RuntimeException.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list