Sun Java System Application Server Platform Edition 8.1 2005Q2 Update 2 Developer's Guide

- Previous: Obtaining a Physical Connection from a Wrapped Connection
- Next: Using JDBC Transaction Isolation Levels

## Using Non-Transactional Connections

The `DataSource` implementation in the Application Server provides a `getNonTxConnection` method, which retrieves a JDBC connection that is not in the scope of any transaction. There are two variants, as follows:

    public java.sql.Connection getNonTxConnection() throws java.sql.SQLException

    public java.sql.Connection getNonTxConnection(String user, String password)
    throws java.sql.SQLException

Another way to get a non-transactional connection is to create a resource with the JNDI name ending in `__nontx`. This forces all connections looked up using this resource to be non transactional.

Typically, a connection is enlisted in the context of the transaction in which a `getConnection` call is invoked. However, a non-transactional connection is not enlisted in a transaction context even if a transaction is in progress.

The main advantage of using non-transactional connections is that the overhead incurred in enlisting and delisting connections in transaction contexts is avoided. However, use such connections carefully. For example, if a non-transactional connection is used to query the database while a transaction is in progress that modifies the database, the query retrieves the unmodified data in the database. This is because the in-progress transaction hasn’t committed. For another example, if a non-transactional connection modifies the database and a transaction that is running simultaneously rolls back, the changes made by the non-transactional connection are not rolled back.

Here is a typical use case for a non-transactional connection: a component that is updating a database in a transaction context spanning over several iterations of a loop can refresh cached data by using a non-transactional connection to read data before the transaction commits.

- Previous: Obtaining a Physical Connection from a Wrapped Connection
- Next: Using JDBC Transaction Isolation Levels

- © 2010, Oracle Corporation and/or its affiliates