Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.distributeme.agents;
  
 import java.util.List;
 import java.util.Map;
 
 public class AgentPackageUtility {
 	public static AgentPackage pack(Agent agent){
 		AgentPackage ret = new AgentPackage();
 	
 		try{
 			List<Class<?>> classes = scanForCustomClasses(agent);
 			for (Class<?> c : classes){
 			}
 		}catch(IOException e){
 			throw new RuntimeException("Couldn't pack agent "+agente);
 		}
 		return ret;
 	}
 	
 	private static byte[] readClass(Class<?> c){
 		InputStream in = null;
 		try{
 			String path = c.getSimpleName()+".class";
 			in = c.getResourceAsStream(path);
 			byte[] clazzData = new byte[in.available()];
 			in.read(clazzData);
 			return clazzData;
 		}catch(IOException e){
 			throw new RuntimeException("Couldn't load class "+ce);
 		}finally{
 			if (in!=null){
 				try{
 					in.close();
 				}catch(IOException ignored){}
 			}
 		}
 	}
 	
 	public static Agent unpack(AgentPackage pack){
 		try{
 			//force loading
 			Class myAgent = Class.forName(pack.getRootClazzName(), trueloader);
 			Agent agent = deserializeAgent(pack.getSerializedData(), loader);
 			return agent;
 		}catch (Exception e){
 		}
 		
 		return null;
 	}
 	
 	static class AgentPackageUtilClassLoader extends ClassLoader{
 		private Map<Stringbyte[]> classDefs;
 		
 		private Map<StringClasscache = new HashMap<StringClass>();;
 		
 		}
 		
 		protected synchronized Class<?> loadClass(String nameboolean resolvethrows ClassNotFoundException{
 //			System.out.println("-- loadClass "+name);
 			Class fromCache = .get(name);
 			if (fromCache!=null){
 //				System.out.println("--> from cache! ");
 				return fromCache;
 			}
 			if (.get(name)==null){
 				return super.loadClass(nameresolve);
 			}
 //			System.out.println(" -- defining "+name);
 			byte[] data = .get(name);
 			Class c = defineClass(namedata, 0, data.length);
 			.put(namec);
 			return c;
 		}
 
 	}
 	
 	private static byte[] serializeAgent(Agent objthrows IOException{
 		ByteArrayOutputStream bOut = null;
 		ObjectOutputStream oOut = null;
 		try{
 			bOut = new ByteArrayOutputStream();
 			oOut = new ObjectOutputStream(bOut);
			oOut.writeObject(obj);
			return bOut.toByteArray();
		}finally
			if (oOut!=null)
				try{
					oOut.close();
				}catch(Exception ignored){}//NOPMD
		}
	}
	private static Agent deserializeAgent(final byte[] datafinal AgentPackageUtilClassLoader loaderthrows IOException{
		ByteArrayInputStream bIn = null;
		ObjectInputStream oIn = null;
		try{
			bIn = new ByteArrayInputStream(data);
			oIn = new ObjectInputStream(bIn){
				protected Class<?> resolveClass(ObjectStreamClass desc)
					..println("Resolve class "+desc.getName()+" with loader "+loader);
					return loader.loadClass(desc.getName(), false);
				}
			};
			return (Agent)oIn.readObject();
			throw new IOException("deserialization failed: "+e.getMessage());
		}finally{
			if (oIn!=null){
				try{
					oIn.close();
				}catch(Exception ignored){}
			}
		}
	}
	static List<Class<?>> scanForCustomClasses(Agent agent){
		ArrayList<Class<?>> ret = new ArrayList<Class<?>>();
		return ret;
	}
	@SuppressWarnings("unchecked")
	private static void scanForCustomClassesInternally(Class<?> toScanList<Class<?>> foundClasses){
		if (toScan.isPrimitive())
			return;
		foundClasses.add(toScan);
		Field[] fields = toScan.getDeclaredFields();
		if (fields==null || fields.length==0)
			return;
		for (Field f : fields){
			if (f.getType().isPrimitive()){
				continue;
			}
			if (f.getType().getName().startsWith("java.")){
				continue;
			}
			if (!foundClasses.contains(f.getType()))
		}
	}
New to GrepCode? Check out our FAQ X