I'm building a Java wrapper for the Python regex module, and thought I'd use JCC.
I'm using JCC 2.9 on OS X 10.5.8, Java 5, Python 2.5, both 32-bit. JCC was also compiled with Java 5. I wrote the Java interfaces for Regex, Match, and Group, defined in Java the Python extension classes for those interfaces, wrote in Python the "native" implementation for the extension classes, ran jcc on the jar file, installed the Python module and the wrapped jar file module, and tried a test program: $ PYTHONPATH=/tmp:. /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java -classpath .:PythonRegex.jar:/Library/Python/2.5/site-packages/JCC-2.9-py2.5-macosx-10.5-i386.egg/jcc/classes -Djava.library.path=/Library/Python/2.5/site-packages/JCC-2.9-py2.5-macosx-10.5-i386.egg test foo bar org.apache.jcc.PythonException: An error occurred while creating Java VM Traceback (most recent call last): File "/Users/wjanssen/projects/regex-java/Regex.py", line 8, in <module> javaregex.initVM(classpath=javaregex.CLASSPATH) ValueError: An error occurred while creating Java VM at org.apache.jcc.PythonVM.instantiate(Native Method) at Regex.getRegex(Regex.java:14) at test.main(test.java:4) $ Before calling initVM, the "javaregex" module has the following dir: ['AbstractStringBuilder', 'Appendable', 'Boolean', 'Byte', 'CLASSPATH', 'CharSequence', 'Character', 'Class', 'ClassLoader', 'ClassNotFoundException', 'Comparable', 'ConstVariableDescriptor', 'Double', 'Enumeration', 'Exception', 'FinalizerClass', 'FinalizerProxy', 'Float', 'Group', 'GroupAPI', 'IllegalAccessException', 'IllegalArgumentException', 'InstantiationException', 'Integer', 'InterruptedException', 'InvalidArgsError', 'Iterator', 'JArray', 'JArray_bool', 'JArray_byte', 'JArray_char', 'JArray_double', 'JArray_float', 'JArray_int', 'JArray_long', 'JArray_object', 'JArray_short', 'JArray_string', 'JCCEnv', 'JCC_VERSION', 'JObject', 'JavaError', 'Long', 'Match', 'MatchAPI', 'Number', 'NumberFormatException', 'Object', 'Package', 'PrintWriter', 'Regex', 'RegexAPI', 'RuntimeException', 'SecurityException', 'Short', 'StackTraceElement', 'String', 'StringBuffer', 'StringBuilder', 'StringWriter', 'Throwable', 'VERSION', 'Writer', '__builtins__', '__dir__', '__doc__', '__file__', '__name__', '__path__', '_javaregex', 'findClass', 'getVMEnv', 'initVM', 'os', 'sys'] Here's the Regex.py code that's throwing the exception: import sys, os, re import regex import javaregex javaregex.initVM(classpath=javaregex.CLASSPATH) Here's the Java code that's invoking it: public static Regex getRegex(Object[] patterns, int flags, Map<String,Set<String>> named_lists) { PythonVM inst = PythonVM.get(); if (inst == null) { inst = PythonVM.start("/usr/bin/python", new String[] {}); } Regex regex = (Regex) (inst.instantiate("Regex", "PyRegex")); regex.initialize(patterns, flags, named_lists); return regex; } Any ideas? I followed the cookbook section in http://lucene.apache.org/pylucene/jcc/documentation/readme.html#embedding pretty religiously... By the way, you might want to add a paragraph in that section about adding the ["-framework", "Python"] flags for building JCC on OS X. I tripped over that again. Bill