From 3e533b4e7dfb4438270f0b35828d5da0db3cd758 Mon Sep 17 00:00:00 2001 From: "Taro L. Saito" Date: Mon, 1 Aug 2011 17:03:55 +0900 Subject: [PATCH] use context class loader --- .../java/org/xerial/snappy/SnappyLoader.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/xerial/snappy/SnappyLoader.java b/src/main/java/org/xerial/snappy/SnappyLoader.java index 80b7457f..8be53795 100755 --- a/src/main/java/org/xerial/snappy/SnappyLoader.java +++ b/src/main/java/org/xerial/snappy/SnappyLoader.java @@ -81,13 +81,9 @@ */ public class SnappyLoader { - private static boolean isInitialized = false; - private static boolean isLoaded = false; - private static SnappyNativeAPI api = null; - - // preserved for LocalSnappyNativeLoader - private static HashMap loadedLibFiles = new HashMap(); - private static HashMap loadedLib = new HashMap(); + private static boolean isInitialized = false; + private static boolean isLoaded = false; + private static SnappyNativeAPI api = null; private static ClassLoader getRootClassLoader() { ClassLoader cl = SnappyLoader.class.getClassLoader(); @@ -193,7 +189,8 @@ static synchronized SnappyNativeAPI load() { try { if (!useNativeCodeInjection) { // Use the local loader - return SnappyLoader.class.getClassLoader().loadClass(LocalSnappyNativeLoader.class.getName()); + return Thread.currentThread().getContextClassLoader() + .loadClass(LocalSnappyNativeLoader.class.getName()); } else { // Use parent class loader to load SnappyNative, since Tomcat, which uses different class loaders for each webapps, cannot load JNI interface twice @@ -246,7 +243,7 @@ static synchronized SnappyNativeAPI load() { private static void loadNativeLibrary(Class< ? > loaderClass) { if (loaderClass == null) - throw new SnappyError(SnappyErrorCode.FAILED_TO_LOAD_NATIVE_LIBRARY, "missing snappy loader class"); + throw new SnappyError(SnappyErrorCode.FAILED_TO_LOAD_NATIVE_LIBRARY, "missing snappy native loader class"); try { File nativeLib = findNativeLibrary(); @@ -272,9 +269,12 @@ private static void loadNativeLibrary(Class< ? > loaderClass) { private static class LocalSnappyNativeLoader { + // preserved for LocalSnappyNativeLoader + private static HashMap loadedLibFiles = new HashMap(); + private static HashMap loadedLib = new HashMap(); public static synchronized void load(String lib) { - if (loadedLibFiles.containsKey(lib) && loadedLibFiles.get(lib) == true) + if (loadedLibFiles.containsKey(lib)) return; try { @@ -287,7 +287,7 @@ public static synchronized void load(String lib) { } public static synchronized void loadLibrary(String libname) { - if (loadedLib.containsKey(libname) && loadedLib.get(libname) == true) + if (loadedLib.containsKey(libname)) return; try {