Except that it is tied in particular to FactTemplate and classes. It should expose the required metadata completely.
Hi Stephen,
Nice job inspecting our code base.
The complete type abstraction layer in Drools is composed by several interfaces and its corresponding implementations.
* TypeDeclaration is just that: a stateless type representation for describing Facts. It is not supposed to know how to actually read fact value, attributes, etc. It is used at compilation and runtime to read metainformation about a fact and is not tied to any particular fact instance.
Ok - so there's sneaky compilation going on everywhere. So reflection is not used at all (at least at runtime).
* To handle a Type, i.e., evaluate if a type matches a pattern and manipulate the type at compile and runtime, we have an ObjectType interface. That interface, today, has 2 implementations: ClassObjectType (for POJO) and FactTemplateObjectType (for templates).
* To read the internals of a type we have the ReadAccessor and WriteAccessor interfaces. These interface implementations are lazyly bytecode generated for extremely fast access and fact manipulation at runtime. So, in your example, there would be an AgeReadAccessor to do this: TypeDeclaration.execute("getAge"). TypeDeclaration should only interact with the compiler, not the actual facts.
2008/8/28 Stephen Kestle <stephen.kestle@orionhealth.com>
Yes, I thought $person.getFieldValue("age") was a bit annoying...
Edson Tirelli wrote:There are a few issues on how templates were implemented. The main one, and probably the main reason we did not extended the functionality to support any underlying fact format, is the syntax support on semantic code blocks. I.e. dialect support, specially on consequences.
But the more I look into the code and interfaces around FactTemplate, the more I like it's approach and it's fit for ontological (dynamic model/schema) data models.
How correct am I on these points?
- MVEL etc needs to reflect on methods to give the dialect support to POJOs
- To make an dynamic model fit to OO, TypeDeclarations would need to be able to generate interfaces, an a proxy mechanism would be needed for the map-backed model - this just seems too retarded
- Surely TypeDeclaration should be an interface with methods to gain method information and types etc. PojoTypeDeclaration would implement this using the reflective model as current. TemplateTypeDeclaration would use the FactTemplate to do it (if it was being continued). This way maximum pluggability is maintained.
- Isn't this what FactTemplate does? I see the problem is that FactTemplate was an add-on, instead of a super set / *the* way of accessing fact type information.
- Is this idea awesome? Calling TypeDeclaration.execute("getAge") does not seem any different to how it is now - how "compiled" are these rules? If they are byte-compiled, then that optimisation could be done for PojoTypeDeclaration.
Cheers
Stephen
--
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @ www.jboss.com
_______________________________________________ rules-dev mailing list rules-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-dev