I'm trying to get a handle on whether Drools is the right
tool for the job we have at hand. Based on what I've seen in the
documents and examples, I believe it could be, but that we're
definitely taking a more difficult path. Interested in thoughts from
folks with more experience than me.
Our project is looking for a solution to let us deal
with streaming data, and determine whether each individual data item
meets a rule's criteria. Each
data item implements an interface, but the
properties available on the concrete objects differ wildly. Also,
each data item can be considered to be composed of multiple levels of
these data items. One of the fields on the interface is a getParent
field, which returns the data item one level up. (In effect, we end up
with a singly linked list.) If
X is the object
which we have a direct handle to, X.parent = Y, and Y.parent = Z, we
often want to look at Z.field as part of our rule. I believe that the quirk here is that,
although the objects are JavaBeans, they are presented as an interface
which does not describe the property set of the bean. Thus, I don't
directly know that X's parent is Y, whose parent is of type Z, which
then has a property named 'foo'. (Beans here are essentially
user-defined structures for contributed code, and thus we have no real
way of knowing what properties are on a bean until we receive the
bean. When the users use the beans, they obviously know which bean
they're working with. For us, we're getting it downstream, and that
bean could be any of a dynamically growing variety, also with many different permutations of structures in the linked list.)
As a practical
matter, the interface has a method getField(String, String), whihc
allows us to access specific fields both in the local bean and in the
beans available up its list. That functionality is accomplished
through some reflection logic.
I've tried the following approach, but it "smells" wrong:
- Create adapter classes per rule, and, given a data item, insert the item again, adapted with a bean that gives access to the specific fields. We believe the # of rules will be 10 or less at any given time in the operational
system. This would require us to query the known rules, and provide
adapter classes for them, which seems completely counter to normal
patterns of use. However, it would allow us to use a bean approach. [Note that although I've shown that inserting an event again has my desired effect, I haven't yet figured out how to query the set of rules, and provide adapter classes for each rule.]
I'm also considering a DSL approach, trying to determine if that would allow me to somehow transform the problem.
Any insights or feedback would be wonderful. In-house, we
don't yet have a great depth of expertise with Drools, so I'm interested
in tapping a broader pool of knowledge and experience. I've only got access to Drools 4 in my environment. I can try alternate approaches in Drools 5 at home, but can't use that solution as yet for our problem space.
- Tina