[rules-users] ClassCastException

Shannon Lal shannonlal2909 at gmail.com
Thu May 14 10:25:05 EDT 2009


Christoph,
Just to clarify I am by no means a Drools expert so please keep this in mind
when you read my advice.

Just to clarify, each Event you have has a bunch of EPC's.  Is this
correct?  Are the EPC classes standard (i.e. no inheritance)?  If this is
the case you could have a rule for processing your events and another rule
for processing your EPCs.  Does this make sense?

 rule "Process Event"
     when
         $event: QuantityEventType()
          eval( $event.getEPC() != null )
     then
         insert( EPC ) --- *I would insert each EPC into working memory.
This will then fire the rule below*

         System.out.println("BizLocation: " +$bizLoc.getId());
   end

*rule* "Process EPC"
  *when*
     $epc: EPC()
  *then*
      //Do your EPC Specific logic here
*      //Once you have done processing the EPC, I would remove it from
working memory or it will fire the rule over again for the same EPC()*
     retract( $epc )
*end*


Not sure if this helps at all or not.

Shannon


On Thu, May 14, 2009 at 10:06 AM, Christoph Kramer <amrod at gmx.de> wrote:

> Hi Shannon,
> yes all eventtypes inherit from a base class, but the superclass doesn't
> include all the attributes I want to acces in the rules. Unfortunately I
> can't modify the classes since they're part of a  library that i'm using.
> Here is my intention:
> I get a bunch of different events and have to extract some data.
> Every event has a field with EPC's to which all the rest of the data
> belongs. I want to extract all the single EPC's with its related data.
> With pure Java the solution would be somethin like that:
>
> void handleObjectEvent(ObjectEventType p_objEvent){
>   List<EPC> epcs = p_objEvent.getEPC();
>   if(epc!=null){
>      for(EPC e : epcs){
>           if(p_objEvent.getBizLocation() !=null){
>               doSomething(e, p_objEvent.getBizLocation());
>           }
>                     if(p_objEvent.getBizStep() !=null){
>               doSomething(e, p_objEvent.getBizStep());
>           }
>
>           if(p_objEvent.getDisposition() !=null){
>               doSomething(e, p_objEvent.getDisposition());
>           }
>
>          ...
>          ...
>      }
>   }
> }
>
> For the other types of Events there would similar functions. Since there
> are a lot of if-statements in the functions I thougt that it would be nice
> to use rule engine instead.
>
> Greetings,
> Christoph
>
>
> Shannon Lal wrote:
>
>> Christoph,
>> I am not sure that this is a rules problem as it seems to be more of a
>> Java problem.  Do you Event types all inherit from a base class?  Could you
>> not just check to see on the base class is present?  Also, you might want to
>> add in SMALL example of what you are trying to do in pure Java code (outside
>> of Rules) as it might be easy to translate.
>>
>> Shannon
>>
>> On Thu, May 14, 2009 at 6:35 AM, Christoph Kramer <amrod at gmx.de <mailto:
>> amrod at gmx.de>> wrote:
>>
>>    Hi all,
>>    i've some problems with a ClassCastException when using the
>>    "or"-conditional element.
>>    I have different Java-Beans which all have some string-values. Now
>>    I want to create one rule which is able to handle every type of my
>>    classes because it would be a lot of work to create one rule for
>>    every class.
>>    Depending on the type of beans in the working memory the programm
>>    is crashing with an ClassCastException.
>>
>>    Here is a snippet of my drl-file with the "crashing-rule":
>>
>>    rule "BizLocation"
>>      when
>>          $epc : EPC()
>>          QuantityEventType(epcClass == $epc.value ,$bizLoc:
>>    bizLocation !=null ) or AggregationEventType(childEPCs.epc
>>    contains $epc, $bizLoc : bizLocation != null) or
>>    ObjectEventType(epcList.epc  contains $epc, $bizLoc : bizLocation
>>    != null)
>>      then
>>          System.out.println("BizLocation: " +$bizLoc.getId());
>>    end
>>
>>
>>    There are some EPC's in the working memory and some Events (which
>>    might be of type QuantityEventType, AggregationEventType or
>>    ObjectEventType). When there are only ObjectEventType in the
>>    working memory, everything works fine, but wenn there is an
>>    QuantityEventType this rule crashes with
>>    "org.fosstrak.epcis.model.QuantityEventType cannot be cast to
>>    org.fosstrak.epcis.model.ObjectEventType".
>>    I've lot of other, similar rules some of them crashing, others don't.
>>
>>
>>    Can anyone give me a hint where is the error?
>>
>>    Thanks,
>>    Christoph
>>
>>    PS: Sorry for the bad english :(
>>    _______________________________________________
>>    rules-users mailing list
>>    rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>>    https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090514/82502e77/attachment.html 


More information about the rules-users mailing list