[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