[jboss-cvs] JBossCache/src/org/jboss/cache/marshall ...

Manik Surtani msurtani at jboss.com
Tue Oct 31 18:45:04 EST 2006


  User: msurtani
  Date: 06/10/31 18:45:04

  Modified:    src/org/jboss/cache/marshall  
                        ObjectSerializationFactory.java
  Added:       src/org/jboss/cache/marshall  
                        JBossObjectInputStreamOverride.java
  Log:
  JBCACHE-815
  
  Revision  Changes    Path
  1.17      +49 -56    JBossCache/src/org/jboss/cache/marshall/ObjectSerializationFactory.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ObjectSerializationFactory.java
  ===================================================================
  RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/marshall/ObjectSerializationFactory.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -b -r1.16 -r1.17
  --- ObjectSerializationFactory.java	24 Oct 2006 11:35:31 -0000	1.16
  +++ ObjectSerializationFactory.java	31 Oct 2006 23:45:04 -0000	1.17
  @@ -6,16 +6,16 @@
    */
   package org.jboss.cache.marshall;
   
  -import org.jboss.serial.io.JBossObjectInputStreamSharedTree;
  -import org.jboss.serial.io.JBossObjectOutputStreamSharedTree;
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
   import org.jboss.util.stream.MarshalledValueInputStream;
   
   import java.io.ByteArrayInputStream;
   import java.io.IOException;
  -import java.io.InputStream;
   import java.io.ObjectInputStream;
   import java.io.ObjectOutputStream;
   import java.io.OutputStream;
  +import java.lang.reflect.Constructor;
   
   /**
    * Factory class for creating object output and inut streams, switching between JDK defaults and JBoss Serialization classes.
  @@ -25,41 +25,34 @@
    */
   public class ObjectSerializationFactory
   {
  -    static class JBossObjectInputStreamOverride extends JBossObjectInputStreamSharedTree
  -    {
   
  -        public JBossObjectInputStreamOverride(InputStream input) throws IOException
  +   static boolean useJBossSerialization = false;
  +   private static Log log = LogFactory.getLog(ObjectSerializationFactory.class);
  +
  +   static
           {
  -            super(input);
  +      String useJBossSerializationStr = System.getProperty("serialization.jboss", "true");
  +      useJBossSerialization = Boolean.valueOf(useJBossSerializationStr);
           }
   
  -        public Object readObjectOverride() throws IOException, ClassNotFoundException
  +   public static ObjectOutputStream createObjectOutputStream(OutputStream out) throws IOException
  +   {
  +
  +      if (useJBossSerialization)
           {
  -            ClassLoader older = this.getClassLoader();
               try
               {
  -                this.setClassLoader(Thread.currentThread().getContextClassLoader());
  -                return super.readObjectOverride();
  +            Constructor c = ObjectSerializationFactory.class.getClassLoader().loadClass("org.jboss.serial.io.JBossObjectOutputStreamSharedTree").getConstructor(OutputStream.class);
  +            return (ObjectOutputStream) c.newInstance(out);
               }
  -            finally
  +         catch (Exception e)
               {
  -                this.setClassLoader(older);
  -            }
  +            log.error("Unable to create instance of org.jboss.serial.io.JBossObjectOutputStreamSharedTree - perhaps the JBoss Serialization jar is not in your classpath?", e);
  +            log.warn("Falling back to using (slower) Java serialization.");
           }
  -
  -    }
  -
  -    static boolean useJBossSerialization = false;
  -
  -    static
  -    {
  -        String useJBossSerializationStr = System.getProperty("serialization.jboss", "true");
  -        useJBossSerialization = Boolean.valueOf(useJBossSerializationStr).booleanValue();
       }
   
  -    public static ObjectOutputStream createObjectOutputStream(OutputStream out) throws IOException
  -    {
  -        return useJBossSerialization ? new JBossObjectOutputStreamSharedTree(out) : new ObjectOutputStream(out);
  +      return new ObjectOutputStream(out);
       }
   
       public static ObjectInputStream createObjectInputStream(byte[] bytes) throws IOException
  
  
  
  1.2       +36 -0     JBossCache/src/org/jboss/cache/marshall/JBossObjectInputStreamOverride.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: JBossObjectInputStreamOverride.java
  ===================================================================
  RCS file: JBossObjectInputStreamOverride.java
  diff -N JBossObjectInputStreamOverride.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ JBossObjectInputStreamOverride.java	31 Oct 2006 23:45:04 -0000	1.2
  @@ -0,0 +1,36 @@
  +package org.jboss.cache.marshall;
  +
  +import org.jboss.serial.io.JBossObjectInputStreamSharedTree;
  +
  +import java.io.IOException;
  +import java.io.InputStream;
  +
  +/**
  + * This exists to allow for dynamic resetting of the context class loader before every call.
  + *
  + * @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
  + * @since 1.4.0
  + */
  +class JBossObjectInputStreamOverride extends JBossObjectInputStreamSharedTree
  +{
  +
  +   public JBossObjectInputStreamOverride(InputStream input) throws IOException
  +   {
  +      super(input);
  +   }
  +
  +   public Object readObjectOverride() throws IOException, ClassNotFoundException
  +   {
  +      ClassLoader older = this.getClassLoader();
  +      try
  +      {
  +         this.setClassLoader(Thread.currentThread().getContextClassLoader());
  +         return super.readObjectOverride();
  +      }
  +      finally
  +      {
  +         this.setClassLoader(older);
  +      }
  +   }
  +
  +}
  
  
  



More information about the jboss-cvs-commits mailing list