Typically slots come from JavaBeans properties, not fields – i.e., accessor methods like getEventID(). But if you specify “include-variables” when you create a deftemplate from a class, then public (and only public!) member fields will be used as well. See http://www.jessrules.com/jess/docs/71/memory.html#shadow_facts .
From: owner-jess-us...@sandia.gov [mailto:owner-jess-us...@sandia.gov] On Behalf Of Tom De Costere Sent: Tuesday, May 21, 2013 6:24 AM To: jess-users Subject: JESS: [EXTERNAL] Usage of abstract classes in rules Hello, I currently have some abstract classes which are then implemented in various other classes extending those abstract classes. Now I’ve been trying to get Jess to work with both the abstract class as the implementation class, but somehow Jess cannot reach to the fields/methods specified in the abstract classes? Is this normal functionality of Jess or must I make such a conversion object that contains both the fields from the abstract class as the fields from the implementation class? Example: My abstract class AbstractApplicationEvent contains following protected fields: - eventID - eventName - eventTimestamp My subclass ConnectionMadeEvent extending the abstract class above no extra fields, but can be extended in the future. Rule: (defrule connection_established (declare (salience 50)) ?f1 <- (ConnectionMadeEvent (eventID ?id) (eventTimestamp ?eventTimestamp)) => (assert (Notification (icon "ICON_CONNECTION_ACTIVE") (generationTime ?eventTimestamp) (event ?f1))) ) Error message: SEVERE: Error loading Ruleset from: rules/global_rules.clp Jess reported an error in routine Jesp.parsePattern. Message: No such slot eventTimestamp in template MAIN::ConnectionMadeEvent at token 'eventTimestamp'. Program text: ( defrule connection_established ( declare ( salience 50 ) ) ?f1 <- ( ConnectionMadeEvent ( eventID ?id ) ( eventTimestamp at line 110 in file rules/global_rules.clp. ... Thanks in advance! Tom DC