Conexión con una fuente de datos mediante la interfaz DataSource

Si es necesario que sus aplicaciones se puedan migrar de una fuente de datos a otra, debe utilizar la interfaz DataSource.

Acerca de esta tarea

El uso de DriverManager para conectar con una fuente de datos reduce la portabilidad, pues la aplicación debe identificar un nombre de clase y URL determinados para el controlador JDBC. El nombre de clase y el URL del controlador son específicos de un proveedor de JDBC, de la implementación del controlador y de la fuente de datos.

Cuando se conecta a una fuente de datos utilizando la interfaz DataSource, utiliza un objeto DataSource.

La forma más sencilla de utilizar un objeto DataSource es crear y utilizar el objeto en la misma aplicación, tal como hace en la interfaz DriverManager. Sin embargo, este método no proporciona portabilidad.

La mejor manera de utilizar un objeto de configuración ( DataSource ) es que el administrador del sistema lo cree y lo gestione por separado, utilizando WebSphere® Application Server u otra herramienta. El programa que crea y gestiona un objeto DataSource también utiliza Java Naming and Directory Interface (JNDI) para asignar un nombre lógico al objeto DataSource . La aplicación JDBC que hace uso del objeto DataSource puede luego referirse al objeto utilizando su nombre lógico, y no necesita ninguna información sobre la fuente de datos subyacente. Además, el administrador del sistema puede modificar los atributos de la fuente de datos y el usuario no necesita cambiar su programa de aplicación.

Para obtener más información sobre el uso de WebSphere para implementar objetos de DataSource, vaya a esta URL en la web:
http://www.ibm.com/software/webservers/appserv/

Para conocer cómo desplegar objetos DataSource por sí mismo, consulte "Creación y despliegue de objetos DataSource".

Puede utilizar la interfaz DataSource y la interfaz DriverManager en la misma aplicación, pero para lograr una portabilidad máxima es recomendable que utilice solo la interfaz DataSource para obtener conexiones.

Procedimiento

Para obtener una conexión utilizando un objeto DataSource que creó el administrador del sistema y al que éste asignó un nombre lógico, siga estos pasos:

  1. Consulte al administrador del sistema para obtener el nombre lógico de la fuente de datos con la que necesita conectar.
  2. Cree un objeto de tipo " Context " para utilizarlo en el siguiente paso. La interfaz JNDI (Java Naming and Directory Interface) forma parte de la interfaz JNDI ( Context ), no de la interfaz JNDI ( JDBC ).
  3. En su programa de aplicación, utilice JNDI para obtener el objeto DataSource que está asociado con el nombre de origen de datos lógico.
  4. Utilice el método DataSource.getConnection para obtener la conexión.
    Puede utilizar uno de los formatos siguientes del método getConnection:
    getConnection();
    getConnection(String user, String password);
    
    Utilice la segunda forma si necesita especificar un ID de usuario y una contraseña para la conexión que sean diferentes de los que se especificaron al desplegar el objeto DataSource.

ejemplos

Ejemplo de obtención de una conexión utilizando un objeto DataSource que fue creado por el administrador del sistema: en este ejemplo, el nombre lógico de la fuente de datos con la que desea conectar es jdbc/sampledb. Los números que aparecen a la derecha de algunas sentencias corresponden a los pasos descritos anteriormente.

Figura 1. Obtención de una conexión utilizando un objeto DataSource
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
…
Context ctx=new InitialContext();                       2 
DataSource ds=(DataSource)ctx.lookup("jdbc/sampledb");  3 
Connection con=ds.getConnection();                      4 
Ejemplo de creación y utilización de un objeto DataSource en la misma aplicación:
Figura 2. Creación y utilización de un objeto DataSource en la misma aplicación
import java.sql.*;        // JDBC base
import javax.sql.*;       // Additional methods for JDBC
import com.ibm.db2.jcc.*; // IBM Data Server Driver for JDBC and SQLJ   1 
                          // interfaces
DB2SimpleDataSource dbds=new DB2SimpleDataSource();             2 
dbds.setDatabaseName("dbloc1");                                 3 
                          // Assign the location name
dbds.setDescription("Our Sample Database");
                          // Description for documentation
dbds.setUser("john");
                          // Assign the user ID
dbds.setPassword("dbadm");
                          // Assign the password
Connection con=dbds.getConnection();                            4 
                          // Create a Connection object
Nota Descripción
1 Importa el paquete donde reside la implementación de la interfaz DataSource.
2 Crea un objeto DB2SimpleDataSource. DB2SimpleDataSource es una de las IBM® Data Server Driver for JDBC and SQLJ implementaciones de la interfaz DataSource . Consulte «Creación e implementación de objetos de DataSource » para obtener información sobre las implementaciones de DataSource de Db2.
3 Los métodos setDatabaseName, setDescription, setUser y setPassword asignan atributos al objeto DB2SimpleDataSource. Consulte "Propiedades para el objeto IBM Data Server Driver for JDBC and SQLJ " para obtener información sobre los atributos que puede establecer para un objeto DB2SimpleDataSource en IBM Data Server Driver for JDBC and SQLJ.
4 Establece una conexión con la fuente de datos representada por el objeto DB2SimpleDataSource.