+import java.util.List;
+
+import com.google.common.base.Optional;
+
+public final class ClassLoaderUtils {
+
+ private ClassLoaderUtils() {
+ throw new UnsupportedOperationException("Utility class");
+ }
+
+ public static <V> V withClassLoader(ClassLoader cls, Callable<V> function) throws Exception {
+ return withClassLoaderAndLock(cls, Optional.<Lock> absent(), function);
+ }
+
+ public static <V> V withClassLoaderAndLock(ClassLoader cls, Lock lock, Callable<V> function) throws Exception {
+ checkNotNull(lock, "Lock should not be null");
+ return withClassLoaderAndLock(cls, Optional.of(lock), function);
+ }