From 496a92b668991d6aa5356885169bace042b74444 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Wed, 23 Nov 2022 23:36:39 +0800 Subject: [PATCH] [JavaUDF](loader) Fix compatible problem for JAVA 11 (#14519) --- be/src/runtime/user_function_cache.cpp | 31 +------------------ be/src/runtime/user_function_cache.h | 2 -- .../org/apache/doris/udf/UdafExecutor.java | 1 + .../org/apache/doris/udf/UdfExecutor.java | 1 + 4 files changed, 3 insertions(+), 32 deletions(-) diff --git a/be/src/runtime/user_function_cache.cpp b/be/src/runtime/user_function_cache.cpp index 6bd202f5d9..5fdd1b16f8 100644 --- a/be/src/runtime/user_function_cache.cpp +++ b/be/src/runtime/user_function_cache.cpp @@ -307,9 +307,7 @@ Status UserFunctionCache::_load_cache_entry(const std::string& url, UserFunction if (entry->type == LibType::SO) { RETURN_IF_ERROR(_load_cache_entry_internal(entry)); - } else if (entry->type == LibType::JAR) { - RETURN_IF_ERROR(_add_to_classpath(entry)); - } else { + } else if (entry->type != LibType::JAR) { return Status::InvalidArgument( "Unsupported lib type! Make sure your lib type is one of 'so' and 'jar'!"); } @@ -376,33 +374,6 @@ Status UserFunctionCache::_load_cache_entry_internal(UserFunctionCacheEntry* ent return Status::OK(); } -Status UserFunctionCache::_add_to_classpath(UserFunctionCacheEntry* entry) { - if (config::enable_java_support) { - const std::string path = "file://" + entry->lib_file; - LOG(INFO) << "Add jar " << path << " to classpath"; - JNIEnv* env; - RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); - jclass class_class_loader = env->FindClass("java/lang/ClassLoader"); - jmethodID method_get_system_class_loader = env->GetStaticMethodID( - class_class_loader, "getSystemClassLoader", "()Ljava/lang/ClassLoader;"); - jobject class_loader = - env->CallStaticObjectMethod(class_class_loader, method_get_system_class_loader); - jclass class_url_class_loader = env->FindClass("java/net/URLClassLoader"); - jmethodID method_add_url = - env->GetMethodID(class_url_class_loader, "addURL", "(Ljava/net/URL;)V"); - jclass class_url = env->FindClass("java/net/URL"); - jmethodID url_ctor = env->GetMethodID(class_url, "", "(Ljava/lang/String;)V"); - jobject urlInstance = env->NewObject(class_url, url_ctor, env->NewStringUTF(path.c_str())); - env->CallVoidMethod(class_loader, method_add_url, urlInstance); - entry->is_loaded.store(true); - return Status::OK(); - } else { - return Status::InternalError( - "Java UDF is not enabled, you can change be config enable_java_support to true and " - "restart be."); - } -} - std::string UserFunctionCache::_make_lib_file(int64_t function_id, const std::string& checksum, LibType type) { int shard = function_id % kLibShardNum; diff --git a/be/src/runtime/user_function_cache.h b/be/src/runtime/user_function_cache.h index 1d1decf1cd..c9ea2ca189 100644 --- a/be/src/runtime/user_function_cache.h +++ b/be/src/runtime/user_function_cache.h @@ -80,8 +80,6 @@ private: Status _download_lib(const std::string& url, UserFunctionCacheEntry* entry); Status _load_cache_entry_internal(UserFunctionCacheEntry* entry); - Status _add_to_classpath(UserFunctionCacheEntry* entry); - std::string _make_lib_file(int64_t function_id, const std::string& checksum, LibType type); void _destroy_cache_entry(UserFunctionCacheEntry* entry); diff --git a/fe/java-udf/src/main/java/org/apache/doris/udf/UdafExecutor.java b/fe/java-udf/src/main/java/org/apache/doris/udf/UdafExecutor.java index 6414f3ba79..598886a26b 100644 --- a/fe/java-udf/src/main/java/org/apache/doris/udf/UdafExecutor.java +++ b/fe/java-udf/src/main/java/org/apache/doris/udf/UdafExecutor.java @@ -472,6 +472,7 @@ public class UdafExecutor { classLoader = UdfUtils.getClassLoader(jarPath, parent); loader = classLoader; } else { + // for test loader = ClassLoader.getSystemClassLoader(); } Class c = Class.forName(udfPath, true, loader); diff --git a/fe/java-udf/src/main/java/org/apache/doris/udf/UdfExecutor.java b/fe/java-udf/src/main/java/org/apache/doris/udf/UdfExecutor.java index 856b700918..2b3070eab9 100644 --- a/fe/java-udf/src/main/java/org/apache/doris/udf/UdfExecutor.java +++ b/fe/java-udf/src/main/java/org/apache/doris/udf/UdfExecutor.java @@ -455,6 +455,7 @@ public class UdfExecutor { classLoader = UdfUtils.getClassLoader(jarPath, parent); loader = classLoader; } else { + // for test loader = ClassLoader.getSystemClassLoader(); } Class c = Class.forName(udfPath, true, loader);