RLPark 1.0.0
Reinforcement Learning Framework in Java

ClassLoading.java

Go to the documentation of this file.
00001 package rlpark.plugin.rltoys.experiments.scheduling.internal.messages;
00002 
00003 import java.io.IOException;
00004 import java.io.InputStream;
00005 import java.io.ObjectInputStream;
00006 import java.io.ObjectStreamClass;
00007 
00008 public class ClassLoading {
00009   public interface NetworkFindClass {
00010     Class<?> findClass(String name);
00011   }
00012 
00013   private static boolean forceNetworkClassResolution = false;
00014 
00015   public static ObjectInputStream createObjectInputStream(InputStream in, final ClassLoader classLoader)
00016       throws IOException {
00017     if (classLoader == null)
00018       return new ObjectInputStream(in);
00019     return new ObjectInputStream(in) {
00020       @Override
00021       protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
00022         String className = desc.getName();
00023         if (forceFindClass(className))
00024           return ((NetworkFindClass) classLoader).findClass(className);
00025         try {
00026           return Class.forName(className);
00027         } catch (ClassNotFoundException exc) {
00028           try {
00029             return classLoader.loadClass(className);
00030           } catch (ClassNotFoundException e) {
00031           }
00032         }
00033         throw new ClassNotFoundException(className);
00034       }
00035     };
00036   }
00037 
00038   public static void enableForceNetworkClassResolution() {
00039     forceNetworkClassResolution = true;
00040   }
00041 
00042   public static boolean forceFindClass(String name) {
00043     if (!forceNetworkClassResolution)
00044       return false;
00045     if (name.startsWith("java."))
00046       return false;
00047     return name.contains("$");
00048   }
00049 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark