diff --git a/src/ray/core_worker/lib/java/io_ray_runtime_task_NativeTaskSubmitter.cc b/src/ray/core_worker/lib/java/io_ray_runtime_task_NativeTaskSubmitter.cc index 858723da1..50e4126cd 100644 --- a/src/ray/core_worker/lib/java/io_ray_runtime_task_NativeTaskSubmitter.cc +++ b/src/ray/core_worker/lib/java/io_ray_runtime_task_NativeTaskSubmitter.cc @@ -177,8 +177,9 @@ inline ActorCreationOptions ToActorCreationOptions(JNIEnv *env, auto java_actor_lifetime = (jobject)env->GetObjectField( actorCreationOptions, java_actor_creation_options_lifetime); if (java_actor_lifetime != nullptr) { - is_detached = std::make_optional( - env->IsSameObject(java_actor_lifetime, STATUS_DETACHED)); + int java_actor_lifetime_ordinal_value = + env->CallIntMethod(java_actor_lifetime, java_actor_lifetime_ordinal); + is_detached = java_actor_lifetime_ordinal_value == DETACHED_LIFETIME_ORDINAL_VALUE; } max_restarts = diff --git a/src/ray/core_worker/lib/java/jni_init.cc b/src/ray/core_worker/lib/java/jni_init.cc index ff5e5542f..1115adb41 100644 --- a/src/ray/core_worker/lib/java/jni_init.cc +++ b/src/ray/core_worker/lib/java/jni_init.cc @@ -115,7 +115,8 @@ jfieldID java_actor_creation_options_serialized_runtime_env; jfieldID java_actor_creation_options_max_pending_calls; jclass java_actor_lifetime_class; -jobject STATUS_DETACHED; +int DETACHED_LIFETIME_ORDINAL_VALUE; +jmethodID java_actor_lifetime_ordinal; jclass java_placement_group_creation_options_class; jclass java_placement_group_creation_options_strategy_class; @@ -366,10 +367,14 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) { env->GetFieldID(java_actor_creation_options_class, "maxPendingCalls", "I"); java_actor_lifetime_class = LoadClass(env, "io/ray/api/options/ActorLifetime"); + java_actor_lifetime_ordinal = + env->GetMethodID(java_actor_lifetime_class, "ordinal", "()I"); jfieldID java_actor_lifetime_detached_field = env->GetStaticFieldID( java_actor_lifetime_class, "DETACHED", "Lio/ray/api/options/ActorLifetime;"); - STATUS_DETACHED = env->GetStaticObjectField(java_actor_lifetime_class, - java_actor_lifetime_detached_field); + jobject status_detached = env->GetStaticObjectField(java_actor_lifetime_class, + java_actor_lifetime_detached_field); + DETACHED_LIFETIME_ORDINAL_VALUE = + env->CallIntMethod(status_detached, java_actor_lifetime_ordinal); java_concurrency_group_impl_class = LoadClass(env, "io/ray/runtime/ConcurrencyGroupImpl"); diff --git a/src/ray/core_worker/lib/java/jni_utils.h b/src/ray/core_worker/lib/java/jni_utils.h index c59e9430c..805fd7c0e 100644 --- a/src/ray/core_worker/lib/java/jni_utils.h +++ b/src/ray/core_worker/lib/java/jni_utils.h @@ -205,8 +205,10 @@ extern jfieldID java_actor_creation_options_serialized_runtime_env; extern jfieldID java_actor_creation_options_max_pending_calls; /// ActorLifetime enum class extern jclass java_actor_lifetime_class; -/// Enum DETACHED of ActorLifetime class -extern jobject STATUS_DETACHED; +/// ordinal method of ActorLifetime class +extern jmethodID java_actor_lifetime_ordinal; +/// ordinal value of Enum DETACHED of ActorLifetime class +extern int DETACHED_LIFETIME_ORDINAL_VALUE; /// ConcurrencyGroupImpl class extern jclass java_concurrency_group_impl_class; /// getFunctionDescriptors method of ConcurrencyGroupImpl class