src/share/bin/java.c

Print this page




1216 /*
1217  * Loads a class and verifies that the main class is present and it is ok to
1218  * call it for more details refer to the java implementation.
1219  */
1220 static jclass
1221 LoadMainClass(JNIEnv *env, int mode, char *name)
1222 {
1223     jmethodID mid;
1224     jstring str;
1225     jobject result;
1226     jlong start, end;
1227     jclass cls = GetLauncherHelperClass(env);
1228     NULL_CHECK0(cls);
1229     if (JLI_IsTraceLauncher()) {
1230         start = CounterGet();
1231     }
1232     NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls,
1233                 "checkAndLoadMain",
1234                 "(ZILjava/lang/String;)Ljava/lang/Class;"));
1235 
1236     str = NewPlatformString(env, name);
1237     result = (*env)->CallStaticObjectMethod(env, cls, mid, USE_STDERR, mode, str);
1238 
1239     if (JLI_IsTraceLauncher()) {
1240         end   = CounterGet();
1241         printf("%ld micro seconds to load main class\n",
1242                (long)(jint)Counter2Micros(end-start));
1243         printf("----%s----\n", JLDEBUG_ENV_ENTRY);
1244     }
1245 
1246     return (jclass)result;
1247 }
1248 
1249 static jclass
1250 GetApplicationClass(JNIEnv *env)
1251 {
1252     jmethodID mid;
1253     jobject result;
1254     jclass cls = GetLauncherHelperClass(env);
1255     NULL_CHECK0(cls);
1256     NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls,


1504   if (doXUsage) {
1505     NULL_CHECK(printXUsageMessage = (*env)->GetStaticMethodID(env, cls,
1506                                         "printXUsageMessage", "(Z)V"));
1507     (*env)->CallStaticVoidMethod(env, cls, printXUsageMessage, USE_STDERR);
1508   } else {
1509     NULL_CHECK(initHelp = (*env)->GetStaticMethodID(env, cls,
1510                                         "initHelpMessage", "(Ljava/lang/String;)V"));
1511 
1512     NULL_CHECK(vmSelect = (*env)->GetStaticMethodID(env, cls, "appendVmSelectMessage",
1513                                         "(Ljava/lang/String;Ljava/lang/String;)V"));
1514 
1515     NULL_CHECK(vmSynonym = (*env)->GetStaticMethodID(env, cls,
1516                                         "appendVmSynonymMessage",
1517                                         "(Ljava/lang/String;Ljava/lang/String;)V"));
1518     NULL_CHECK(vmErgo = (*env)->GetStaticMethodID(env, cls,
1519                                         "appendVmErgoMessage", "(ZLjava/lang/String;)V"));
1520 
1521     NULL_CHECK(printHelp = (*env)->GetStaticMethodID(env, cls,
1522                                         "printHelpMessage", "(Z)V"));
1523 
1524     jprogname = (*env)->NewStringUTF(env, _program_name);
1525 
1526     /* Initialize the usage message with the usual preamble */
1527     (*env)->CallStaticVoidMethod(env, cls, initHelp, jprogname);
1528 
1529 
1530     /* Assemble the other variant part of the usage */
1531     if ((knownVMs[0].flag == VM_KNOWN) ||
1532         (knownVMs[0].flag == VM_IF_SERVER_CLASS)) {
1533       vm1 = (*env)->NewStringUTF(env, knownVMs[0].name);
1534       vm2 =  (*env)->NewStringUTF(env, knownVMs[0].name+1);
1535       (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2);
1536     }
1537     for (i=1; i<knownVMsCount; i++) {
1538       if (knownVMs[i].flag == VM_KNOWN) {
1539         vm1 =  (*env)->NewStringUTF(env, knownVMs[i].name);
1540         vm2 =  (*env)->NewStringUTF(env, knownVMs[i].name+1);
1541         (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2);
1542       }
1543     }
1544     for (i=1; i<knownVMsCount; i++) {
1545       if (knownVMs[i].flag == VM_ALIASED_TO) {
1546         vm1 =  (*env)->NewStringUTF(env, knownVMs[i].name);
1547         vm2 =  (*env)->NewStringUTF(env, knownVMs[i].alias+1);
1548         (*env)->CallStaticVoidMethod(env, cls, vmSynonym, vm1, vm2);
1549       }
1550     }
1551 
1552     /* The first known VM is the default */
1553     {
1554       jboolean isServerClassMachine = ServerClassMachine();
1555 
1556       const char* defaultVM  =  knownVMs[0].name+1;
1557       if ((knownVMs[0].flag == VM_IF_SERVER_CLASS) && isServerClassMachine) {
1558         defaultVM = knownVMs[0].server_class+1;
1559       }
1560 
1561       vm1 =  (*env)->NewStringUTF(env, defaultVM);
1562       (*env)->CallStaticVoidMethod(env, cls, vmErgo, isServerClassMachine,  vm1);
1563     }
1564 
1565     /* Complete the usage message and print to stderr*/
1566     (*env)->CallStaticVoidMethod(env, cls, printHelp, USE_STDERR);
1567   }
1568   return;
1569 }
1570 
1571 /*
1572  * Read the jvm.cfg file and fill the knownJVMs[] array.
1573  *
1574  * The functionality of the jvm.cfg file is subject to change without
1575  * notice and the mechanism will be removed in the future.
1576  *
1577  * The lexical structure of the jvm.cfg file is as follows:
1578  *
1579  *     jvmcfg         :=  { vmLine }
1580  *     vmLine         :=  knownLine
1581  *                    |   aliasLine




1216 /*
1217  * Loads a class and verifies that the main class is present and it is ok to
1218  * call it for more details refer to the java implementation.
1219  */
1220 static jclass
1221 LoadMainClass(JNIEnv *env, int mode, char *name)
1222 {
1223     jmethodID mid;
1224     jstring str;
1225     jobject result;
1226     jlong start, end;
1227     jclass cls = GetLauncherHelperClass(env);
1228     NULL_CHECK0(cls);
1229     if (JLI_IsTraceLauncher()) {
1230         start = CounterGet();
1231     }
1232     NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls,
1233                 "checkAndLoadMain",
1234                 "(ZILjava/lang/String;)Ljava/lang/Class;"));
1235 
1236     NULL_CHECK0(str = NewPlatformString(env, name));
1237     result = (*env)->CallStaticObjectMethod(env, cls, mid, USE_STDERR, mode, str);
1238 
1239     if (JLI_IsTraceLauncher()) {
1240         end   = CounterGet();
1241         printf("%ld micro seconds to load main class\n",
1242                (long)(jint)Counter2Micros(end-start));
1243         printf("----%s----\n", JLDEBUG_ENV_ENTRY);
1244     }
1245 
1246     return (jclass)result;
1247 }
1248 
1249 static jclass
1250 GetApplicationClass(JNIEnv *env)
1251 {
1252     jmethodID mid;
1253     jobject result;
1254     jclass cls = GetLauncherHelperClass(env);
1255     NULL_CHECK0(cls);
1256     NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls,


1504   if (doXUsage) {
1505     NULL_CHECK(printXUsageMessage = (*env)->GetStaticMethodID(env, cls,
1506                                         "printXUsageMessage", "(Z)V"));
1507     (*env)->CallStaticVoidMethod(env, cls, printXUsageMessage, USE_STDERR);
1508   } else {
1509     NULL_CHECK(initHelp = (*env)->GetStaticMethodID(env, cls,
1510                                         "initHelpMessage", "(Ljava/lang/String;)V"));
1511 
1512     NULL_CHECK(vmSelect = (*env)->GetStaticMethodID(env, cls, "appendVmSelectMessage",
1513                                         "(Ljava/lang/String;Ljava/lang/String;)V"));
1514 
1515     NULL_CHECK(vmSynonym = (*env)->GetStaticMethodID(env, cls,
1516                                         "appendVmSynonymMessage",
1517                                         "(Ljava/lang/String;Ljava/lang/String;)V"));
1518     NULL_CHECK(vmErgo = (*env)->GetStaticMethodID(env, cls,
1519                                         "appendVmErgoMessage", "(ZLjava/lang/String;)V"));
1520 
1521     NULL_CHECK(printHelp = (*env)->GetStaticMethodID(env, cls,
1522                                         "printHelpMessage", "(Z)V"));
1523 
1524     NULL_CHECK(jprogname = (*env)->NewStringUTF(env, _program_name));
1525 
1526     /* Initialize the usage message with the usual preamble */
1527     (*env)->CallStaticVoidMethod(env, cls, initHelp, jprogname);
1528 
1529 
1530     /* Assemble the other variant part of the usage */
1531     if ((knownVMs[0].flag == VM_KNOWN) ||
1532         (knownVMs[0].flag == VM_IF_SERVER_CLASS)) {
1533       NULL_CHECK(vm1 = (*env)->NewStringUTF(env, knownVMs[0].name));
1534       NULL_CHECK(vm2 =  (*env)->NewStringUTF(env, knownVMs[0].name+1));
1535       (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2);
1536     }
1537     for (i=1; i<knownVMsCount; i++) {
1538       if (knownVMs[i].flag == VM_KNOWN) {
1539         NULL_CHECK(vm1 =  (*env)->NewStringUTF(env, knownVMs[i].name));
1540         NULL_CHECK(vm2 =  (*env)->NewStringUTF(env, knownVMs[i].name+1));
1541         (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2);
1542       }
1543     }
1544     for (i=1; i<knownVMsCount; i++) {
1545       if (knownVMs[i].flag == VM_ALIASED_TO) {
1546         NULL_CHECK(vm1 =  (*env)->NewStringUTF(env, knownVMs[i].name));
1547         NULL_CHECK(vm2 =  (*env)->NewStringUTF(env, knownVMs[i].alias+1));
1548         (*env)->CallStaticVoidMethod(env, cls, vmSynonym, vm1, vm2);
1549       }
1550     }
1551 
1552     /* The first known VM is the default */
1553     {
1554       jboolean isServerClassMachine = ServerClassMachine();
1555 
1556       const char* defaultVM  =  knownVMs[0].name+1;
1557       if ((knownVMs[0].flag == VM_IF_SERVER_CLASS) && isServerClassMachine) {
1558         defaultVM = knownVMs[0].server_class+1;
1559       }
1560 
1561       NULL_CHECK(vm1 =  (*env)->NewStringUTF(env, defaultVM));
1562       (*env)->CallStaticVoidMethod(env, cls, vmErgo, isServerClassMachine,  vm1);
1563     }
1564 
1565     /* Complete the usage message and print to stderr*/
1566     (*env)->CallStaticVoidMethod(env, cls, printHelp, USE_STDERR);
1567   }
1568   return;
1569 }
1570 
1571 /*
1572  * Read the jvm.cfg file and fill the knownJVMs[] array.
1573  *
1574  * The functionality of the jvm.cfg file is subject to change without
1575  * notice and the mechanism will be removed in the future.
1576  *
1577  * The lexical structure of the jvm.cfg file is as follows:
1578  *
1579  *     jvmcfg         :=  { vmLine }
1580  *     vmLine         :=  knownLine
1581  *                    |   aliasLine