[jboss-jira] [JBoss JIRA] Created: (JBRULES-2202) Generated types should be Serializable
Edson Tirelli (JIRA)
jira-events at lists.jboss.org
Thu Jul 9 17:24:29 EDT 2009
Generated types should be Serializable
--------------------------------------
Key: JBRULES-2202
URL: https://jira.jboss.org/jira/browse/JBRULES-2202
Project: JBoss Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-compiler, drools-core
Affects Versions: 5.0.1.FINAL, 5.0.0.FINAL
Reporter: Edson Tirelli
Assignee: Edson Tirelli
Fix For: 5.1.0.M1
Hello,
Recently I've been working with Drools version 5.0.1 to set up an event processor. While doing so I have come
across difficulties with the accumulate function, in that it will always throw a ClassCastException
when inserting events that are declared within my drl file. To illustrate this I've set up an example which is
shown below. I've search Google and the mailing list for several hours, but the only way past this problem
appears to be that I will have to declare a class externally and make sure it implements Serializable. Does
anyone has suggestions for another approach? Secondly, I would have assumed that since Drools was
compiling these internally declared classes, that Serializable would have been implemented automatically. So
is this a result of the generated class not implementing Serializable, or have I missed something in my rules
file? Thanks.
The important part of my drl file is:
declare TestEvent
@role( event )
@expires(10s)
id : String
end
#This rule works fine when 'Accumulate Count' is commented out, and is used to make
#sure that the event inserting has worked.
rule "Is It There"
when
TestEvent() from entry-point "test"
then
System.out.println("Found a TestEvent.");
end
#This rule throws a ClassCastException when a TestEvent is inserted.
rule "Accumulate Count"
when
$n : Number() from accumulate($t : TestEvent() from entry-point "test", count($t))
then
System.out.println("Found " + $n + " events.");
end
The unit test does this:
FactType testEventType = session.getKnowledgeBase().getFactType("com.drools.test", "TestEvent");
for(int i = 0; i < 10; i++){
Object testEvent = testEventType.newInstance();
testEventType.set(testEvent, "id", "id");
WorkingMemoryEntryPoint mainStream = session.getWorkingMemoryEntryPoint("test");
mainStream.insert(event);
session.fireAllRules();
}
The exception I receive is:
org.drools.RuntimeDroolsException: java.lang.ClassCastException: com.drools.test.TestEvent cannot be cast to java.io.Serializable
at org.drools.rule.Accumulate.accumulate(Accumulate.java:172)
at org.drools.reteoo.AccumulateNode.modifyTuple(AccumulateNode.java:424)
at org.drools.reteoo.AccumulateNode.assertObject(AccumulateNode.java:284)
at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:42)
at org.drools.reteoo.PropagationQueuingNode$AssertAction.execute(PropagationQueuingNode.java:326)
at org.drools.reteoo.PropagationQueuingNode.propagateActions(PropagationQueuingNode.java:221)
at org.drools.reteoo.PropagationQueuingNode$PropagateAction.execute(PropagationQueuingNode.java:394)
at org.drools.common.AbstractWorkingMemory.executeQueuedActions(AbstractWorkingMemory.java:1486)
at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:158)
at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:122)
at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:80)
at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:28)
at com.drools.test.MyUnitTest.testEvents(EvaluationTest.java:66)
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.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:160)
at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:233)
at org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(SpringMethodRoadie.java:333)
at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217)
at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197)
at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:160)
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.ClassCastException: com.drools.test.TestEvent cannot be cast to java.io.Serializable
at org.drools.base.accumulators.JavaAccumulatorFunctionExecutor.accumulate(JavaAccumulatorFunctionExecutor.java:110)
at org.drools.rule.Accumulate.accumulate(Accumulate.java:164)
... 36 more
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list