You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by mt...@apache.org on 2003/02/17 19:19:08 UTC

cvs commit: jakarta-commons-sandbox/daemon/src/native/nt/procrun procrun.c procrun.h

mturk       2003/02/17 10:19:08

  Modified:    daemon/src/native/nt/procrun procrun.c procrun.h
  Log:
  Enable using both JVM and redirected Java.
  Only the shutdown class will be called using inprocess JVM.
  
  Revision  Changes    Path
  1.8       +38 -20    jakarta-commons-sandbox/daemon/src/native/nt/procrun/procrun.c
  
  Index: procrun.c
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/daemon/src/native/nt/procrun/procrun.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- procrun.c	17 Feb 2003 16:42:00 -0000	1.7
  +++ procrun.c	17 Feb 2003 18:19:07 -0000	1.8
  @@ -909,18 +909,20 @@
       }
       if (has_java) {
           UINT em;
  -        DBPRINTF1("jvm_path %s", jvm_path);
  -        if (strlen(jvm_path) && (stricmp(jvm_path, "auto") == 0))
  -            proc->java.path = procrun_guess_jvm(proc);
  -        else if (strlen(jvm_path) && (strnicmp(jvm_path, "java", 4) == 0)) {
  -            proc->java.path = procrun_guess_java(proc, jvm_path);
  -            return proc->java.path ? 0 : -1;
  +        if (strlen(jvm_path)) {
  +            if (strlen(jvm_path) < 6)
  +                proc->java.path = procrun_guess_jvm(proc);
  +            else
  +                proc->java.path = pool_strdup(proc->pool, jvm_path);
  +            if (strnicmp(jvm_path, "java", 4) == 0) {
  +                proc->java.jpath = procrun_guess_java(proc, jvm_path);
  +            }
           }
  -        else
  -            proc->java.path = pool_strdup(proc->pool, jvm_path);
  +        DBPRINTF1("jvm dll path %s", proc->java.path);
  +        DBPRINTF1("java    path %s", proc->java.jpath);
           if (!proc->java.path || !proc->java.start_method)
               return -1;
  -        /* Try to load the jvm dll */
  +        /* Try to load the jvm dll */ 
           em = SetErrorMode(SEM_FAILCRITICALERRORS);
           proc->java.dll = LoadLibraryEx(proc->java.path, NULL, 0); 
           if (!proc->java.dll)
  @@ -1020,6 +1022,8 @@
       if (proc->java.stop_bridge && proc->java.stop_mid) {
           jclass strclass;
           jarray jargs = NULL;
  +        DBPRINTF1("Calling shutdown %s", proc->java.stop_class); 
  +
           strclass = (*env)->FindClass(env, "java/lang/String");
           if (proc->java.stop_param) {
               jstring arg = (*env)->NewStringUTF(env, proc->java.stop_param);
  @@ -1031,7 +1035,7 @@
                                        proc->java.stop_mid,
                                        jargs);
       }
  -    else {
  +    else if (!proc->java.jpath) {
           /* Call java.lang.System.exit(0) */
           jclass sysclass;
           jmethodID exitid;
  @@ -1043,7 +1047,8 @@
               goto cleanup;
           report_service_status(SERVICE_STOPPED, 0, 0,
                                 g_env->m);
  -
  +        DBPRINTF0("Forcing shutdown using System.exit(0)");
  + 
           (*env)->CallStaticVoidMethod(env, sysclass, exitid, 0);
       }
   cleanup:
  @@ -1149,6 +1154,12 @@
                                                           "([Ljava/lang/String;)V");
       }
       
  +    /* check if we have java.exe as worker process 
  +     * in that case don't call the startup class. 
  +     */
  +    if (proc->java.jpath != NULL) {
  +        return 0;
  +    } 
       strclass = (*env)->FindClass(env, "java/lang/String");
       if (proc->java.start_param) {
           jstring arg = (*env)->NewStringUTF(env, proc->java.start_param);
  @@ -1406,7 +1417,7 @@
       DBPRINTF1("Creating process %s.\n", program);
       DBPRINTF1("Creating process %s.\n", env->m->argw);
       /* for java.exe merge Arguments and Java options */
  -    if (env->m->java.path) {
  +    if (env->m->java.jpath) {
           int i, j, len = strlen(env->m->argw) + 8192;
           char *opts[64], *nargw;
   
  @@ -1437,7 +1448,7 @@
               strcat(nargw, env->m->java.start_param);
           }
           env->m->argw = nargw;
  -        program = env->m->java.path;
  +        program = env->m->java.jpath;
       }
       DBPRINTF2("RUN [%s] %s\n", program, env->m->argw);
       if (env->m->service.account && env->m->service.password &&
  @@ -1755,7 +1766,6 @@
       char *display = NULL;
       char *java = NULL;
   
  -    int i, n;
       if (!proc->service.name) {
           return -1;
       }
  @@ -2214,12 +2224,20 @@
       report_service_status(SERVICE_START_PENDING, NO_ERROR, 3000,
                             g_env->m);
       if (g_env->m->java.dll) {
  -        DWORD id;
  -        HANDLE jh;
  -        jh = CreateThread(NULL, 0, java_thread, g_env, 0, &id);
  -        pool_handle(g_env->m->pool, jh);
  -        rv = 0;
  -    }
  +        if (g_env->m->java.jpath == NULL) {
  +            DWORD id;
  +            HANDLE jh;
  +            jh = CreateThread(NULL, 0, java_thread, g_env, 0, &id);
  +            pool_handle(g_env->m->pool, jh);
  +            rv = 0;
  +        }
  +        else {
  +            if ((rv = procrun_init_jvm(g_env->m)) == 0) {
  +                rv = procrun_redirect(g_env->m->service.image,
  +                                      g_env->m->envp, g_env);    
  +            }
  +        }
  +    } 
       else {
           rv = procrun_redirect(g_env->m->service.image,
                                 g_env->m->envp, g_env);    
  
  
  
  1.7       +1 -0      jakarta-commons-sandbox/daemon/src/native/nt/procrun/procrun.h
  
  Index: procrun.h
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/daemon/src/native/nt/procrun/procrun.h,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- procrun.h	17 Feb 2003 15:09:24 -0000	1.6
  +++ procrun.h	17 Feb 2003 18:19:07 -0000	1.7
  @@ -216,6 +216,7 @@
       typedef struct java_t java_t;
       struct java_t {
           char         *path;
  +        char         *jpath;
           char         *start_class;
           char         *stop_class;
           HMODULE      dll;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org