Sorry to pester you with more questions.

The way I am currently doing things in invoking a JVM from C++ to call Java
code that calls/interacts with Jess code, but it turns out that someone has
actually created a java native interface for the api/framework I am using to
make my agent, using this I think I can only interact with Jess in my Java
program then pass data from my Java code to C++, I was wondering if you
thought this would be a better solution than invoke a JVM from C++

Thanks
Hunter

On Tue, Sep 27, 2011 at 12:03 PM, Friedman-Hill, Ernest
<ejfr...@sandia.gov>wrote:

> **
> This is all perfectly reasonable so far. When you create the JVM you'll
> need to tell it where jess.jar is, along with any other jars you use, with
> the "-cp" flag or the "java.class.path" property.
>
> Once you have this working, you'll presumably want to connect things a
> little more tightly. You can use the JNI API to write the equivalent of your
> three-line main() in C++ pretty easily; you'll want to put together a C++
> version "executeCommand()" that controls the Rete instance, passes a script
> along, executes it, and gets the Value back, decoding it as needed.
>
>
>  ------------------------------
> *From:* owner-jess-us...@sandia.gov [mailto:owner-jess-us...@sandia.gov] *On
> Behalf Of *Hunter McMillen
> *Sent:* Monday, September 26, 2011 8:51 PM
> *To:* jess-users
> *Subject:* JESS: Call Jess from C++ via JNI
>
>  Hello everyone,
>
>   I am working on a project where I am using a C++ framework and API to
> create a game agent. My agent has to be flexible so it can react to/predict
> events that occur inside the game environment, Jess has the kind
> of flexibility that I need for my agent to be good,  but I am having trouble
> connecting to Jess from C++ and that is where I was hoping someone could
> help me out.
>
>  *What I am doing right now*
> I have a C++ program that starts a Java Virtual Machine and searches for a
> Java class file name "TestJNIJessInvoke"
>
>  Inside of "TestJNIJessInvoke.java" I define a simple function in Jess,
> and try to call that function then print the result
>  import jess.*;
> public class TestJNIJessInvoke
> {
>     public static void main(String[] args) throws JessException
>     {
> Rete r = new Rete();
> r.executeCommand("(deffunction square (?n) (return (* ?n ?n)))");
> Value v = r.executeCommand("(square 3)");
>
>  System.out.println(v.intValue(r.getGlobalContext()));
>     }
> }
>
>  But when I try to compile and link the C++ file with:
> *cl *
> *   -I"C:\Program Files\Java\jdk1.7.0\include" *
> *   -I"C:\Program Files\Java\jdk1.7.0\include\win32" *
> *   TestJNIJessInvoke.cpp *
> *   -link "C:\Program Files\Java\jdk1.7.0\lib\jvm.lib"*
>  *
> *
> I get a class loader exception:
>  *Exception in thread "main" java.lang.NoClassDefFoundError: jess/Rete*
> *        at TestJNIJessInvoke.main(TestJNIJessInvoke.java:6)*
> *Caused by: java.lang.ClassNotFoundException: jess.Rete*
> *        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)*
> *        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)*
> *        at java.security.AccessController.doPrivileged(Native Method)*
> *        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)*
> *        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)*
> *        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)*
> *        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)*
> *        ... 1 more*
>  *
> *
>  Exception in thread "main" java.lang.NoClassDefFoundError: jess/Rete
>         at TestJNIJessInvoke.main(TestJNIJessInvoke.java:6)
> Caused by: java.lang.ClassNotFoundException: jess.Rete
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
>         ... 1 more
>
>  *Questions*
>
>  1) Is there some other directory that I am supposed to be including that
> has the .class files for Jess? Right now all I am including is jess.jar
> 2) Is the general design I have a good idea? or is there a better way to
> facilitate communication between Jess and C++?
>
>
>
>  Thanks,
> Hunter McMillen
>
>

Reply via email to