Overview

From the Java Standard Edition 5.0 API Documentation:

A DataSource object is the representation of a data source in the Java programming language. In basic terms, a data source is a facility for storing data. It can be as sophisticated as a complex database for a large corporation or as simple as a file with rows and columns. A data source can reside on a remote server, or it can be on a local desktop machine. Applications access a data source using a connection, and a DataSource object can be thought of as a factory for connections to the particular data source that the DataSource instance represents. The DataSource interface provides two methods for establishing a connection with a data source.

Using a DataSource object is the preferred alternative to using the DriverManager for establishing a connection to a data source. They are similar to the extent that the DriverManager class and DataSource interface both have methods for creating a connection, methods for getting and setting a timeout limit for making a connection, and methods for getting and setting a stream for logging.

Their differences are more significant than their similarities, however. Unlike the DriverManager, a DataSource object has properties that identify and describe the data source it represents. Also, a DataSource object works with a Java Naming and Directory Interface (JNDI) naming service and is created, deployed, and managed separately from the applications that use it. A driver vendor will provide a class that is a basic implementation of the DataSource interface as part of its JDBC 2.0 or 3.0 driver product. What a system administrator does to register a DataSource object with a JNDI naming service and what an application does to get a connection to a data source using a DataSource object registered with a JNDI naming service are described later in this chapter.

Being registered with a JNDI naming service gives a DataSource object two major advantages over the DriverManager. First, an application does not need to hardcode driver information, as it does with the DriverManager. A programmer can choose a logical name for the data source and register the logical name with a JNDI naming service. The application uses the logical name, and the JNDI naming service will supply the DataSource object associated with the logical name. The DataSource object can then be used to create a connection to the data source it represents.

The second major advantage is that the DataSource facility allows developers to implement a DataSource class to take advantage of features like connection pooling and distributed transactions. Connection pooling can increase performance dramatically by reusing connections rather than creating a new physical connection each time a connection is requested. The ability to use distributed transactions enables an application to do the heavy duty database work of large enterprises.

Although an application may use either the DriverManager or a DataSource object to get a connection, using a DataSource object offers significant advantages and is the recommended way to establish a connection.

DataSources in JBoss

The most common method of configuring DataSources in JBoss is by creating an XML file which ends with -ds.xml. These files are scanned at deployment time, and used to initialize the DataSource object, and bind it to JNDI.

JBoss supports a number of DataSource types, including: no-tx-datasource (no transactions), local-tx-datasource (single phase commit transactions), and xa-datasource (two phase commit transactions).

Example Configuration

The example below binds a DataSource named HSQLDB to example/jdbc. While this configuration is intended for use with HSQLDB, it serves as a basic example for any local-tx-datasource. To use with a different RDBMS, simply change the appropriate configuration element below. type-mapping values may be found by examining conf/standardjbosscmp-jdbc.xml.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE datasources PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">

<datasources>
    <local-tx-datasource>
        <jndi-name>example/jdbc/HSQLDB</jndi-name>
        <use-java-context>false</use-java-context>

        <connection-url>jdbc:hsqldb:.</connection-url>
        <driver-class>org.hsqldb.jdbcDriver</driver-class>

        <user-name>sa</user-name>
        <password></password>

        <min-pool-size>5</min-pool-size>
        <max-pool-size>10</max-pool-size>

        <metadata>
            <type-mapping>Hypersonic SQL</type-mapping>
        </metadata>
    </local-tx-datasource>
</datasources>

Download

See Also

JBossSupport/DataSource (last edited 2008-06-06 21:25:32 by StevenStallion)