This message was cross-posted to stack-exchange. If someone wants to answer there, the URL is http://stackoverflow.com/questions/15922343/drools-queries-strange-dependency .
I'm somewhat new to Drools, and experienced this strange behavior during writing a query.
To start with, the Hotel class here is a subclass of PlaceImpl, which implements the interface Place. PlaceImpl itself is a subclass (via another class) of OntologyClassImpl, where the method getClasses() is implemented in the most trivial way: it returns an already existing java.util.Set of objects. In short, getClasses() is accessible from both Place interface and Hotel class.
My problem is this: The following query does not return any result even when there are matching Hotels.
query "qryRomantic" $e: Hotel (classes contains Semantics.AMB_Romantic) endHowever, if I replace Hotel with Place, then the query returns desired results, although the ONLY condition-setting rules are written for Hotel, as follows. (This rule actually gets fired several times.)
rule "Set semantic class Romantic" no-loop when $hotel: Hotel( ... conditions go here ... ) then modify ($hotel){ addToClasses(Semantics.AMB_Romantic) } end
It does not end there.
if I add another query to the rule file, for exactly the opposite condition as follows,
query "qryNonRomantic" $e: Hotel (classes not contains Semantics.AMB_Romantic) end
then the first query starts to return the desired results, EVEN WHEN the new query is not called at all!
What am I doing wrong? I'd be really grateful for any pointers.