View Javadoc
1 /* ====================================================================
2 * License:
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. The end-user documentation included with the redistribution,
17 * if any, must include the following acknowledgment:
18 * "This product includes software developed by
19 * Robert Half International (http://www.rhi.com/)."
20 * Alternately, this acknowledgment may appear in the software itself,
21 * if and wherever such third-party acknowledgments normally appear.
22 *
23 * 4. The names "Parc", "RHI", and "Robert Half International" must
24 * not be used to endorse or promote products derived from this
25 * software without prior written permission. For written
26 * permission, please contact pete.mckinstry@rhi.com.
27 *
28 * 5. Products derived from this software may not be called "PARC",
29 * nor may "PARC" appear in their name, without prior written
30 * permission of Robert Half International.
31 *
32 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
33 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
34 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
36 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
38 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
39 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
41 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
42 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43 * SUCH DAMAGE.
44 * ====================================================================
45 *
46 */
47 package com.rhi.architecture.xa;
48
49 import com.rhi.architecture.config.ConfigFacility;
50 import com.rhi.architecture.config.ConfigurationException;
51 import com.rhi.architecture.resource.ResourceContext;
52
53 import java.util.Properties;
54
55 import org.exolab.castor.jdo.Database;
56 import org.exolab.castor.jdo.JDO;
57 import org.exolab.castor.jdo.PersistenceException;
58
59 /***
60 * Interface for managing JDO database transactions. This is not
61 * intended to be a distributed transaction class.
62 *
63 * @author Pete McKinstry
64 * @copyright 2002, Robert Half Int'l., Inc. All rights reserved.
65 *
66 * @since 1.0
67 */
68 public class JDOTransactionImpl implements JDOTransaction {
69
70 private Database db = null;
71
72 /***
73 * default constructor
74 *
75 * @since 1.0
76 */
77 public JDOTransactionImpl() {
78 // no op
79 }
80
81 /***
82 * Get the connection associated w/ this DatabaseTransaction
83 *
84 * @return Database
85 *
86 * @since 1.0
87 */
88 public Database getDatabase() {
89 return this.db;
90 }
91
92 /***
93 * Start a new transaction.
94 *
95 * @throws TransactionException
96 * @since 1.0
97 */
98 public void begin() throws TransactionException {
99 try {
100 ResourceContext ctx = new ResourceContext();
101 ConfigFacility conf =
102 (ConfigFacility) ctx.lookup(ConfigFacility.KEY);
103 if (conf == null) {
104 throw new ConfigurationException("unable to load configfacility.");
105 }
106 Properties p = conf.getProperties();
107
108 // configure castor
109 JDO jdo = new JDO();
110 jdo.setConfiguration(p.getProperty("jdo_db_config_file"));
111 jdo.setDatabaseName(p.getProperty("jdo_db_name"));
112 this.db = jdo.getDatabase();
113 this.db.begin();
114 }
115 catch (PersistenceException e) {
116 throw new TransactionException(
117 "Unable to start " + "new transaction. e = " + e);
118 }
119 catch (ConfigurationException e) {
120 throw new TransactionException(
121 "Unable to start " + "new transaction. e = " + e);
122 }
123 }
124
125 /***
126 * Commit the transaction represented by this object.
127 *
128 * @throws TransactionException
129 * @since 1.0
130 */
131 public void commit() throws TransactionException {
132 try {
133 db.commit();
134 db.close();
135 }
136 catch (PersistenceException e) {
137 throw new TransactionException(e.toString());
138 }
139 }
140
141 /***
142 * Rollback the transaction represented by this object.
143 *
144 * @throws TransactionException
145 * @since 1.0
146 */
147 public void rollback() throws TransactionException {
148 try {
149 db.rollback();
150 db.close();
151 }
152 catch (PersistenceException e) {
153 throw new TransactionException(e.toString());
154 }
155 }
156
157 }
This page was automatically generated by Maven