01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26:
27: package org.cougaar.core.persist;
28:
29: import org.cougaar.util.log.Logger;
30:
31: /**
32: * An object that requires special persistence and rehydration
33: * handling.
34: * <p>
35: * This is typically used as a hack for odd blackboard objects that
36: * can't [de]serialize correctly, or unusual domains. <b>AVOID</b>
37: * this interface unless you absolutely must use it!
38: */
39: public interface ActivePersistenceObject {
40:
41: /**
42: * Confirm that this object, not published to the blackboard
43: * but reachable from a blackboard object, should be
44: * persisted.
45: * <p>
46: * For example, if object X has a pointer to object Y,
47: * and only X is on the blackboard, then Y is "weakly reachable".
48: * If Y implements the ActivePersistenceObject interface, Y will be
49: * asked to confirm if Y should be persisted.
50: * <p>
51: * The default for objects that don't implement the
52: * ActivePersistenceObject interface is "false" (ie. persist
53: * all reachable objects).
54: *
55: * @return true if this object should <b>not</b> be persisted
56: */
57: boolean skipUnpublishedPersist(Logger logger);
58:
59: /**
60: * Validate an object that has just been persistence
61: * deserialized.
62: * <p>
63: * This occurs prior to the "postRehydration" validation,
64: * but is very similar. The difference is that this
65: * check is done as the objects are being deserialized,
66: * instead of after all of them have been deserialized.
67: */
68: void checkRehydration(Logger logger);
69:
70: /**
71: * Fix an object once rehydration has completed.
72: * <p>
73: * This is used as a last-minute cleanup, in case the
74: * object requires special deserialization work.
75: */
76: void postRehydration(Logger logger);
77: }
|