Thanks for your quick reply. After I manage to get my Java object into Jess, can I assert it as a fact? Then have rules lhs match on the existence of some object with attributes x, y, and z?
Hunter On Fri, Nov 4, 2011 at 4:01 PM, Friedman-Hill, Ernest <ejfr...@sandia.gov>wrote: > ** > There are (obviously) two options: (a) put the object somewhere > accessible, and run Jess code that retrieves it, or (b) use Jess's Java API > to set a Jess variable to contain the object. Either would work. The > store/fetch mechanism is sort of an built-in easy way to do (a). > Alternatively, say there's a global variable ?*x* defined in your Jess > program. Then you can say > > engine.getGlobalContext().setVariable("*x*", new Value(unit)); > > and your Jess code can later get the value of "*x*". > > If you don't like using variables this way, there's always directly > invoking Jess functions from Java. Here we invoke 'add' to add the object > to working memory directly: > > new Funcall("add", engine).arg(new > Value(unit)).execute(engine.getGlobalContext()); > > > > ------------------------------ > *From:* owner-jess-us...@sandia.gov [mailto:owner-jess-us...@sandia.gov] *On > Behalf Of *Hunter McMillen > *Sent:* Friday, November 04, 2011 1:08 PM > *To:* jess-users > *Subject:* JESS: Is it possible to bind a Java object directly to a Jess > variable without creating a new object? > > Hi everyone, > > I am trying to assert to Jess that an object exists when I encounter a > new object in my Java program. Right now I am using a template to mirror > that object (i.e I have slot values for all of the Java objects fields) > but this seems redundant to me. Is there any way to just bind a Java > object to a Jess variable without creating a new Java object? > > A lot of the examples I see online and from JIA are of the form: > (bind ?map (new HashMap)) > > or > > (call Classname method params...) > > but these either create a new object or call static methods. I already > have the Java object and just want to store it. > > But I was hoping that there was someway I could do something like this: > public Rete engine = new Rete(); > > public void unitDiscovered() > { > Unit unit = <some unit encountered>; //Java object > engine.executeCommand("(bind ?unit unit)"); > engine.executeCommand("(assert ?unit)"); > } > > Or would I have to use the store() and fetch() methods for this? > > public void unitDiscovered() > { > Unit unit = <some unit encountered>; //Java object > engine.store("UNIT", unit); > engine.executeCommand("(bind ?unit (fetch "UNIT")"); > engine.executeCommand("(assert ?unit)"); > } > > Basically I want to know the best practice for binding Java objects to > Jess variables so I can assert them to the engine. > > Thanks, > Hunter McMillen > >