KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jresearch > gossip > dao > drivers > keygen > SequenceKeyGenerator


1 /*
2  * $Id: SequenceKeyGenerator.java,v 1.3 2005/06/07 12:32:31 bel70 Exp $
3  *
4  * ***** BEGIN LICENSE BLOCK *****
5  * The contents of this file are subject to the Mozilla Public License
6  * Version 1.1 (the "License"); you may not use this file except in
7  * compliance with the License. You may obtain a copy of the License
8  * at http://www.mozilla.org/MPL/
9  *
10  * Software distributed under the License is distributed on an "AS IS"
11  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
12  * the License for the specific language governing rights and
13  * limitations under the License.
14  *
15  * The Original Code is JGossip forum code.
16  *
17  * The Initial Developer of the Original Code is the JResearch, Org.
18  * Portions created by the Initial Developer are Copyright (C) 2004
19  * the Initial Developer. All Rights Reserved.
20  *
21  * Contributor(s):
22  * Alexey Pavlov <alexnet@users.sourceforge.net>
23  *
24  * ***** END LICENSE BLOCK ***** */

25 package org.jresearch.gossip.dao.drivers.keygen;
26
27 import java.sql.Connection JavaDoc;
28 import java.sql.ResultSet JavaDoc;
29 import java.sql.SQLException JavaDoc;
30 import java.sql.Statement JavaDoc;
31 import java.util.HashMap JavaDoc;
32 import java.util.Map JavaDoc;
33
34 /**
35  * Obtains a key from a sequence table.
36  *
37  * @author <a HREF="alexnet@sourceforge.net">A. Pavlov</a>
38  * @version $version$ $Date: 2005/06/07 12:32:31 $
39  */

40 public class SequenceKeyGenerator implements KeyGenerator {
41     static Map JavaDoc sequenceDefs = new HashMap JavaDoc();
42
43     static {
44         SequenceKeyGenerator.sequenceDefs.put(
45                 IKeyGenConst.KEY_NAMES[IKeyGenConst.KEY_MESSAGE][0],
46                 "SELECT JRF_KEY_MESSAGE_SEQ.NEXTVAL FROM DUAL");
47         SequenceKeyGenerator.sequenceDefs.put(
48                 IKeyGenConst.KEY_NAMES[IKeyGenConst.KEY_THREAD][0],
49                 "SELECT JRF_KEY_THREAD_SEQ.NEXTVAL FROM DUAL)");
50         SequenceKeyGenerator.sequenceDefs.put(
51                 IKeyGenConst.KEY_NAMES[IKeyGenConst.KEY_USER][0],
52                 "SELECT JRF_KEY_USER_SEQ.NEXTVAL FROM DUAL");
53         SequenceKeyGenerator.sequenceDefs.put(
54                 IKeyGenConst.KEY_NAMES[IKeyGenConst.KEY_WHOIS][0],
55                 "SELECT JRF_KEY_WHOIS_SEQ.NEXTVAL FROM DUAL");
56         SequenceKeyGenerator.sequenceDefs.put(
57                 IKeyGenConst.KEY_NAMES[IKeyGenConst.KEY_FORUM][0],
58                 "SELECT JRF_KEY_FORUM_SEQ.NEXTVAL FROM DUAL");
59         SequenceKeyGenerator.sequenceDefs.put(
60                 IKeyGenConst.KEY_NAMES[IKeyGenConst.KEY_GROUP][0],
61                 "SELECT JRF_KEY_GROUP_SEQ.NEXTVAL FROM DUAL");
62     }
63
64     public boolean isBeforeInsert() {
65         return true;
66     }
67
68     /**
69      * Obtains a key from a sequence table.
70      *
71      * @param classMap
72      * provides mapping of class to sql persistence
73      * @param db
74      * the database for persisting the class described in the
75      * 'ClassMap'
76      * @return the key
77      * @exception PersistenceException
78      * if an error occurs
79      */

80     public Object JavaDoc generateKey(String JavaDoc[] primaryKeyName, Connection JavaDoc conn)
81             throws SQLException JavaDoc {
82         Object JavaDoc identity;
83         ResultSet JavaDoc rs = null;
84         ;
85         Statement JavaDoc stmt = null;
86         final String JavaDoc tableName = primaryKeyName[0];
87
88         try {
89             // Create SQL statements of the form "SELECT
90
// nextval(JRF_KEY_SEQUENCE)"
91
String JavaDoc sql = (String JavaDoc) SequenceKeyGenerator.sequenceDefs
92                     .get(tableName);
93             stmt = conn.createStatement();
94             rs = stmt.executeQuery(sql);
95             if (rs.next()) {
96                 identity = rs.getObject(1);
97             } else
98                 throw new SQLException JavaDoc("persist.sequenceKeyGenFailed");
99         } finally {
100             try {
101                 if (rs != null)
102                     rs.close();
103                 stmt.close();
104             } catch (SQLException JavaDoc excep) {
105
106             } finally {
107                 rs = null;
108                 stmt = null;
109             }
110         }
111         return identity;
112     }
113
114 }
115
Popular Tags