You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2019/11/03 05:34:38 UTC
[dubbo] 06/12: ExtensionLoader load META-INF/dubbo/internal/
extension from ExtensionLoader ClassLoader first
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit fe2b1274d07454a32d2399f084cd50cf0e76d625
Author: hengyunabc <he...@gmail.com>
AuthorDate: Mon Oct 14 18:07:25 2019 +0800
ExtensionLoader load META-INF/dubbo/internal/ extension from ExtensionLoader ClassLoader first
---
.../apache/dubbo/common/extension/ExtensionLoader.java | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index bc4739d..2f77ee3 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
@@ -628,8 +628,10 @@ public class ExtensionLoader<T> {
cacheDefaultExtensionName();
Map<String, Class<?>> extensionClasses = new HashMap<>();
- loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName());
- loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName().replace("org.apache", "com.alibaba"));
+ // internal extension load from ExtensionLoader's ClassLoader first
+ loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName(), true);
+ loadDirectory(extensionClasses, DUBBO_INTERNAL_DIRECTORY, type.getName().replace("org.apache", "com.alibaba"), true);
+
loadDirectory(extensionClasses, DUBBO_DIRECTORY, type.getName());
loadDirectory(extensionClasses, DUBBO_DIRECTORY, type.getName().replace("org.apache", "com.alibaba"));
loadDirectory(extensionClasses, SERVICES_DIRECTORY, type.getName());
@@ -658,15 +660,21 @@ public class ExtensionLoader<T> {
}
private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type) {
+ loadDirectory(extensionClasses, dir, type, false);
+ }
+
+ private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type, boolean extensionLoaderClassLoaderFirst) {
String fileName = dir + type;
try {
Enumeration<java.net.URL> urls = null;
ClassLoader classLoader = findClassLoader();
// try to load from ExtensionLoader's ClassLoader first
- ClassLoader extensionLoaderClassLoader = ExtensionLoader.class.getClassLoader();
- if (ClassLoader.getSystemClassLoader() != extensionLoaderClassLoader) {
- urls = extensionLoaderClassLoader.getResources(fileName);
+ if (extensionLoaderClassLoaderFirst) {
+ ClassLoader extensionLoaderClassLoader = ExtensionLoader.class.getClassLoader();
+ if (ClassLoader.getSystemClassLoader() != extensionLoaderClassLoader) {
+ urls = extensionLoaderClassLoader.getResources(fileName);
+ }
}
if(urls == null || !urls.hasMoreElements()) {