Nice to see that there are users using only the C++ side of things !
Thank you for your patches, I integrated them into rev 1442731.
Some comments inline below.

On Tue, 5 Feb 2013, Toivo Henningsson wrote:

Hi!

I've been using JCC to interact with Java code from C++ for a few weeks now. 
(no python involved)
It's been working well, but I've had to patch the C++ code in sources/ a 
little. I thought I'd share the patches; hopefully at least some of them can 
make it into mainline JCC. I pulled the source from 
http://svn.apache.org/repos/asf/lucene/pylucene/trunk/jcc/jcc/sources/ this 
morning, so I hope that the files should be up to date.

=======================================================
First, in JArray.h there was a missing typedef when not using python:

--- JArray.h.0    2013-02-05 10:49:05.650684100 +0100
+++ JArray.h.1 2013-02-05 10:49:40.901160300 +0100
@@ -37,6 +37,8 @@
extern PyTypeObject *PY_TYPE(JArrayLong);
extern PyTypeObject *PY_TYPE(JArrayShort);
+#else
+typedef int Py_ssize_t;
#endif
#include "JCCEnv.h"

Integrated as is.

=====================================================================
There was a missing #include in JCCEnv.cpp (free, realloc, and calloc were not 
found):

--- JCCEnv.cpp.0                         2013-02-05 10:49:22.497323300 +0100
+++ JCCEnv.cpp.1                       2013-02-05 10:49:48.613639700 +0100
@@ -13,6 +13,7 @@
 */
#include <map>
+#include <stdlib.h>
#include <string.h>
#include <jni.h>


Same.

========================================================================
I got a slew of warnings for non-const char pointers initialized with string 
literals, this patch seems to fix it (created on top of the last patch):

--- JCCEnv.cpp.1                         2013-02-05 10:49:48.613639700 +0100
+++ JCCEnv.cpp.2                       2013-02-05 10:52:20.451420600 +0100
@@ -818,10 +818,10 @@
    jmethodID mu = vm_env->GetMethodID(_fil, "toURL", "()Ljava/net/URL;");
    jmethodID ma = vm_env->GetMethodID(_ucl, "addURL", "(Ljava/net/URL;)V");
#if defined(_MSC_VER) || defined(__WIN32)
-    char *pathsep = ";";
+    const char *pathsep = ";";
    char *path = _strdup(classPath);
#else
-    char *pathsep = ":";
+    const char *pathsep = ":";
    char *path = strdup(classPath);
#endif
@@ -848,9 +848,9 @@
    jmethodID gu = vm_env->GetMethodID(_ucl, "getURLs", "()[Ljava/net/URL;");
    jmethodID gp = vm_env->GetMethodID(_url, "getPath", "()Ljava/lang/String;");
#if defined(_MSC_VER) || defined(__WIN32)
-    char *pathsep = ";";
+    const char *pathsep = ";";
#else
-    char *pathsep = ":";
+    const char *pathsep = ":";
#endif
    jobjectArray array = (jobjectArray)
        vm_env->CallObjectMethod(classLoader, gu);

Same.

========================================================================
Lastly, I got some pretty nasty crashes when I failed to supply a proper 
classpath to the JVM. The following patch to JCCEnv.cpp (built on top of the 
previous one) exits with an error instead. You might want to handle the error 
in another way, but I do think that there is a value in catching it:

--- JCCEnv.cpp.2                         2013-02-05 10:52:20.451420600 +0100
+++ JCCEnv.cpp.3                       2013-02-05 11:00:24.911939300 +0100
@@ -15,6 +15,7 @@
#include <map>
#include <stdlib.h>
#include <string.h>
+#include <iostream>
#include <jni.h>
#include "JCCEnv.h"
@@ -259,8 +260,13 @@
    {
        JNIEnv *vm_env = get_vm_env();
-        if (vm_env)
+        if (vm_env) {
            cls = vm_env->FindClass(className);
+                             if (cls == NULL) {
+                                                    std::cerr << "Could not find class " 
<< className << std::endl;
+                                                    exit(1);
+                             }
+                         }
#ifdef PYTHON
        else
        {

Here, I used the JCCEnv::reportException() method instead. It prints out a valib Java stacktrace if there are no exception handlers and throws a C++ exception.

Best,

Andi..


Best,

Toivo Henningsson, PhD
Senior Software Engineer
Simulation & Optimization Technology

Phone direct: +46 46 286 22 11
Email: toivo.hennings...@modelon.com<mailto:toivo.hennings...@modelon.com>

[Description: Description: Modelon_2011_Gradient_RGB_400]
________________________________
Modelon AB
Ideon Science Park
SE-223 70 Lund, Sweden

Phone: +46 46 286 2200
Fax: +46 46 286 2201


Web: http://www.modelon.com<http://www.modelon.com/>



This email and any attachments are intended solely for the use of the 
individual or entity to whom it is addressed and may be confidential and/or 
privileged. If you are not one of the named recipients or have received this 
email in error, (i) you should not read, disclose, or copy it, (ii) please 
notify sender of your receipt by reply email and delete this email and all 
attachments, (iii) Modelon does not accept or assume any liability or 
responsibility for any use of or reliance on this email.

Reply via email to