package com.sleepycat.bind.serial;
import java.io.ObjectStreamClass;
import com.sleepycat.je.DatabaseException;
import de.ovgu.cide.jakutil.*;
/**
* A catalog of class description information for use during object
* serialization.
* <p>
* A catalog is used to store class descriptions separately from serialized
* objects, to avoid redundantly stored information with each object. When
* serialized objects are stored in a database, a {@link StoredClassCatalog}should be used.
* </p>
* <p>
* This information is used for serialization of class descriptors or
* java.io.ObjectStreamClass objects, each of which represents a unique class
* format. For each unique format, a unique class ID is assigned by the catalog.
* The class ID can then be used in the serialization stream in place of the
* full class information. When used with {@link SerialInput} and{@link SerialOutput} or any of the serial bindings, the use of the catalog is
* transparent to the application.
* </p>
* @author Mark Hayes
*/
public interface ClassCatalog {
/**
* Close a catalog database and release any cached resources.
*/
public void close() throws DatabaseException ;
/**
* Return the class ID for the current version of the given class
* description. This is used for storing in serialization streams in place
* of a full class descriptor, since it is much more compact. To get back
* the ObjectStreamClass for a class ID, call{@link #getClassFormat(byte[])}. This function causes a new class ID to
* be assigned if the class description has changed.
* @param classDescThe class description for which to return the class ID.
* @return The class ID for the current version of the class.
*/
public byte[] getClassID( ObjectStreamClass classDesc) throws DatabaseException, ClassNotFoundException ;
/**
* Return the ObjectStreamClass for the given class ID. This may or may not
* be the current class format, depending on whether the class has changed
* since the class ID was generated.
* @param classIDThe class ID for which to return the class format.
* @return The class format for the given class ID, which may or may not
* represent the current version of the class.
*/
public ObjectStreamClass getClassFormat( byte[] classID) throws DatabaseException, ClassNotFoundException ;
}