You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by ha...@apache.org on 2001/03/17 18:03:05 UTC
cvs commit: jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/services/store ObjectRepository.java
hammant 01/03/17 09:03:05
Modified: src/java/org/apache/cornerstone/blocks/masterstore
File_Persistent_Object_Repository.java
src/java/org/apache/cornerstone/services/store
ObjectRepository.java
Added: src/java/org/apache/cornerstone/blocks/masterstore
FileStoreObjectInputStream.java
Log:
new get() method for ObjectRepository to allow the retrieval of serialized classes under very changable classloading situations.
Revision Changes Path
1.3 +39 -8 jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/masterstore/File_Persistent_Object_Repository.java
Index: File_Persistent_Object_Repository.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/masterstore/File_Persistent_Object_Repository.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- File_Persistent_Object_Repository.java 2001/03/13 04:51:56 1.2
+++ File_Persistent_Object_Repository.java 2001/03/17 17:03:04 1.3
@@ -11,6 +11,8 @@
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.io.StreamCorruptedException;
+import java.io.ObjectStreamClass;
import java.io.OutputStream;
import org.apache.cornerstone.services.Store;
import org.apache.cornerstone.services.store.ObjectRepository;
@@ -23,11 +25,11 @@
* @author <a href="mailto:fede@apache.org">Federico Barbieri</a>
* @author <a href="mailto:paul_hammant@yahoo.com">Paul Hammant</a>
*/
-public class File_Persistent_Object_Repository
- extends AbstractFileRepository
+public class File_Persistent_Object_Repository
+ extends AbstractFileRepository
implements Store.ObjectRepository, ObjectRepository
{
- protected String getExtensionDecorator()
+ protected String getExtensionDecorator()
{
return ".FileObjectStore";
}
@@ -45,7 +47,7 @@
{
final ObjectInputStream stream = new ObjectInputStream( inputStream );
final Object object = stream.readObject();
- if( DEBUG )
+ if( DEBUG )
{
getLogger().debug( "returning object " + object + " for key " + key );
}
@@ -55,16 +57,44 @@
{
inputStream.close();
}
- }
+ }
+ catch( final Exception e )
+ {
+ throw new RuntimeException( "Exception caught while retrieving an object: " + e );
+ }
+ }
+
+ public synchronized Object get( final String key , final ClassLoader classLoader )
+ {
+ try
+ {
+ final InputStream inputStream = getInputStream( key );
+
+ try
+ {
+ final ObjectInputStream stream = new FileStoreObjectInputStream( classLoader, inputStream );
+ final Object object = stream.readObject();
+ if( DEBUG )
+ {
+ getLogger().debug( "returning object " + object + " for key " + key );
+ }
+ return object;
+ }
+ finally
+ {
+ inputStream.close();
+ }
+ }
catch( final Exception e )
{
throw new RuntimeException( "Exception caught while retrieving an object: " + e );
}
+
}
-
+
/**
* Store the given object and associates it to the given key
- */
+ */
public synchronized void put( final String key, final Object value )
{
try
@@ -81,10 +111,11 @@
{
outputStream.close();
}
- }
+ }
catch( final Exception e )
{
throw new RuntimeException( "Exception caught while storing an object: " + e );
}
}
+
}
1.1 jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/masterstore/FileStoreObjectInputStream.java
Index: FileStoreObjectInputStream.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.cornerstone.blocks.masterstore;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;
import java.io.ObjectStreamClass;
import java.io.OutputStream;
/**
* A special ObjectInputStream to handle highly transient classes hosted
* by Avalon components that are juggling many classloaders.
*
* @author <a href="mailto:paul_hammant@yahoo.com">Paul Hammant</a>
*/
class FileStoreObjectInputStream extends ObjectInputStream
{
private ClassLoader classLoader;
private FileStoreObjectInputStream(ClassLoader classLoader, InputStream in) throws IOException, StreamCorruptedException
{
super(in);
this.classLoader = classLoader;
}
protected Class resolveClass(ObjectStreamClass v) throws IOException, ClassNotFoundException
{
Class cl = Class.forName(v.getName(), false, classLoader);
if (cl !=null)
{
return cl; // the classloader knows of the class
}
else
{
return super.resolveClass(v); // classloader knows not of class, let the super classloader do it
}
}
}
1.2 +3 -1 jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/services/store/ObjectRepository.java
Index: ObjectRepository.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/services/store/ObjectRepository.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ObjectRepository.java 2001/03/13 04:52:01 1.1
+++ ObjectRepository.java 2001/03/17 17:03:04 1.2
@@ -14,10 +14,12 @@
*
* @author Federico Barbieri <fe...@apache.org>
*/
-public interface ObjectRepository
+public interface ObjectRepository
extends Repository
{
Object get( String key );
+
+ Object get( String key , ClassLoader classLoader );
void put( String key, Object value );
---------------------------------------------------------------------
To unsubscribe, e-mail: avalon-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: avalon-dev-help@jakarta.apache.org