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
>
>

Reply via email to