Greetings.
I have been looking at the postings on the user group and it appears that
Java Generics is not supported in the constraint section of the rule.
In one of the postings:
http://www.nabble.com/Problem-in-using-genrics-with-drools4.0.1.-td130922...,
Mark Proctor. has indicated that this cannot be supported. I see other
postings where drools team has indicated that generics is not supported.
Given the following would be invalid:
rule "Generic Test"
request : InputRequest()
genericList : List<SomeType> ( request.getterAttributeName != null ) from
request.getterAttributeName
then
end
what are the alternatives/workaround to using a model object that has
getters that return say a collection of generic types. Our object model
uses generics pretty heavily and it would be bad alternative to replicate
these model objects without generic signatures just for the sake of Drools.
Curiosity got the better of me and I tried to modify the above rule to see
what Drools would let me get away with. I cannot have a rule that has any
Generic semantics, so I had to drop <SomeType>. I tried
Approach 1 - genericList : List ( request.getterAttributeName != null )
from request.getterAttributeName
Approach 2 - genericList : SomeType ( request.getterAttributeName != null
) from request.getterAttributeName (forced to do this to avoid run time
exception from approach 1)
Here is what I observe:
Approach 1 - I tried to see if Drools would give me a reference to a List
Type object. The rule compiled but I was getting a classcast exception
during runtime when I tried to use the reference in the consequence. Looking
at what the root cause for the class cast shows that Drools actually was
creating a reference to "SomeType" object which is the type of the object
contained in the list.
Approach 2 - I modified the rule to avoid the class cast exception from
approach 1. The rule compiled and executed. But the rule was getting fired
as many times as the number of objects in the list.
Both of the above observations are neither intuitive nor typically desired.
I understand the rule definition was exploratory.
Questions I have :
- Is the above observation a result of a bug in drools? Can the observation
be explained.
- What is the approach recommended to using an object model that has generic
signatures ?
Hoping some one will weigh in on this subject.
Thanks a lot.
- Krishna