001: // You can redistribute this software and/or modify it under the terms of
002: // the Ozone Core License version 1 published by ozone-db.org.
003: //
004: // The original code and portions created by SMB are
005: // Copyright (C) 1997-@year@ by SMB GmbH. All rights reserved.
006: //
007: // $Id: ObjectContainer.java,v 1.2 2002/06/08 00:49:38 mediumnet Exp $
008:
009: package org.ozoneDB.core;
010:
011: import java.io.*;
012: import java.util.*;
013: import org.ozoneDB.DxLib.*;
014: import org.ozoneDB.*;
015: import org.ozoneDB.core.dr.*;
016:
017: /**
018: * Together with the {@link StoreManager} interface this is part of the
019: * StoreManager back-end API.<p>
020: *
021: * An ObjectContainer wraps a target (database) object and decorates it with
022: * functionality needed by the database system, such as the corresponding object
023: * ID. Also, the ObjectContainer is the delegate for the methods defined by
024: * {@link OzoneCompatible}.
025: *
026: *
027: * @author <a href="http://www.softwarebuero.de/">SMB</a>
028: * @author <A HREF="http://www.medium.net/">Medium.net</A>
029: * @version $Revision: 1.2 $Date: 2002/06/08 00:49:38 $
030: */
031: public interface ObjectContainer extends Lockable {
032:
033: public final static String PROXYNAME_POSTFIX = "_Proxy";
034: public final static String IMPLNAME_POSTFIX = "_Impl";
035:
036: // possible return values of the state() method
037: public final static int STATE_CLEAN = 0;
038: public final static int STATE_READ = 1;
039: public final static int STATE_MODIFIED = 2;
040: public final static int STATE_CREATED = 4;
041: public final static int STATE_DELETED = 8;
042:
043: /**
044: * Return the current state of the container. Possible return values are the
045: * STATE constants defined in this class. A container can only be in one of
046: * these states at one time. The state of a container can only be raised
047: * during one transaction. So, if a container is created (STATE_CREATED)
048: * during a transaction, the state can become STATE_DELETED only.
049: *
050: *
051: * @return The state of the container.
052: */
053: public int state();
054:
055: /**
056: * Returns the time when the container was last commited with lock level
057: * greater than {@link LEVEL_READ}. The value returned by this method should
058: * only be compared against return values of this method.
059: */
060: public long modTime();
061:
062: public Lock lock();
063:
064: public void touch();
065:
066: public void setName(String _name);
067:
068: public String name();
069:
070: public void setTarget(OzoneCompatible _target);
071:
072: public OzoneCompatible target();
073:
074: public Class targetClass();
075:
076: public void createTarget(Env env, Class cl, String sig,
077: Object[] args) throws Exception;
078:
079: public Object invokeTarget(Env env, String methodName, String sig,
080: Object[] args) throws Exception;
081:
082: public Object invokeTarget(Env env, int methodIndex, Object[] args)
083: throws Exception;
084:
085: public void deleteTarget();
086:
087: public void nameTarget(String _name);
088:
089: public OzoneCompatible targetClone() throws Exception;
090:
091: /**
092: * @return True if obj and receiver point to the same target object.
093: */
094: public boolean equals(Object obj);
095:
096: /**
097: * Return a proxy for the receiver.
098: * @return Proxy for this object.
099: */
100: public OzoneProxy ozoneProxy();
101:
102: public ObjectID id();
103:
104: public OzoneInterface database();
105:
106: public Permissions permissions();
107:
108: /**
109: Pins this ObjectContainer.
110: Every caller of this method must pair this call with a call to {@link #unpin}.
111: An ObjectContainer remains in main memory at least as long as it is pinned.
112: */
113: public void pin();
114:
115: /**
116: Unpins this ObjectContainer.
117: This method must be called exactly once for every call to {@link #pin}.
118: */
119: public void unpin();
120:
121: /**
122: Returns wether this ObjectContainer is pinned.
123: */
124: public boolean isPinned();
125:
126: /**
127: Ensures that the garbageCollectionLevel is at least the given currentGarbageCollectionLevel.
128: The return value is meaningful if the supplied newGarbageCollectionLevel is the currentGarbageCollectionLevel
129:
130: @return
131: <=0 if this object still has to be processed.
132: This is the case if it belongs to the surelyReachable set but not to the processedReachable set
133: > otherwise
134:
135: <0 if this object has been updated
136: =0 if this object has not been updated, it is surelyReachable
137: >0 if this object has not been updated, it is processedReachable
138: */
139: public int ensureGarbageCollectionLevel(
140: int newGarbageCollectionLevel);
141:
142: /**
143: Returns the garbageCollectionLevel this ObjectContainer has reached due to (not) calling {@link #ensureGarbageCollectionLevel}.
144: */
145: public int getGarbageCollectionLevel();
146: }
|