001 package org.odmg; 002 003 004 005 /** 006 007 * The interface for interacting with an ODMG database. 008 009 * Databases must be opened before starting any transactions that use the database 010 011 * and closed after ending these transactions. 012 013 * <p> 014 015 * A database application generally begins processing by accessing one or more 016 017 * critical objects and proceeding from there. These objects are root objects, 018 019 * because they lead to interconnected webs of other objects. 020 021 * The ability to name an object (using method <code>bind</code>) and 022 023 * retrieve it later by that name (using method <code>lookup</code> facilitates 024 025 * this start-up capability. A name is not explicitly defined as an attribute of 026 027 * an object. Naming an object also makes it persistent. 028 029 * <p> 030 031 * There is a single flat name scope per database; thus all names in a particular 032 033 * database are unique. 034 035 * @author David Jordan (as Java Editor of the Object Data Management Group) 036 037 * @version ODMG 3.0 038 039 */ 040 041 042 043 public interface Database 044 045 { 046 047 /** 048 049 * The database is not open. 050 051 */ 052 053 public static final int NOT_OPEN = 0; 054 055 056 057 /** 058 059 * The database is opened for read-only access. 060 061 */ 062 063 public static final int OPEN_READ_ONLY = 1; 064 065 066 067 /** 068 069 * The database is opened for reading and writing. 070 071 */ 072 073 public static final int OPEN_READ_WRITE = 2; 074 075 076 077 /** 078 079 * The database is open for exclusive access. 080 081 */ 082 083 public static final int OPEN_EXCLUSIVE = 3; 084 085 086 087 /** 088 089 * Open the named database with the specified access mode. 090 091 * Attempts to open a database when it has already been opened will result in 092 093 * the throwing of the exception <code>DatabaseOpenException</code>. 094 095 * A <code>DatabaseNotFoundException</code> is thrown if the database does not exist. 096 097 * Some implementations may throw additional exceptions that are also derived from 098 099 * <code>ODMGException</code>. 100 101 * @param name The name of the database. 102 103 * @param accessMode The access mode, which should be one of the static fields: 104 105 * <code>OPEN_READ_ONLY</code>, <code>OPEN_READ_WRITE</code>, 106 107 * or <code>OPEN_EXCLUSIVE</code>. 108 109 * @exception ODMGException The database could not be opened. 110 111 */ 112 113 public void open(String name, int accessMode) throws ODMGException; 114 115 116 117 /** 118 119 * Close the database. 120 121 * After you have closed a database, further attempts to access objects in the 122 123 * database will cause the exception <code>DatabaseClosedException</code> to be thrown. 124 125 * Some implementations may throw additional exceptions that are also derived 126 127 * from <code>ODMGException</code>. 128 129 * @exception ODMGException Unable to close the database. 130 131 */ 132 133 public void close() throws ODMGException; 134 135 136 137 /** 138 139 * Associate a name with an object and make it persistent. 140 141 * An object instance may be bound to more than one name. 142 143 * Binding a previously transient object to a name makes that object persistent. 144 145 * @param object The object to be named. 146 147 * @param name The name to be given to the object. 148 149 * @exception org.odmg.ObjectNameNotUniqueException 150 151 * If an attempt is made to bind a name to an object and that name is already bound 152 153 * to an object. 154 155 */ 156 157 public void bind(Object object, String name) throws ObjectNameNotUniqueException; 158 159 160 161 /** 162 163 * Lookup an object via its name. 164 165 * @param name The name of an object. 166 167 * @return The object with that name. 168 169 * @exception ObjectNameNotFoundException There is no object with the specified name. 170 171 * @see ObjectNameNotFoundException 172 173 */ 174 175 public Object lookup(String name) throws ObjectNameNotFoundException; 176 177 178 179 /** 180 181 * Disassociate a name with an object 182 183 * @param name The name of an object. 184 185 * @exception ObjectNameNotFoundException No object exists in the database with that name. 186 187 */ 188 189 public void unbind(String name) throws ObjectNameNotFoundException; 190 191 192 193 /** 194 195 * Make a transient object durable in the database. 196 197 * It must be executed in the context of an open transaction. 198 199 * If the transaction in which this method is executed commits, 200 201 * then the object is made durable. 202 203 * If the transaction aborts, 204 205 * then the makePersistent operation is considered not to have been executed, 206 207 * and the target object is again transient. 208 209 * ClassNotPersistenceCapableException is thrown if the implementation cannot make 210 211 * the object persistent because of the type of the object. 212 213 * @param object The object to make persistent. 214 215 */ 216 217 public void makePersistent(Object object); 218 219 220 221 /** 222 223 * Deletes an object from the database. 224 225 * It must be executed in the context of an open transaction. 226 227 * If the object is not persistent, then ObjectNotPersistent is thrown. 228 229 * If the transaction in which this method is executed commits, 230 231 * then the object is removed from the database. 232 233 * If the transaction aborts, 234 235 * then the deletePersistent operation is considered not to have been executed, 236 237 * and the target object is again in the database. 238 239 * @param object The object to delete. 240 241 */ 242 243 public void deletePersistent(Object object); 244 245 } 246