X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fjava.c;h=b69ca946b301c36a367c114e98666c7b33e69acd;hb=ba2ee9aec4c0454eed8f29b4c6ce96c6fc372346;hp=87b189fa1d6f647174dc3f813f80bdf4f4dc8886;hpb=ec6204a39b67229bfb05b763d1ceea135150880d;p=collectd.git diff --git a/src/java.c b/src/java.c index 87b189fa..b69ca946 100644 --- a/src/java.c +++ b/src/java.c @@ -109,7 +109,7 @@ static int cjni_callback_register (JNIEnv *jvm_env, jobject o_name, static int cjni_read (user_data_t *user_data); static int cjni_write (const data_set_t *ds, const value_list_t *vl, user_data_t *ud); -static int cjni_flush (int timeout, const char *identifier, user_data_t *ud); +static int cjni_flush (cdtime_t timeout, const char *identifier, user_data_t *ud); static void cjni_log (int severity, const char *message, user_data_t *ud); static int cjni_notification (const notification_t *n, user_data_t *ud); @@ -809,7 +809,7 @@ static jobject ctoj_value_list (JNIEnv *jvm_env, /* {{{ */ #undef SET_STRING /* Set the `time' member. Java stores time in milliseconds. */ - status = ctoj_long (jvm_env, ((jlong) vl->time) * ((jlong) 1000), + status = ctoj_long (jvm_env, (jlong) CDTIME_T_TO_MS (vl->time), c_valuelist, o_valuelist, "setTime"); if (status != 0) { @@ -819,7 +819,8 @@ static jobject ctoj_value_list (JNIEnv *jvm_env, /* {{{ */ } /* Set the `interval' member.. */ - status = ctoj_long (jvm_env, (jlong) vl->interval, + status = ctoj_long (jvm_env, + (jlong) CDTIME_T_TO_MS (vl->interval), c_valuelist, o_valuelist, "setInterval"); if (status != 0) { @@ -914,7 +915,7 @@ static jobject ctoj_notification (JNIEnv *jvm_env, /* {{{ */ return (NULL); } - /* Set the `interval' member.. */ + /* Set the `severity' member.. */ status = ctoj_int (jvm_env, (jint) n->severity, c_notification, o_notification, "setSeverity"); if (status != 0) @@ -1242,7 +1243,7 @@ static int jtoc_value_list (JNIEnv *jvm_env, value_list_t *vl, /* {{{ */ return (-1); } /* Java measures time in milliseconds. */ - vl->time = (time_t) (tmp_long / ((jlong) 1000)); + vl->time = MS_TO_CDTIME_T (tmp_long); status = jtoc_long (jvm_env, &tmp_long, class_ptr, object_ptr, "getInterval"); @@ -1251,7 +1252,7 @@ static int jtoc_value_list (JNIEnv *jvm_env, value_list_t *vl, /* {{{ */ ERROR ("java plugin: jtoc_value_list: jtoc_long (getInterval) failed."); return (-1); } - vl->interval = (int) tmp_long; + vl->interval = MS_TO_CDTIME_T (tmp_long); status = jtoc_values_array (jvm_env, ds, vl, class_ptr, object_ptr); if (status != 0) @@ -1419,7 +1420,7 @@ static jint JNICALL cjni_api_register_read (JNIEnv *jvm_env, /* {{{ */ ud.data = (void *) cbi; ud.free_func = cjni_callback_info_destroy; - plugin_register_complex_read (cbi->name, cjni_read, + plugin_register_complex_read (/* group = */ NULL, cbi->name, cjni_read, /* interval = */ NULL, &ud); (*jvm_env)->DeleteLocalRef (jvm_env, o_read); @@ -1729,7 +1730,7 @@ static cjni_callback_info_t *cjni_callback_info_create (JNIEnv *jvm_env, /* {{{ case CB_TYPE_FLUSH: method_name = "flush"; - method_signature = "(ILjava/lang/String;)I"; + method_signature = "(Ljava/lang/Number;Ljava/lang/String;)I"; break; case CB_TYPE_SHUTDOWN: @@ -1931,7 +1932,9 @@ static int cjni_init_native (JNIEnv *jvm_env) /* {{{ */ api_class_ptr = (*jvm_env)->FindClass (jvm_env, "org/collectd/api/Collectd"); if (api_class_ptr == NULL) { - ERROR ("cjni_init_native: Cannot find API class `org/collectd/api/Collectd'."); + ERROR ("cjni_init_native: Cannot find the API class \"org.collectd.api" + ".Collectd\". Please set the correct class path " + "using 'JVMArg \"-Djava.class.path=...\"'."); return (-1); } @@ -2253,7 +2256,6 @@ static int cjni_config_plugin_block (oconfig_item_t *ci) /* {{{ */ cjni_callback_info_t *cbi; jobject o_ocitem; const char *name; - int status; size_t i; jclass class; @@ -2308,7 +2310,7 @@ static int cjni_config_plugin_block (oconfig_item_t *ci) /* {{{ */ method = (*jvm_env)->GetMethodID (jvm_env, class, "config", "(Lorg/collectd/api/OConfigItem;)I"); - status = (*jvm_env)->CallIntMethod (jvm_env, + (*jvm_env)->CallIntMethod (jvm_env, cbi->object, method, o_ocitem); (*jvm_env)->DeleteLocalRef (jvm_env, o_ocitem); @@ -2551,11 +2553,12 @@ static int cjni_write (const data_set_t *ds, const value_list_t *vl, /* {{{ */ } /* }}} int cjni_write */ /* Call the CB_TYPE_FLUSH callback pointed to by the `user_data_t' pointer. */ -static int cjni_flush (int timeout, const char *identifier, /* {{{ */ +static int cjni_flush (cdtime_t timeout, const char *identifier, /* {{{ */ user_data_t *ud) { JNIEnv *jvm_env; cjni_callback_info_t *cbi; + jobject o_timeout; jobject o_identifier; int status; int ret_status; @@ -2578,21 +2581,32 @@ static int cjni_flush (int timeout, const char *identifier, /* {{{ */ cbi = (cjni_callback_info_t *) ud->data; + o_timeout = ctoj_jdouble_to_number (jvm_env, + (jdouble) CDTIME_T_TO_DOUBLE (timeout)); + if (o_timeout == NULL) + { + ERROR ("java plugin: cjni_flush: Converting double " + "to Number object failed."); + return (-1); + } + o_identifier = NULL; if (identifier != NULL) { o_identifier = (*jvm_env)->NewStringUTF (jvm_env, identifier); if (o_identifier == NULL) { + (*jvm_env)->DeleteLocalRef (jvm_env, o_timeout); ERROR ("java plugin: cjni_flush: NewStringUTF failed."); return (-1); } } ret_status = (*jvm_env)->CallIntMethod (jvm_env, - cbi->object, cbi->method, (jint) timeout, o_identifier); + cbi->object, cbi->method, o_timeout, o_identifier); (*jvm_env)->DeleteLocalRef (jvm_env, o_identifier); + (*jvm_env)->DeleteLocalRef (jvm_env, o_timeout); status = cjni_thread_detach (); if (status != 0) @@ -3065,9 +3079,8 @@ static int cjni_init (void) /* {{{ */ if (config_block != NULL) { - int status; - status = cjni_config_perform (config_block); + cjni_config_perform (config_block); oconfig_free (config_block); config_block = NULL; }