hi!
i'm busy with jni. i want to start a jvm from my c++ code and call a
java method. that's working so far. but i have the problem that it has
to be possible to destroy the jvm and create afterwards again. i can't
just create the jvm in the main program and let it run until the main
program ends. that's because i'm writing a plug in to an existing program...
i downloaded the source from sun where i found the file jni.cpp. there
are the functions JNI_CreateJavaVM, jni_DestroyJavaVM and so on. also
there is a global variable:
volatile jint num_vm_created = 0; // number of VMs created so far
this variable will be checked at a call of JNI_CreateJavaVM. would it be
possible to set this variable to zero after calling jni_DestroyVM
(jni_DestroyJavaVM doesn't do that)i could create a jvm again.
now, here is my question: does someone know how to reach that variable
to set it to 0 again? or does someone have another idea to do the job?
greats,
bert
Chris Uppal - 05 Oct 2006 12:29 GMT
> i'm busy with jni. i want to start a jvm from my c++ code and call a
> java method. that's working so far. but i have the problem that it has
> to be possible to destroy the jvm and create afterwards again.
Then, I'm afraid, you are out of luck. It can't be done. (And yes, I agree
that sucks.)
> now, here is my question: does someone know how to reach that variable
> to set it to 0 again? or does someone have another idea to do the job?
First you should find /why/ Sun have that variable, and work out how to fix
whatever technical problem it is that the variable is protecting against.
-- chris
Manfred Rosenboom - 05 Oct 2006 13:56 GMT
Hi Bert,
At least up to JDK 1.4.2 this isn't possible!
You have in all JDK versions the function jni_DestroyVM, but you can't
create a new instance of the JVM in the same process after calling this
function :-((
If my memory serves me well, this should be possible with the
Java 5 JVM, but I haven't give it a try and, to be honest,
I doubt that it is really working in Java 5 until I have seen
it working on my machine ;-)
Best,
Manfred
Bert Boehne - 05 Oct 2006 14:35 GMT
hi Manfred!
i'm using jdk 1.5.0_07. so i think it's still not fixed. :(
i think there will be a very big party when this becomes possible!
greats,
bert
Chris Uppal - 05 Oct 2006 14:39 GMT
> If my memory serves me well, this should be possible with the
> Java 5 JVM, but I haven't give it a try and, to be honest,
> I doubt that it is really working in Java 5 until I have seen
> it working on my machine ;-)
Just tried it with 1.5, and it still fails.
If this is something that they are thinking of fixing, then that is excellent
news -- but like you, I'll believe it only when I see it (if then).
-- chris