[jboss-jira] [JBoss JIRA] Closed: (JBRULES-2202) Generated types should be Serializable

Edson Tirelli (JIRA) jira-events at lists.jboss.org
Fri Jul 10 12:25:29 EDT 2009


     [ https://jira.jboss.org/jira/browse/JBRULES-2202?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Edson Tirelli closed JBRULES-2202.
----------------------------------

    Resolution: Done


Fixed. Thanks for reporting.

> 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.0.FINAL, 5.0.1.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