001: // Copyright (c) 2003-2007, Jodd Team (jodd.sf.net). All Rights Reserved.
002:
003: package jodd.db;
004:
005: import jodd.util.ObjectUtil;
006: import jodd.util.HashCodeUtil;
007: import jodd.jtx.JtxTransactionMode;
008:
009: import java.sql.Connection;
010:
011: /**
012: * Native SQL transaction mode for {@link DbSession} transactions.
013: */
014: public class DbTransactionMode {
015:
016: public DbTransactionMode() {
017: this .isolation = ISOLATION_DEFAULT;
018: this .readOnlyMode = READ_ONLY;
019: }
020:
021: /**
022: * Created db transaction mode from general {@link jodd.jtx.JtxTransactionMode}.
023: */
024: public DbTransactionMode(JtxTransactionMode txMode) {
025: switch (txMode.getIsolation()) {
026: case JtxTransactionMode.ISOLATION_DEFAULT:
027: isolation = ISOLATION_DEFAULT;
028: break;
029: case JtxTransactionMode.ISOLATION_NONE:
030: isolation = ISOLATION_NONE;
031: break;
032: case JtxTransactionMode.ISOLATION_READ_COMMITTED:
033: isolation = ISOLATION_READ_COMMITTED;
034: break;
035: case JtxTransactionMode.ISOLATION_READ_UNCOMMITTED:
036: isolation = ISOLATION_READ_UNCOMMITTED;
037: break;
038: case JtxTransactionMode.ISOLATION_REPEATABLE_READ:
039: isolation = ISOLATION_REPEATABLE_READ;
040: break;
041: case JtxTransactionMode.ISOLATION_SERIALIZABLE:
042: isolation = ISOLATION_SERIALIZABLE;
043: break;
044: default:
045: throw new DbSqlException(
046: "Unknown transaction isolation mode '"
047: + txMode.getIsolation() + "'.");
048: }
049:
050: readOnlyMode = txMode.isReadOnly();
051: }
052:
053: // ---------------------------------------------------------------- isolation
054:
055: /**
056: * Default isolation.
057: */
058: public static final int ISOLATION_DEFAULT = -1;
059: /**
060: * @see Connection#TRANSACTION_NONE
061: */
062: public static final int ISOLATION_NONE = Connection.TRANSACTION_NONE;
063: /**
064: * @see Connection#TRANSACTION_READ_UNCOMMITTED
065: */
066: public static final int ISOLATION_READ_UNCOMMITTED = Connection.TRANSACTION_READ_UNCOMMITTED;
067: /**
068: * @see Connection#TRANSACTION_READ_COMMITTED
069: */
070: public static final int ISOLATION_READ_COMMITTED = Connection.TRANSACTION_READ_COMMITTED;
071: /**
072: * @see Connection#TRANSACTION_REPEATABLE_READ
073: */
074: public static final int ISOLATION_REPEATABLE_READ = Connection.TRANSACTION_REPEATABLE_READ;
075: /**
076: * @see Connection#TRANSACTION_SERIALIZABLE
077: */
078: public static final int ISOLATION_SERIALIZABLE = Connection.TRANSACTION_SERIALIZABLE;
079:
080: private int isolation;
081:
082: public int getIsolation() {
083: return isolation;
084: }
085:
086: public DbTransactionMode setIsolation(int isolation) {
087: this .isolation = isolation;
088: return this ;
089: }
090:
091: public DbTransactionMode isolationNone() {
092: this .isolation = ISOLATION_NONE;
093: return this ;
094: }
095:
096: public DbTransactionMode isolationReadUncommitted() {
097: this .isolation = ISOLATION_READ_UNCOMMITTED;
098: return this ;
099: }
100:
101: public DbTransactionMode isolationReadCommited() {
102: this .isolation = ISOLATION_READ_COMMITTED;
103: return this ;
104: }
105:
106: public DbTransactionMode isolationRepeatableRead() {
107: this .isolation = ISOLATION_REPEATABLE_READ;
108: return this ;
109: }
110:
111: public DbTransactionMode isolationSerializable() {
112: this .isolation = ISOLATION_SERIALIZABLE;
113: return this ;
114: }
115:
116: // ---------------------------------------------------------------- read-only
117:
118: public static final boolean READ_ONLY = true;
119: public static final boolean READ_WRITE = false;
120:
121: private boolean readOnlyMode = READ_ONLY;
122:
123: public boolean isReadOnly() {
124: return readOnlyMode;
125: }
126:
127: public DbTransactionMode setReadOnly(boolean readOnly) {
128: this .readOnlyMode = readOnly;
129: return this ;
130: }
131:
132: // ---------------------------------------------------------------- equals & hashCode
133:
134: @Override
135: public boolean equals(Object object) {
136: if (this == object) {
137: return true;
138: }
139: if (ObjectUtil.equalsType(object, this ) == false) {
140: return false;
141: }
142: final DbTransactionMode mode = (DbTransactionMode) object;
143:
144: return (mode.getIsolation() == this .isolation)
145: && (mode.isReadOnly() == this .readOnlyMode);
146: }
147:
148: @Override
149: public int hashCode() {
150: int result = HashCodeUtil.SEED;
151: result = HashCodeUtil.hash(result, this.readOnlyMode);
152: result = HashCodeUtil.hash(result, this.isolation);
153: return result;
154: }
155:
156: }
|