On Feb 28, 2010, at 7:16, Roman Chyla <roman.ch...@gmail.com> wrote:

- consecutive calls to initVM raise errors

Only if you use parameters other than classpath, right ?

yes

Or did you find a different problem ?

- in my program components interact with several JCC wrapped libraries

Normally, it is no problem, but clashes may occur - especially in GUI when running complex workflows - the solution (in theory) would be to
destroy JVM and load it again. Is it possible?

In theory, it might be. The JNI API has a call to destroy a VM.
http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/invocation.html
But cleanly doing so it rather tricky so JCC doesn't support it.

I tried (naive) to add destroyJavaVM call into the source, recompiled
it and tried calling it from thread. The destroy call returns 0, but
as soon as I delete references and object is garbage collected
(probably), Python crashes. I have no idea what's going on :-)

You need to at least be sure that no python object is holding any references to java objects. This includes classes. All java object references held are stored and counted in a C++ map object sitting in the JCCEnv instance global to jcc at runtime. If this map is not empty before killing the vm bad things will happen. A way to clear this map is to get rid of all the python objects holding references into it (including classes). There is a debugging method on JCCEnv that iterates this map (forgot the name, not near my computer).

Browsing through the Sun bug reports, it seems like it wasn't possible
(ie. DestroyJavaVM never worked, at least for others, who apparently
understand what they were doing).

Yeah, not too surprised there.

But if possible and one day it happens, cool, JCC is really blessing
for connecting Python with Java and I imagine more people will start
using it, and with more programmers using it, there will come more
python packages in one installation...

Yep :-)

Andi..


roman


A different approach to supporting your use case might be to consider
compiling all your JCC wrapped libraries into one, picking only the APIs you
need so as control the size of the resulting library.

Andi..

Reply via email to