1 package org.apache.ojb.broker.util.sequence;
2
3 /* Copyright 2002-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 org.apache.ojb.broker.accesslayer.JdbcAccess;
19 import org.apache.ojb.broker.metadata.ClassDescriptor;
20 import org.apache.ojb.broker.metadata.FieldDescriptor;
21
22 /**
23 * SequenceManagers are responsible for creating new unique
24 * ID's - unique accross all "extent" object declarations in OJB metadata.
25 * There are some standard sequence manager implementations in
26 * this package.
27 * <p/>
28 * SequenceManager objects are obtained from a factory class called
29 * {@link SequenceManagerFactory}.
30 * This Factory can be configured to provide instances of user defined
31 * implementors of this interface.
32 * <p/>
33 * NOTE: SequenceManagers should be aware of "extents" ("extent" is an OJB inheritance feature),
34 * that is: if you ask for an uid for an Interface (more exact for one implementor class)
35 * with several implementor classes, or a baseclass with several subclasses the returned uid
36 * should be unique accross all tables representing objects of the extent in question.
37 *
38 * @version $Id: SequenceManager.java,v 1.1 2007-08-24 22:17:29 ewestfal Exp $
39 */
40 public interface SequenceManager
41 {
42 /**
43 * This method is called to get an unique value <strong>before</strong> the object
44 * is written to persistent storage.
45 * <br/>
46 * Returns a unique object for the given field attribute.
47 * The returned value takes in account the jdbc-type
48 * and the FieldConversion.sql2java() conversion defined for <code>field</code>.
49 * The returned object is unique accross all tables of "extent" classes the
50 * field belongs to.
51 * <br/>
52 * Implementations using native identity columns should return a unique
53 * incremented counter object for temporary use by OJB.
54 */
55 public Object getUniqueValue(FieldDescriptor field) throws SequenceManagerException;
56
57 /**
58 * This method is called <strong>after</strong> the object was written to the persistent storage.
59 * <br/>
60 * This is to support native Identity columns (auto_increment columns) on the db side.
61 * Other implementations may ignore this method.
62 * @param dbAccess Current used {@link org.apache.ojb.broker.accesslayer.JdbcAccess} instance
63 * @param cld Descriptor for specified object
64 * @param obj The object to associate with identity value
65 */
66 public void afterStore(JdbcAccess dbAccess, ClassDescriptor cld, Object obj) throws SequenceManagerException;
67 }