/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2000, 2015 Oracle and/or its affiliates. All rights reserved. * */ package com.sleepycat.bind.serial; import java.io.Closeable; import java.io.ObjectStreamClass; import com.sleepycat.db.DatabaseException; /** * 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> * * @see <a href="SerialBinding.html#evolution">Class Evolution</a> * * @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 classDesc The 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 classID The 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; /** * Returns the ClassLoader to be used by bindings that use this catalog. * The ClassLoader is used by {@link SerialBinding} to load classes whose * description is stored in the catalog. * * <p>In BDB JE, the implementation of this method in {@link * StoredClassCatalog} returns the ClassLoader property of the catalog * database Environment. This ensures that the Environment's ClassLoader * property is used for loading all user-supplied classes.</p> */ public ClassLoader getClassLoader(); }