X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fjava.c;h=03df2b7eba87c517f9417e5d0995876f0d937658;hb=fa9fd186f4e09c24a02d9541c2409d21bf282087;hp=d0eeeff5650c79e2b1f354dce8db0c6656e970ce;hpb=84489e6b014be0fc620f4721d3cc1d6e663b1925;p=collectd.git diff --git a/src/java.c b/src/java.c index d0eeeff5..03df2b7e 100644 --- a/src/java.c +++ b/src/java.c @@ -227,7 +227,7 @@ static jobject ctoj_jlong_to_number (JNIEnv *jvm_env, jlong value) /* {{{ */ jmethodID m_long_constructor; /* Look up the java.lang.Long class */ - c_long = (*jvm_env)->FindClass (jvm_env, "java.lang.Long"); + c_long = (*jvm_env)->FindClass (jvm_env, "java/lang/Long"); if (c_long == NULL) { ERROR ("java plugin: ctoj_jlong_to_number: Looking up the " @@ -255,7 +255,7 @@ static jobject ctoj_jdouble_to_number (JNIEnv *jvm_env, jdouble value) /* {{{ */ jmethodID m_double_constructor; /* Look up the java.lang.Long class */ - c_double = (*jvm_env)->FindClass (jvm_env, "java.lang.Double"); + c_double = (*jvm_env)->FindClass (jvm_env, "java/lang/Double"); if (c_double == NULL) { ERROR ("java plugin: ctoj_jdouble_to_number: Looking up the " @@ -284,6 +284,10 @@ static jobject ctoj_value_to_number (JNIEnv *jvm_env, /* {{{ */ return (ctoj_jlong_to_number (jvm_env, (jlong) value.counter)); else if (ds_type == DS_TYPE_GAUGE) return (ctoj_jdouble_to_number (jvm_env, (jdouble) value.gauge)); + if (ds_type == DS_TYPE_DERIVE) + return (ctoj_jlong_to_number (jvm_env, (jlong) value.derive)); + if (ds_type == DS_TYPE_ABSOLUTE) + return (ctoj_jlong_to_number (jvm_env, (jlong) value.absolute)); else return (NULL); } /* }}} jobject ctoj_value_to_number */ @@ -580,7 +584,7 @@ static jobject ctoj_oconfig_item (JNIEnv *jvm_env, /* {{{ */ return (NULL); } - (*jvm_env)->CallVoidMethod (jvm_env, o_ocitem, m_addvalue, o_child); + (*jvm_env)->CallVoidMethod (jvm_env, o_ocitem, m_addchild, o_child); (*jvm_env)->DeleteLocalRef (jvm_env, o_child); } /* }}} for (i = 0; i < ci->children_num; i++) */ @@ -608,7 +612,7 @@ static jobject ctoj_data_set (JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ /* Search for the `DataSet (String type)' constructor. */ m_constructor = (*jvm_env)->GetMethodID (jvm_env, - c_dataset, "", "(Ljava.lang.String;)V"); + c_dataset, "", "(Ljava/lang/String;)V"); if (m_constructor == NULL) { ERROR ("java plugin: ctoj_data_set: Looking up the " @@ -1042,33 +1046,39 @@ static int jtoc_value (JNIEnv *jvm_env, /* {{{ */ class_ptr = (*jvm_env)->GetObjectClass (jvm_env, object_ptr); - if (ds_type == DS_TYPE_COUNTER) + if (ds_type == DS_TYPE_GAUGE) { - jlong tmp_long; + jdouble tmp_double; - status = jtoc_long (jvm_env, &tmp_long, - class_ptr, object_ptr, "longValue"); + status = jtoc_double (jvm_env, &tmp_double, + class_ptr, object_ptr, "doubleValue"); if (status != 0) { ERROR ("java plugin: jtoc_value: " - "jtoc_long failed."); + "jtoc_double failed."); return (-1); } - (*ret_value).counter = (counter_t) tmp_long; + (*ret_value).gauge = (gauge_t) tmp_double; } else { - jdouble tmp_double; + jlong tmp_long; - status = jtoc_double (jvm_env, &tmp_double, - class_ptr, object_ptr, "doubleValue"); + status = jtoc_long (jvm_env, &tmp_long, + class_ptr, object_ptr, "longValue"); if (status != 0) { ERROR ("java plugin: jtoc_value: " - "jtoc_double failed."); + "jtoc_long failed."); return (-1); } - (*ret_value).gauge = (gauge_t) tmp_double; + + if (ds_type == DS_TYPE_DERIVE) + (*ret_value).derive = (derive_t) tmp_long; + else if (ds_type == DS_TYPE_ABSOLUTE) + (*ret_value).absolute = (absolute_t) tmp_long; + else + (*ret_value).counter = (counter_t) tmp_long; } return (0); @@ -1970,7 +1980,7 @@ static int cjni_create_jvm (void) /* {{{ */ vm_args.options[i].optionString = jvm_argv[i]; } - status = JNI_CreateJavaVM (&jvm, (void **) &jvm_env, (void **) &vm_args); + status = JNI_CreateJavaVM (&jvm, (void *) &jvm_env, (void *) &vm_args); if (status != 0) { ERROR ("java plugin: cjni_create_jvm: " @@ -2179,6 +2189,15 @@ static int cjni_config_load_plugin (oconfig_item_t *ci) /* {{{ */ class->class = NULL; class->object = NULL; + { /* Replace all dots ('.') with slashes ('/'). Dots are usually used + thorough the Java community, but (Sun's) `FindClass' and friends need + slashes. */ + size_t i; + for (i = 0; class->name[i] != 0; i++) + if (class->name[i] == '.') + class->name[i] = '/'; + } + DEBUG ("java plugin: Loading class %s", class->name); class->class = (*jvm_env)->FindClass (jvm_env, class->name); @@ -2926,7 +2945,7 @@ static int cjni_shutdown (void) /* {{{ */ memset (&args, 0, sizeof (args)); args.version = JNI_VERSION_1_2; - status = (*jvm)->AttachCurrentThread (jvm, (void **) &jvm_env, &args); + status = (*jvm)->AttachCurrentThread (jvm, (void *) &jvm_env, &args); if (status != 0) { ERROR ("java plugin: cjni_shutdown: AttachCurrentThread failed with status %i.",