ICE 3.4.2
[php5-ice-freebsdport.git] / java / src / Freeze / TransactionI.java
blob694e06370816df6ffe9df35184fe6e4e2aa6d467
1 // **********************************************************************
2 //
3 // Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
4 //
5 // This copy of Ice is licensed to you under the terms described in the
6 // ICE_LICENSE file included in this distribution.
7 //
8 // **********************************************************************
10 package Freeze;
12 class TransactionI implements Transaction
14 public void
15 commit()
17 if(_txn == null)
19 throw new DatabaseException(_errorPrefix + "inactive transaction");
22 String txnId = null;
23 boolean committed = false;
24 boolean deadlock = false;
26 try
28 _connection.closeAllIterators();
30 if(_txTrace >= 1)
32 txnId = Long.toHexString((_txn.getId() & 0x7FFFFFFF) + 0x80000000L);
35 _txn.commit();
36 committed = true;
38 if(_txTrace >= 1)
40 _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
41 "committed transaction " + txnId);
44 catch(com.sleepycat.db.DeadlockException e)
46 deadlock = true;
48 if(_txTrace >= 1)
50 _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
51 "failed to commit transaction " + txnId + ": " +
52 e.getMessage());
55 throw new DeadlockException(_errorPrefix + "DbTxn.commit: " + e.getMessage(), this, e);
57 catch(com.sleepycat.db.DatabaseException e)
59 if(_txTrace >= 1)
61 _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
62 "failed to commit transaction " + txnId + ": " +
63 e.getMessage());
66 throw new DatabaseException(_errorPrefix + "DbTxn.commit: " + e.getMessage(), e);
68 finally
70 _connection.clearTransaction();
71 SharedDbEnv dbEnv = _connection.dbEnv();
72 if(_ownConnection)
74 _connection.close();
76 _connection = null;
77 _txn = null;
78 postCompletion(committed, deadlock, dbEnv);
82 public void
83 rollback()
85 if(_txn == null)
87 throw new DatabaseException(_errorPrefix + "inactive transaction");
90 String txnId = null;
91 boolean deadlock = false;
93 try
95 _connection.closeAllIterators();
97 if(_txTrace >= 1)
99 txnId = Long.toHexString((_txn.getId() & 0x7FFFFFFF) + 0x80000000L);
102 _txn.abort();
104 if(_txTrace >= 1)
106 _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
107 "rolled back transaction " + txnId);
110 catch(com.sleepycat.db.DeadlockException e)
112 if(_txTrace >= 1)
114 _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
115 "failed to rollback transaction " + txnId + ": " +
116 e.getMessage());
119 deadlock = true;
121 throw new DeadlockException(_errorPrefix + "DbTxn.abort: " + e.getMessage(), this, e);
123 catch(com.sleepycat.db.DatabaseException e)
125 if(_txTrace >= 1)
127 _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
128 "failed to rollback transaction " + txnId + ": " +
129 e.getMessage());
132 throw new DatabaseException(_errorPrefix + "DbTxn.abort: " + e.getMessage(), e);
134 finally
136 _connection.clearTransaction();
137 SharedDbEnv dbEnv = _connection.dbEnv();
138 if(_ownConnection)
140 _connection.close();
142 _connection = null;
143 _txn = null;
144 postCompletion(false, deadlock, dbEnv);
148 public Connection
149 getConnection()
151 return _connection;
154 TransactionI(ConnectionI connection)
156 _connection = connection;
157 _txTrace = connection.txTrace();
158 _errorPrefix = "DbEnv(\"" + _connection.envName() + "\"): ";
162 _txn = _connection.dbEnv().getEnv().beginTransaction(null, null);
164 if(_txTrace >= 1)
166 String txnId = Long.toHexString((_txn.getId() & 0x7FFFFFFF) + 0x80000000L);
168 _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
169 "started transaction " + txnId);
172 catch(com.sleepycat.db.DatabaseException e)
174 if(_txTrace >= 1)
176 _connection.communicator().getLogger().trace("Freeze.Transaction", _errorPrefix +
177 "failed to start transaction: " + e.getMessage());
180 throw new DatabaseException(_errorPrefix + "txn_begin: " + e.getMessage(), e);
184 void
185 setPostCompletionCallback(PostCompletionCallback cb)
187 _postCompletionCallback = cb;
190 void
191 adoptConnection()
193 _ownConnection = true;
196 ConnectionI
197 getConnectionI()
199 return _connection;
202 com.sleepycat.db.Transaction
203 dbTxn()
205 return _txn;
208 private void
209 postCompletion(boolean committed, boolean deadlock, SharedDbEnv dbEnv)
211 if(_postCompletionCallback != null)
215 _postCompletionCallback.postCompletion(committed, deadlock, dbEnv);
217 finally
219 _postCompletionCallback = null;
224 private ConnectionI _connection;
225 private int _txTrace;
226 private com.sleepycat.db.Transaction _txn;
228 private PostCompletionCallback _postCompletionCallback;
230 private String _errorPrefix;
231 private boolean _ownConnection = false;