View Javadoc

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  }