For general information about transactions, see Chapter 15, Using the Transaction Service and Chapter 21, Administering Transactions, in Oracle GlassFish Server 3.0.1 Administration Guide. For information about last agent optimization, which can improve performance, see Transaction Scope.
Not all database vendors support all transaction isolation levels available in the JDBC API. The GlassFish Server permits specifying any isolation level your database supports. The following table defines transaction isolation levels.
Table 14–1 Transaction Isolation Levels
Transaction Isolation Level |
Description |
---|---|
read-uncommitted |
Dirty reads, non-repeatable reads, and phantom reads can occur. |
read-committed |
Dirty reads are prevented; non-repeatable reads and phantom reads can occur. |
repeatable-read |
Dirty reads and non-repeatable reads are prevented; phantom reads can occur. |
serializable |
Dirty reads, non-repeatable reads and phantom reads are prevented. |
You can specify the transaction isolation level in the following ways:
Select the value from the Transaction Isolation drop-down list on the New JDBC Connection Pool or Edit Connection Pool page in the Administration Console. For more information, click the Help button in the Administration Console.
Specify the ----isolationlevel option in the asadmin create-jdbc-connection-pool command. For more information, see the Oracle GlassFish Server 3.0.1 Reference Manual.
Specify the transaction-isolation-level option in the asadmin set command. For example:
asadmin set domain1.resources.jdbc-connection-pool.DerbyPool.transaction-isolation-level=serializable |
For more information, see the Oracle GlassFish Server 3.0.1 Reference Manual.
Note that you cannot call setTransactionIsolation during a transaction.
You can set the default transaction isolation level for a JDBC connection pool. For details, see Creating a JDBC Connection Pool.
To verify that a level is supported by your database management system, test your database programmatically using the supportsTransactionIsolationLevel method in java.sql.DatabaseMetaData, as shown in the following example:
InitialContext ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("jdbc/MyBase"); Connection con = ds.getConnection(); DatabaseMetaData dbmd = con.getMetaData(); if (dbmd.supportsTransactionIsolationLevel(TRANSACTION_SERIALIZABLE) { Connection.setTransactionIsolation(TRANSACTION_SERIALIZABLE); }
For more information about these isolation levels and what they mean, see the JDBC API specification.
Applications that change the isolation level on a pooled connection programmatically risk polluting the pool, which can lead to errors.