01: /*-
02: * See the file LICENSE for redistribution information.
03: *
04: * Copyright (c) 2000,2008 Oracle. All rights reserved.
05: *
06: * $Id: ClassCatalog.java,v 1.18.2.2 2008/01/07 15:14:05 cwl Exp $
07: */
08:
09: package com.sleepycat.bind.serial;
10:
11: import java.io.ObjectStreamClass;
12:
13: import com.sleepycat.je.DatabaseException;
14:
15: /**
16: * A catalog of class description information for use during object
17: * serialization.
18: *
19: * <p>A catalog is used to store class descriptions separately from serialized
20: * objects, to avoid redundantly stored information with each object.
21: * When serialized objects are stored in a database, a {@link
22: * StoredClassCatalog} should be used.</p>
23: *
24: * <p>This information is used for serialization of class descriptors or
25: * java.io.ObjectStreamClass objects, each of which represents a unique class
26: * format. For each unique format, a unique class ID is assigned by the
27: * catalog. The class ID can then be used in the serialization stream in place
28: * of the full class information. When used with {@link SerialInput} and
29: * {@link SerialOutput} or any of the serial bindings, the use of the catalog
30: * is transparent to the application.</p>
31: *
32: * @author Mark Hayes
33: */
34: public interface ClassCatalog {
35:
36: /**
37: * Close a catalog database and release any cached resources.
38: */
39: public void close() throws DatabaseException;
40:
41: /**
42: * Return the class ID for the current version of the given class
43: * description.
44: * This is used for storing in serialization streams in place of a full
45: * class descriptor, since it is much more compact. To get back the
46: * ObjectStreamClass for a class ID, call {@link #getClassFormat(byte[])}.
47: * This function causes a new class ID to be assigned if the class
48: * description has changed.
49: *
50: * @param classDesc The class description for which to return the
51: * class ID.
52: *
53: * @return The class ID for the current version of the class.
54: */
55: public byte[] getClassID(ObjectStreamClass classDesc)
56: throws DatabaseException, ClassNotFoundException;
57:
58: /**
59: * Return the ObjectStreamClass for the given class ID. This may or may
60: * not be the current class format, depending on whether the class has
61: * changed since the class ID was generated.
62: *
63: * @param classID The class ID for which to return the class format.
64: *
65: * @return The class format for the given class ID, which may or may not
66: * represent the current version of the class.
67: */
68: public ObjectStreamClass getClassFormat(byte[] classID)
69: throws DatabaseException, ClassNotFoundException;
70: }
|