i want to use Inline::Java inside a jvm that's already running (e.g. in 
a server such as tomcat or weblogic).  i have a PerlInterpreter jni 
extension to embed the interpreter(s), to use Inline::Java from there in 
the same jvm requires the patch below.  then configuring JNI => 2:
use Inline => 'Java', ..., JNI => 2;

one thing to be sorted out is adding the _Inline directory to the 
classpath where InlineJavaServer.class, etc. are compiled (such as 
_Inline/lib/auto/test_pl_13db).  i'll give it a shot later if the concept 
in this patch could be included in a future release? 

--- Java/JNI.xs~        Mon Jun  3 08:50:57 2002
+++ Java/JNI.xs Sat Dec 14 18:42:20 2002
@@ -17,6 +17,7 @@
        jmethodID process_command_mid ;
        jint debug ;
        int destroyed ;
+        int embedded ;
 } InlineJavaJNIVM ;
 
 
@@ -137,6 +138,7 @@
        RETVAL->ijs = NULL ;
        RETVAL->debug = debug ;
        RETVAL->destroyed = 0 ;
+       RETVAL->embedded = SvIV(get_sv("Inline::Java::JVM", TRUE)) == 2 ? 1 : 0;
 
        options[0].optionString = ((RETVAL->debug > 5) ? "-verbose" : "-verbose:") ;
        cp = (char *)malloc((strlen(classpath) + 128) * sizeof(char)) ;
@@ -148,8 +150,23 @@
        vm_args.nOptions = 2 ;
        vm_args.ignoreUnrecognized = JNI_FALSE ;
 
-       /* Create the Java VM */
-       res = JNI_CreateJavaVM(&(RETVAL->jvm), (void **)&(env), &vm_args) ;
+        if (RETVAL->embedded) {
+            /* we are already inside a JVM */
+            jint n = 0;
+
+            res = JNI_GetCreatedJavaVMs(&(RETVAL->jvm), 1, &n);
+            env = get_env(RETVAL);
+            RETVAL->destroyed = 1; /* do not shutdown */
+
+            if (n <= 0) {
+                /* res == 0 even if no JVMs are alive */
+                res = -1;
+            }
+        }
+        else {
+              /* Create the Java VM */
+              res = JNI_CreateJavaVM(&(RETVAL->jvm), (void **)&(env), &vm_args) ;
+        }
        if (res < 0) {
                croak("Can't create Java interpreter using JNI") ;
        }
--- Java/JVM.pm~        Thu Jul  4 09:56:25 2002
+++ Java/JVM.pm Sat Dec 14 18:41:10 2002
@@ -37,7 +37,7 @@
        Inline::Java::debug(1, "starting JVM...") ;
 
        $this->{owner} = 1 ;
-       if ($o->get_java_config('JNI')){
+       if (($Inline::Java::JVM = $o->get_java_config('JNI'))){
                Inline::Java::debug(1, "JNI mode") ;
 
                my $jni = new Inline::Java::JNI(

Reply via email to