View Javadoc

1   package org.odmg;
2   
3   
4   
5   /**
6   
7    * The interface for interacting with an ODMG database.
8   
9    * Databases must be opened before starting any transactions that use the database
10  
11   * and closed after ending these transactions.
12  
13   * <p>
14  
15   * A database application generally begins processing by accessing one or more
16  
17   * critical objects and proceeding from there. These objects are root objects,
18  
19   * because they lead to interconnected webs of other objects.
20  
21   * The ability to name an object (using method <code>bind</code>) and
22  
23   * retrieve it later by that name (using method <code>lookup</code> facilitates
24  
25   * this start-up capability. A name is not explicitly defined as an attribute of
26  
27   * an object. Naming an object also makes it persistent.
28  
29   * <p>
30  
31   * There is a single flat name scope per database; thus all names in a particular
32  
33   * database are unique.
34  
35   * @author	David Jordan (as Java Editor of the Object Data Management Group)
36  
37   * @version ODMG 3.0
38  
39   */
40  
41  
42  
43  public interface Database
44  
45  {
46  
47      /**
48  
49       * The database is not open.
50  
51       */
52  
53      public static final int NOT_OPEN = 0;
54  
55  
56  
57      /**
58  
59       * The database is opened for read-only access.
60  
61       */
62  
63      public static final int OPEN_READ_ONLY = 1;
64  
65  
66  
67      /**
68  
69       * The database is opened for reading and writing.
70  
71       */
72  
73      public static final int OPEN_READ_WRITE = 2;
74  
75  
76  
77      /**
78  
79       * The database is open for exclusive access.
80  
81       */
82  
83      public static final int OPEN_EXCLUSIVE = 3;
84  
85  
86  
87      /**
88  
89       * Open the named database with the specified access mode.
90  
91       * Attempts to open a database when it has already been opened will result in
92  
93       * the throwing of the exception <code>DatabaseOpenException</code>.
94  
95       * A <code>DatabaseNotFoundException</code> is thrown if the database does not exist.
96  
97       * Some implementations may throw additional exceptions that are also derived from
98  
99       * <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