Package org.jboss.invocation.pooled.interfaces

Source Code of org.jboss.invocation.pooled.interfaces.OptimizedObjectInputStream

/*     */ package org.jboss.invocation.pooled.interfaces;
/*     */
/*     */ import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
/*     */ import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
/*     */ import java.io.IOException;
/*     */ import java.io.InputStream;
/*     */ import java.io.ObjectInputStream;
/*     */ import java.io.ObjectStreamClass;
/*     */ import java.lang.ref.WeakReference;
/*     */ import java.lang.reflect.Method;
/*     */ import java.lang.reflect.Proxy;
/*     */ import java.util.Collections;
/*     */ import java.util.Map;
/*     */ import java.util.WeakHashMap;
/*     */
/*     */ public class OptimizedObjectInputStream extends ObjectInputStream
/*     */ {
/*     */   private static Map classCache;
/*     */   private static ConcurrentReaderHashMap objectStreamClassCache;
/*  53 */   private static Method lookupStreamClass = null;
/*     */
/*     */   public static void useClassCache(boolean flag)
/*     */   {
/*  76 */     if (flag == true)
/*     */     {
/*  78 */       classCache = Collections.synchronizedMap(new WeakHashMap());
/*  79 */       objectStreamClassCache = new ConcurrentReaderHashMap();
/*     */     }
/*     */     else
/*     */     {
/*  83 */       classCache = null;
/*  84 */       objectStreamClassCache = null;
/*     */     }
/*     */   }
/*     */
/*     */   public static void flushClassCache()
/*     */   {
/*  93 */     classCache.clear();
/*  94 */     objectStreamClassCache.clear();
/*     */   }
/*     */
/*     */   private static Class forName(String className) throws ClassNotFoundException
/*     */   {
/*  99 */     Class clazz = null;
/*     */
/* 101 */     if (classCache != null)
/*     */     {
/* 104 */       ConcurrentHashMap subCache = (ConcurrentHashMap)classCache.get(Thread.currentThread().getContextClassLoader());
/* 105 */       if (subCache == null)
/*     */       {
/* 107 */         classCache.put(Thread.currentThread().getContextClassLoader(), new ConcurrentHashMap());
/* 108 */         subCache = (ConcurrentHashMap)classCache.get(Thread.currentThread().getContextClassLoader());
/*     */       }
/*     */
/* 111 */       WeakReference ref = (WeakReference)subCache.get(className);
/* 112 */       if (ref != null)
/*     */       {
/* 114 */         clazz = (Class)ref.get();
/*     */       }
/* 116 */       if (clazz == null)
/*     */       {
/* 118 */         if (ref != null) subCache.remove(className);
/* 119 */         ClassLoader loader = Thread.currentThread().getContextClassLoader();
/*     */         try
/*     */         {
/* 122 */           clazz = loader.loadClass(className);
/*     */         }
/*     */         catch (ClassNotFoundException e)
/*     */         {
/* 130 */           clazz = Class.forName(className, false, loader);
/*     */         }
/* 132 */         subCache.put(className, new WeakReference(clazz));
/*     */       }
/*     */     }
/*     */     else
/*     */     {
/* 137 */       clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
/*     */     }
/* 139 */     return clazz;
/*     */   }
/*     */
/*     */   public OptimizedObjectInputStream(InputStream is)
/*     */     throws IOException
/*     */   {
/* 147 */     super(is);
/*     */   }
/*     */
/*     */   protected static ObjectStreamClass lookup(Class clazz)
/*     */   {
/* 152 */     Object[] args = { clazz, Boolean.TRUE };
/*     */     try
/*     */     {
/* 155 */       return (ObjectStreamClass)lookupStreamClass.invoke(null, args);
/*     */     }
/*     */     catch (Exception ex)
/*     */     {
/* 159 */       ex.printStackTrace();
/*     */     }
/* 161 */     return null;
/*     */   }
/*     */
/*     */   protected ObjectStreamClass readClassDescriptor()
/*     */     throws IOException, ClassNotFoundException
/*     */   {
/* 167 */     if (CompatibilityVersion.pooledInvokerLegacy)
/*     */     {
/* 169 */       String className = readUTF();
/* 170 */       ObjectStreamClass osc = null;
/* 171 */       if (objectStreamClassCache != null)
/*     */       {
/* 173 */         osc = (ObjectStreamClass)objectStreamClassCache.get(className);
/*     */       }
/* 175 */       if (osc == null)
/*     */       {
/* 177 */         Class clazz = forName(className);
/* 178 */         osc = ObjectStreamClass.lookup(clazz);
/* 179 */         if (osc == null) osc = lookup(clazz);
/* 180 */         if (osc == null) throw new IOException("Unable to readClassDescriptor for class " + className);
/* 181 */         if (objectStreamClassCache != null) objectStreamClassCache.put(className, osc);
/*     */       }
/* 183 */       return osc;
/*     */     }
/*     */
/* 187 */     return super.readClassDescriptor();
/*     */   }
/*     */
/*     */   protected Class resolveClass(ObjectStreamClass v)
/*     */     throws IOException, ClassNotFoundException
/*     */   {
/* 199 */     String className = v.getName();
/* 200 */     return forName(className);
/*     */   }
/*     */
/*     */   protected Class resolveProxyClass(String[] interfaces)
/*     */     throws IOException, ClassNotFoundException
/*     */   {
/* 207 */     ClassLoader loader = Thread.currentThread().getContextClassLoader();
/* 208 */     Class[] ifaceClasses = new Class[interfaces.length];
/* 209 */     for (int i = 0; i < interfaces.length; i++)
/*     */     {
/* 211 */       String className = interfaces[i];
/* 212 */       Class iface = forName(className);
/* 213 */       ifaceClasses[i] = iface;
/*     */     }
/*     */
/* 216 */     return Proxy.getProxyClass(loader, ifaceClasses);
/*     */   }
/*     */
/*     */   static
/*     */   {
/*  57 */     useClassCache(true);
/*     */     try
/*     */     {
/*  60 */       lookupStreamClass = ObjectStreamClass.class.getDeclaredMethod("lookup", new Class[] { Class.class, Boolean.TYPE });
/*  61 */       lookupStreamClass.setAccessible(true);
/*     */     }
/*     */     catch (Exception ex)
/*     */     {
/*  65 */       ex.printStackTrace();
/*     */     }
/*     */   }
/*     */ }

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/jboss-embedded-all.jar
* Qualified Name:     org.jboss.invocation.pooled.interfaces.OptimizedObjectInputStream
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.jboss.invocation.pooled.interfaces.OptimizedObjectInputStream

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.