[jboss-jira] [JBoss JIRA] (JBRULES-3622) ClassCastException When Using Temporal Operator overlappedby

Julian Klein (JIRA) jira-events at lists.jboss.org
Mon Sep 10 14:27:33 EDT 2012


Julian Klein created JBRULES-3622:
-------------------------------------

             Summary: ClassCastException When Using Temporal Operator overlappedby
                 Key: JBRULES-3622
                 URL: https://issues.jboss.org/browse/JBRULES-3622
             Project: Drools
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: drools-core  (expert)
    Affects Versions: 5.4.0.Final
         Environment: Mac OSX 10.6.8, Java 6
            Reporter: Julian Klein
            Assignee: Mark Proctor


When trying to determine if two dates overlap using the overlappedby keyword with parameters in a rule, Drools throws a ClassCastException.  If I use another temporal keyword such as "overlaps" with parameters, the rule works as expected.   I am using a StatefulKnowledgeSession and this occurs after I insert facts into the session.  The facts I insert are of a different type than TimeBoxedFact.  The LHS is as follows:
{code}
      $encD : TimeBoxedFact(yearRecorded == durationCycleYear  )
      $encN : TimeBoxedFact( ID != $encD.ID,   datetimeRecorded coincides[1ms,90d] $encD.datetimeRecorded )
{code}
durationCycleYear is a global Integer equal to the four digit year (e.g. 2012 or 1998; declared as follows "global Integer durationCycleYear;")

Here is what the TimeBoxedFact object looks like:
{code}
package com.company;

import java.io.Serializable;
import java.sql.Timestamp;

public class TimeBoxedFact implements Serializable{

    protected Timestamp datetime = null;
    protected int ID;
    private static final long serialVersionUID = -7640003804511140444L;

    
    public int getID() {
        return this.ID;
    }
    
    public void setID(int id) {
        this.ID = id;
    } 

    public Timestamp getDatetimeRecorded() {
        return this.datetime;
    }
    public java.util.Date getDateRecorded(){
        return new java.util.Date(this.datetime.getTime());
    }
    public int getYearRecorded(){
        return calendarDateRecorded.get(Calendar.YEAR);
    }

    
    public void setDatetimeRecorded(Timestamp dt) {
        this.datetime = dt;

        //create the calendar object
        calendarDateRecorded = Calendar.getInstance();
        calendarDateRecorded.setTimeInMillis(datetime.getTime());
    } 

}
{code}
The stack trace is as follows:

{code}
java.lang.ClassCastException: org.drools.common.DefaultFactHandle cannot be cast to com.company.TimeBoxedFact
	at org.drools.base.com.company.TimeBoxedFact1639733674$getDatetimeRecorded.getValue(Unknown Source)
	at org.drools.base.extractors.BaseObjectClassFieldReader.isNullValue(BaseObjectClassFieldReader.java:179)
	at org.drools.base.ClassFieldReader.isNullValue(ClassFieldReader.java:179)
	at org.drools.rule.VariableRestriction$ObjectVariableContextEntry.updateFromTuple(VariableRestriction.java:327)
	at org.drools.common.DoubleBetaConstraints.updateFromTuple(DoubleBetaConstraints.java:137)
	at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:84)
	at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:196)
	at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:71)
	at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:98)
	at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:196)
	at org.drools.reteoo.SingleLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:145)
	at org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:154)
	at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)
	at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:382)
	at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:364)
	at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:235)
	at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:240)
	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:337)
	at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:298)
	at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:888)
	at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:847)
	at org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:269)
	at com.company.RulesRunner.persistAndInsertBRE(RulesRunner.java:267)
	at com.company.RulesRunner.runRules(RulesRunner.java:249)
	at com.company.testProtocol_0_In90Days(Test025.java:205)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	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:76)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:76)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
{code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list