Javax
Javax
sql
Provides the API for server side data source access and processing from the JavaTM programming
language.
Package javax.sql Description
Provides the API for server side data source access and processing from the JavaTM programming
language. This package supplements the java.sql package and, as of the version 1.4 release, is included
in the JavaTM 2 SDK, Standard Edition. It remains an essential part of the Java 2 SDK, Enterprise Edition
(J2EE).
Applications use the DataSource and RowSet APIs directly, but the connection pooling and distributed
transaction APIs are used internally by the middle-tier infrastructure.
These are the main advantages of using a DataSource object to make a connection:
Applications do not need to hard code a driver class.
Changes can be made to a data source's properties, which means that it is not necessary to
make changes in application code when something about the data source or driver changes.
Connection pooling and distributed transactions are available through a DataSource object that
is implemented to work with the middle-tier infrastructure. Connections made through the
DriverManager do not have connection pooling or distributed transaction capabilities.
A logical name for the data source is registered with a naming service that uses the Java Naming and
Directory InterfaceTM (JNDI) API, usually by a system administrator or someone performing the duties
of a system administrator. An application can retrieve the DataSource object it wants by doing a lookup
on the logical name that has been registered for it. The application can then use the DataSource object
to create a connection to the physical data source it represents.
A DataSource object can be implemented to work with the middle tier infrastructure so that the
connections it produces will be pooled for reuse. An application that uses such a DataSource
implementation will automatically get a connection that participates in connection pooling. A
DataSource object can also be implemented to work with the middle tier infrastructure so that the
connections it produces can be used for distributed transactions without any special coding.
Connection Pooling
Connections made via a DataSource object that is implemented to work with a middle tier connection
pool manager will participate in connection pooling. This can improve performance dramatically
because creating new connections is very expensive. Connection pooling allows a connection to be used
and reused, thus cutting down substantially on the number of new connections that need to be created.
Connection pooling is totally transparent. It is done automatically in the middle tier of a J2EE
configuration, so from an application's viewpoint, no change in code is required. An application simply
uses the DataSource.getConnection method to get the pooled connection and uses it the same way it
uses any Connection object.
The XAConnection interface is derived from the PooledConnection interface, so what applies to a pooled
connection also applies to a connection that is part of a distributed transaction. A transaction manager
in the middle tier handles everything transparently. The only change in application code is that an
application cannot do anything that would interfere with the transaction manager's handling of the
transaction. Specifically, an application cannot call the methods Connection.commit or
Connection.rollback, and it cannot set the connection to be in auto-commit mode (that is, it cannot call
Connection.setAutoCommit(true)).
An application does not need to do anything special to participate in a distributed transaction. It simply
creates connections to the data sources it wants to use via the DataSource.getConnection method, just
as it normally does. The transaction manager manages the transaction behind the scenes. The
XADataSource interface creates XAConnection objects, and each XAConnection object creates an
XAResource object that the transaction manager uses to manage the connection.
Implementations can vary widely, but generally a reader makes a connection to the data source, reads
data from the data source and populates the rowset with it, and closes the connection. A reader may
also update the RowSetMetaData object for its rowset. The rowset's internal state is also updated,
either by the reader or directly by the method RowSet.execute.
RowSetWriter
A disconnected RowSet object that has implemented the RowSetInternal interface can call on its writer
(the RowSetWriter object associated with it) to write changes back to the underlying data source.
Implementations may vary widely, but generally, a writer will do the following:
The RowSet interface may be implemented in any number of ways, and anyone may write an
implementation. Developers are encouraged to use their imaginations in coming up with new ways to
use rowsets.