Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
runtime-core: Add transaction isolation level and refine API names
- Loading branch information
Showing
10 changed files
with
277 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
87 changes: 87 additions & 0 deletions
87
...untime-core/src/main/java/com/speedment/runtime/core/component/transaction/Isolation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
package com.speedment.runtime.core.component.transaction; | ||
|
||
import java.sql.Connection; | ||
|
||
/** | ||
* | ||
* @author Per Minborg | ||
*/ | ||
public enum Isolation { | ||
|
||
// /** | ||
// * An enum indicating that transactions are not supported. | ||
// */ | ||
// NONE(Connection.TRANSACTION_NONE), | ||
/** | ||
* An Enum indicating that the default level of isolation for the | ||
* transaction domain shall be used. | ||
*/ | ||
DEFAULT(-1), | ||
/** | ||
* An Enum indicating that dirty reads, non-repeatable reads and phantom | ||
* reads can occur. This level allows a row changed by one transaction to be | ||
* read by another transaction before any changes in that row have been | ||
* committed (a "dirty read"). If any of the changes are rolled back, the | ||
* second transaction will have retrieved an invalid row. | ||
*/ | ||
READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED), | ||
/** | ||
* An Enum indicating that dirty reads are prevented; non-repeatable reads | ||
* and phantom reads can occur. This level only prohibits a transaction from | ||
* reading a row with uncommitted changes in it. | ||
*/ | ||
READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED), | ||
/** | ||
* An Enum indicating that dirty reads and non-repeatable reads are | ||
* prevented; phantom reads can occur. This level prohibits a transaction | ||
* from reading a row with uncommitted changes in it, and it also prohibits | ||
* the situation where one transaction reads a row, a second transaction | ||
* alters the row, and the first transaction rereads the row, getting | ||
* different values the second time (a "non-repeatable read"). | ||
*/ | ||
REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ), | ||
/** | ||
* An Enum indicating that dirty reads, non-repeatable reads and phantom | ||
* reads are prevented. This level includes the prohibitions in | ||
* <code>TRANSACTION_REPEATABLE_READ</code> and further prohibits the | ||
* situation where one transaction reads all rows that satisfy a | ||
* <code>WHERE</code> condition, a second transaction inserts a row that | ||
* satisfies that <code>WHERE</code> condition, and the first transaction | ||
* rereads for the same condition, retrieving the additional "phantom" row | ||
* in the second read. | ||
*/ | ||
SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE); | ||
|
||
private final int sqlIsolationLevel; | ||
|
||
private Isolation(int sqlIsolationlevel) { | ||
this.sqlIsolationLevel = sqlIsolationlevel; | ||
} | ||
|
||
public int getSqlIsolationLevel() { | ||
if (DEFAULT == this) { | ||
throw new IllegalArgumentException("The DEFAULT isolation level does not have a hard coded value."); | ||
} | ||
return sqlIsolationLevel; | ||
} | ||
|
||
public static Isolation fromSqlIsolationLevel(int level) { | ||
switch (level) { | ||
case Connection.TRANSACTION_READ_UNCOMMITTED: { | ||
return READ_UNCOMMITTED; | ||
} | ||
case Connection.TRANSACTION_READ_COMMITTED: { | ||
return READ_COMMITTED; | ||
} | ||
case Connection.TRANSACTION_REPEATABLE_READ: { | ||
return REPEATABLE_READ; | ||
} | ||
case Connection.TRANSACTION_SERIALIZABLE: { | ||
return SERIALIZABLE; | ||
} | ||
default: | ||
throw new IllegalArgumentException("No Isolation exists for " + level); | ||
} | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.