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