| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| OTMConnection |
|
| 1.0;1 |
| 1 | package org.apache.ojb.otm; | |
| 2 | ||
| 3 | /* Copyright 2003-2005 The Apache Software Foundation | |
| 4 | * | |
| 5 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
| 6 | * you may not use this file except in compliance with the License. | |
| 7 | * You may obtain a copy of the License at | |
| 8 | * | |
| 9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
| 10 | * | |
| 11 | * Unless required by applicable law or agreed to in writing, software | |
| 12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
| 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 14 | * See the License for the specific language governing permissions and | |
| 15 | * limitations under the License. | |
| 16 | */ | |
| 17 | ||
| 18 | import java.util.Collection; | |
| 19 | import java.util.Iterator; | |
| 20 | import org.apache.ojb.broker.Identity; | |
| 21 | import org.apache.ojb.broker.cache.ObjectCache; | |
| 22 | import org.apache.ojb.broker.metadata.ClassDescriptor; | |
| 23 | import org.apache.ojb.broker.query.Query; | |
| 24 | import org.apache.ojb.otm.lock.LockingException; | |
| 25 | import org.apache.ojb.otm.core.Transaction; | |
| 26 | import org.apache.ojb.odmg.oql.EnhancedOQLQuery; | |
| 27 | import org.odmg.OQLQuery; | |
| 28 | ||
| 29 | /** | |
| 30 | * | |
| 31 | * A OTMConnection within the given Environment | |
| 32 | * | |
| 33 | * @author <a href="mailto:rraghuram@hotmail.com">Raghu Rajah</a> | |
| 34 | */ | |
| 35 | public interface OTMConnection | |
| 36 | { | |
| 37 | ||
| 38 | /** | |
| 39 | * | |
| 40 | * Make the given object persistent by inserting it into the database. | |
| 41 | * Also read locks the object (OTM will automatically lock | |
| 42 | * it for write on transaction commit if the object will appear | |
| 43 | * to be modified). | |
| 44 | * | |
| 45 | * @param object the object to be made persistent | |
| 46 | * | |
| 47 | */ | |
| 48 | public void makePersistent(Object object) | |
| 49 | throws LockingException; | |
| 50 | ||
| 51 | /** | |
| 52 | * Obtain the Transaction this connection is associated with | |
| 53 | */ | |
| 54 | public Transaction getTransaction(); | |
| 55 | ||
| 56 | /** | |
| 57 | * Associate this connection with a given transaction. | |
| 58 | */ | |
| 59 | public void setTransaction(Transaction tx); | |
| 60 | ||
| 61 | /** | |
| 62 | * | |
| 63 | * Mark the given object for deletion from the persistent store. The object would then become | |
| 64 | * a transient object, rather than a persistent one. | |
| 65 | * | |
| 66 | * @param obj the object to delete | |
| 67 | * | |
| 68 | */ | |
| 69 | public void deletePersistent(Object obj) | |
| 70 | throws LockingException; | |
| 71 | ||
| 72 | /** | |
| 73 | * | |
| 74 | * Lock the given object for Write. Only write locked objects are persisted back to the | |
| 75 | * database. Changes to read objects are not inserted back into the database. | |
| 76 | * | |
| 77 | * @param object the object to be locked for write. | |
| 78 | * | |
| 79 | */ | |
| 80 | public void lockForWrite(Object object) | |
| 81 | throws LockingException; | |
| 82 | ||
| 83 | /** | |
| 84 | * | |
| 85 | * Get the object with the given Identity from the persistent store. By default, the fetch is | |
| 86 | * for read. (OTM will automatically lock it for write on transaction commit | |
| 87 | * if the object will appear to be modified). | |
| 88 | * | |
| 89 | * @param oid the Identity of the object to fetch | |
| 90 | * @return the object from the persistent store. | |
| 91 | * @throws LockingException thrown by the LockManager to avoid deadlocks. The fetch could be | |
| 92 | * re-submitted. | |
| 93 | * | |
| 94 | */ | |
| 95 | public Object getObjectByIdentity(Identity oid) | |
| 96 | throws LockingException; | |
| 97 | ||
| 98 | /** | |
| 99 | * | |
| 100 | * Get the object with the given Identity from the persistent store with the given lock value. | |
| 101 | * | |
| 102 | * @param oid the Identity of the object to fetch | |
| 103 | * @param lock the lock that need to be acquired on the object | |
| 104 | * Possible values are: | |
| 105 | * LockType.NO_LOCK (aka read only) - changes to the object will not be written to database; | |
| 106 | * LockType.READ_LOCK (aka optimistic lock) - changes to the object will be written to the database, | |
| 107 | * in this case the lock will be automatically upgraded to the write lock on transaction commit; | |
| 108 | * LockType.WRITE_LOCK (aka pessimistic lock) - changes to the object will be written to the database. | |
| 109 | * | |
| 110 | * @return the object from the persistent store. | |
| 111 | * @throws LockingException thrown by the LockManager to avoid a deadlock. | |
| 112 | * | |
| 113 | */ | |
| 114 | public Object getObjectByIdentity(Identity oid, int lock) | |
| 115 | throws LockingException; | |
| 116 | ||
| 117 | /** | |
| 118 | * @param query The query to execute | |
| 119 | * @return an Iterator that iterates Objects of class c if calling the .next() | |
| 120 | * method. The returned objects are locked for read. | |
| 121 | */ | |
| 122 | public Iterator getIteratorByQuery(Query query); | |
| 123 | ||
| 124 | /** | |
| 125 | * @param query The query to execute | |
| 126 | * @param lock the lock that need to be acquired on the object | |
| 127 | * Possible values are: | |
| 128 | * LockType.NO_LOCK (aka read only) - changes to the object will not be written to database; | |
| 129 | * LockType.READ_LOCK (aka optimistic lock) - changes to the object will be written to the database, | |
| 130 | * in this case the lock will be automatically upgraded to the write lock on transaction commit; | |
| 131 | * LockType.WRITE_LOCK (aka pessimistic lock) - changes to the object will be written to the database. | |
| 132 | * @return an Iterator that iterates Objects of class c if calling the .next() | |
| 133 | * method. The returned objects are locked with the given lock value. | |
| 134 | */ | |
| 135 | public Iterator getIteratorByQuery(Query query, int lock); | |
| 136 | ||
| 137 | /** | |
| 138 | * @param query The OQL query to execute | |
| 139 | * @return an Iterator that iterates Objects of class c if calling the .next() | |
| 140 | * method. The returned objects are locked for read. | |
| 141 | */ | |
| 142 | public Iterator getIteratorByOQLQuery(OQLQuery query); | |
| 143 | ||
| 144 | /** | |
| 145 | * @param query The OQL query to execute | |
| 146 | * @param lock the lock that need to be acquired on the object | |
| 147 | * Possible values are: | |
| 148 | * LockType.NO_LOCK (aka read only) - changes to the object will not be written to database; | |
| 149 | * LockType.READ_LOCK (aka optimistic lock) - changes to the object will be written to the database, | |
| 150 | * in this case the lock will be automatically upgraded to the write lock on transaction commit; | |
| 151 | * LockType.WRITE_LOCK (aka pessimistic lock) - changes to the object will be written to the database. | |
| 152 | * @return an Iterator that iterates Objects of class c if calling the .next() | |
| 153 | * method. The returned objects are locked for read. | |
| 154 | */ | |
| 155 | public Iterator getIteratorByOQLQuery(OQLQuery query, int lock); | |
| 156 | ||
| 157 | /** | |
| 158 | * @param query The query to execute | |
| 159 | * @param lock the lock that need to be acquired on the object | |
| 160 | * Possible values are: | |
| 161 | * LockType.NO_LOCK (aka read only) - changes to the object will not be written to database; | |
| 162 | * LockType.READ_LOCK (aka optimistic lock) - changes to the object will be written to the database, | |
| 163 | * in this case the lock will be automatically upgraded to the write lock on transaction commit; | |
| 164 | * LockType.WRITE_LOCK (aka pessimistic lock) - changes to the object will be written to the database. | |
| 165 | * @return an Iterator that iterates Objects of class c if calling the .next() | |
| 166 | * method. The returned objects are locked with the given lock value. | |
| 167 | */ | |
| 168 | public Collection getCollectionByQuery(Query query, int lock); | |
| 169 | ||
| 170 | /** | |
| 171 | * @param query The query to execute | |
| 172 | * @return an Iterator that iterates Objects of class c if calling the .next() | |
| 173 | * method. The returned objects are locked for read. | |
| 174 | */ | |
| 175 | public Collection getCollectionByQuery(Query query); | |
| 176 | ||
| 177 | /** | |
| 178 | * Get the identity of the object | |
| 179 | * @param object The object | |
| 180 | * @return the identity of the object | |
| 181 | */ | |
| 182 | public Identity getIdentity(Object object); | |
| 183 | ||
| 184 | public ClassDescriptor getDescriptorFor(Class clazz); | |
| 185 | ||
| 186 | /** | |
| 187 | * | |
| 188 | * Get the EditingContext associated with the transaction to which this connection belongs. | |
| 189 | * EditingContext contains and manages the set of objects read/edited within the current | |
| 190 | * transaction. | |
| 191 | * | |
| 192 | * @return EditingContext associated with current Transaction | |
| 193 | * | |
| 194 | */ | |
| 195 | public EditingContext getEditingContext(); | |
| 196 | ||
| 197 | /** | |
| 198 | * In the case if the program need to change the objects | |
| 199 | * via direct JDBC call, it should first call invalidate() | |
| 200 | * for the object, which will lock the object for write | |
| 201 | * and tell OJB OTM that it must be re-read from the database, | |
| 202 | * only after that you shold perform JDBC operation. | |
| 203 | * NOTE: it is not recommended to use read-uncommitted isolation | |
| 204 | * if you want this feature to work correctly. | |
| 205 | */ | |
| 206 | public void invalidate(Identity oid) | |
| 207 | throws LockingException; | |
| 208 | ||
| 209 | /** | |
| 210 | * clear the underlying caches | |
| 211 | */ | |
| 212 | public void invalidateAll() | |
| 213 | throws LockingException; | |
| 214 | ||
| 215 | /** | |
| 216 | * returns a new OQL Query. This OQL query is Enhanced, meaning it does | |
| 217 | * the ODMG functionality as well as some additional OJB specific, non | |
| 218 | * portable functionality. | |
| 219 | * @return the new OQLQuery | |
| 220 | */ | |
| 221 | public EnhancedOQLQuery newOQLQuery(); | |
| 222 | ||
| 223 | /** | |
| 224 | * returns a new OQL Query. This OQL query is Enhanced, meaning it does | |
| 225 | * the ODMG functionality as well as some additional OJB specific, non | |
| 226 | * portable functionality. | |
| 227 | * @param lock the lock that need to be acquired on the object | |
| 228 | * Possible values are: | |
| 229 | * LockType.NO_LOCK (aka read only) - changes to the object will not be written to database; | |
| 230 | * LockType.READ_LOCK (aka optimistic lock) - changes to the object will be written to the database, | |
| 231 | * in this case the lock will be automatically upgraded to the write lock on transaction commit; | |
| 232 | * LockType.WRITE_LOCK (aka pessimistic lock) - changes to the object will be written to the database. | |
| 233 | * @return the new OQLQuery | |
| 234 | */ | |
| 235 | public EnhancedOQLQuery newOQLQuery(int lock); | |
| 236 | ||
| 237 | /** | |
| 238 | * return the number of objects that would be returned from this query | |
| 239 | * @param query | |
| 240 | * @return the number of objects that would be returned from this query | |
| 241 | */ | |
| 242 | int getCount(Query query); | |
| 243 | ||
| 244 | /** | |
| 245 | * Close the OTMConnection | |
| 246 | */ | |
| 247 | void close(); | |
| 248 | ||
| 249 | /** | |
| 250 | * check if the OTMConnection is closed | |
| 251 | */ | |
| 252 | ||
| 253 | boolean isClosed(); | |
| 254 | ||
| 255 | /** | |
| 256 | * get the global cache | |
| 257 | * @return | |
| 258 | */ | |
| 259 | ObjectCache serviceObjectCache(); | |
| 260 | ||
| 261 | /** | |
| 262 | * Updates the values in the object from the data in data store. | |
| 263 | * The state of the object becomes "Persistent-clean". | |
| 264 | */ | |
| 265 | void refresh(Object object); | |
| 266 | } |