Skip to content

Commit 606c041

Browse files
author
yanxi
committed
Merge branch '1.5_v3.6.0_yarnperjob_udf_classload_bug' into 'v1.5.0_dev'
修复 yarn perjob模式下加载 udf jar 问题 See merge request !13
2 parents f35aaad + c801fbe commit 606c041

File tree

2 files changed

+86
-2
lines changed

2 files changed

+86
-2
lines changed

core/src/main/java/com/dtstack/flink/sql/util/FlinkUtil.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,13 @@ public static URLClassLoader loadExtraJar(List<URL> jarURLList, URLClassLoader c
267267
return classLoader;
268268
}
269269

270-
private static void urlClassLoaderAddUrl(URLClassLoader classLoader, URL url) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
271-
Method method = classLoader.getClass().getDeclaredMethod("addURL", URL.class);
270+
private static void urlClassLoaderAddUrl(URLClassLoader classLoader, URL url) throws InvocationTargetException, IllegalAccessException {
271+
Method method = ReflectionUtils.getDeclaredMethod(classLoader, "addURL", URL.class);
272+
273+
if(method == null){
274+
throw new RuntimeException("can't not find declared method addURL, curr classLoader is " + classLoader.getClass());
275+
}
276+
272277
method.setAccessible(true);
273278
method.invoke(classLoader, url);
274279
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
package com.dtstack.flink.sql.util;
20+
21+
import java.lang.reflect.Field;
22+
import java.lang.reflect.Method;
23+
24+
/**
25+
*
26+
* Date: 2019/4/22
27+
* Company: www.dtstack.com
28+
* @author xuchao
29+
*/
30+
31+
public class ReflectionUtils {
32+
33+
/**
34+
* get declaredMethod util find
35+
* @param object
36+
* @param methodName
37+
* @param parameterTypes
38+
* @return
39+
*/
40+
public static Method getDeclaredMethod(Object object, String methodName, Class<?> ... parameterTypes){
41+
Method method = null ;
42+
43+
for(Class<?> clazz = object.getClass() ; clazz != Object.class ; clazz = clazz.getSuperclass()) {
44+
try {
45+
method = clazz.getDeclaredMethod(methodName, parameterTypes) ;
46+
return method ;
47+
} catch (Exception e) {
48+
//do nothing then can get method from super Class
49+
}
50+
}
51+
52+
return null;
53+
}
54+
55+
/**
56+
* 循环向上转型, 获取对象的 DeclaredField
57+
* @param object : 子类对象
58+
* @param fieldName : 父类中的属性名
59+
* @return 父类中的属性对象
60+
*/
61+
62+
public static Field getDeclaredField(Object object, String fieldName){
63+
Field field = null ;
64+
65+
Class<?> clazz = object.getClass() ;
66+
67+
for(; clazz != Object.class ; clazz = clazz.getSuperclass()) {
68+
try {
69+
field = clazz.getDeclaredField(fieldName) ;
70+
return field ;
71+
} catch (Exception e) {
72+
//do nothing then can get field from super Class
73+
}
74+
}
75+
76+
return null;
77+
}
78+
79+
}

0 commit comments

Comments
 (0)