Hasta ahora la conexión a una base de datos se realizaba mediante un código JDBC que utilizaba un driver y obtenía una conexión. Una aplicación que utilice este código puede seguir haciéndolo dentro de WebLogic, es decir, si desplegamos esa aplicación en WebLogic la aplicación funcionará correctamente. En este tema vamos a configurar el servidor de aplicaciones para que nos permita trabajar con JDBC, aprovechando las características de pool de conexiones y fuentes de datos. También veremos cómo podemos conseguir una conexión controlada por el servidor. Un esquema general de cómo maneja WebLogic las bases de datos es el siguiente:
Tanto los clientes externos como los internos obtienen un objeto DataSource o TxDataSource mediante el árbol JNDI gestionado por el servidor. Una vez obtenido este objeto, se solicita una conexión a través de él, que a su vez la obtiene de un Connection Pool gestionado por el servidor.
El primer paso a seguir es la configuración de un pool de conexiones. Para ello seleccionar la opción JDBC del menú Services. Nos aparecerá una pantalla como la mostrada a continuación. Pinchando en el enlace podemos configurar un nuevo pool de conexiones.
En la siguiente pantalla definimos el pool de conexiones. Indicamos los siguientes datos:
Pasamos a la solapa de Connections. Repasamos el significado de cada valor:
La última opción a modificar (por el momento) está en la solapa de Targets. Con esta opción especificamos en cuál o cuáles de los servidores está activo este pool de conexiones. Podemos asociarlo a uno o varios servidores o bien a todo un cluster. Para ello pinchamos en la solapa correspondiente (Servers o Cluster) y pasamos la elección a Chosen. En nuestro caso sólo tenemos un servidor, por lo que lo seleccionamos, lo pasamos al cuadro de Chosen y pulsamos en Apply. Si se ha producido un error (no se encuentra la clase del driver, la base de datos no está disponible, etc.) se mostrará un error en la línea de comandos por la que hemos arrancado el servidor. Una cuestión muy importante a tener en cuenta es que si un pool lo asociamos a un cluster, el número de conexiones se multiplica por el número de servidores que forman el cluster.
Si pulsamos de nuevo en Services -> JDBC aparecerá la siguiente información, indicando que el pool de conexiones está activo. Desde esta ventana podemos crear una copia del pool o eliminar el pool, pulsando los iconos de la derecha.
Dentro de WebLogic también podemos definir un Multipool. Un Multipool permite agrupar varios pool de conexiones para proporcionar alta disponibilidad (debido a posibles errores o fallos de las bases de datos) y balanceo de carga (para sistemas con una carga excesiva). Pinchamos en el icono Multipools y nos aparecerá la siguiente figura que nos permite configurar un nuevo Multipool.
En la siguiente pantalla damos el nombre al multipool y seleccionamos el tipo de algoritmo a aplicar: High-Availability (alta disponibilidad) o Load-Balancing (balanceo de carga).
Por último tenemos que elegir los pools (ya creados, en este caso no tenemos ninguno) que formarán parte de este multipool. No tenemos que olvidarnos de seleccionar el servidor o cluster al cual asignaremos el multipool.
Pasamos ahora a definir una fuente de datos. Pinchamos en Services -> DataSources. Pinchamos en configurar una nueva fuente de datos.
Damos nombre a esta nueva fuente de datos. Los siguientes datos son los siguientes:
Pinchamos el botón Apply para crear la fuente de datos.
En el caso de las fuentes de datos transaccionales (Tx Data Source), la única diferencia con las fuentes de datos normales es un parámetro: Emulate Two-Phase Commit ... Si marcamos esta opción permitirá emular el método Two-Phase commit con drivers que no permitan transacciones distribuidas. Se recomienda que se utilice este tipo de fuentes de datos cuando se cumpla algunos de los siguientes criterios:
Al igual que con el pool de conexiones, debemos indicar el servidor al que está asociado esta fuente de datos. Pinchamos en Apply para confirmar los datos. Si se produjo algún error aparecerá en la línea de comandos del servidor. Lo mismo que con el pool de conexiones, si asociamos una fuente de datos a un cluster, el número de conexiones se multiplica por el número de servidores que forman el cluster.
Podemos consultar, copiar o eliminar la fuente de datos creada pinchando de nuevo en Services -> DataSources.
Una vez realizados todos estos pasos debemos parar el servidor y ponerlo en funcionamiento de nuevo para que surtan efecto los cambios.
Para hacer uso de una fuente de datos definida por el servidor de aplicaciones debemos obtener una conexión haciendo uso de un objeto DataSource. Este objeto se obtendrá haciendo uso de JNDI. Dentro de un programa JDBC los pasos a seguir para obtener una conexión son los siguientes:
import javax.sql.DataSource; import javax.naming.*; import java.util.Hashtable;
Context miContexto = null; Hashtable ht = new Hashtable (); ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); ht.put(Context.PROVIDER_URL, "t3://localhost:7001"); miContexto = new InitialContext (ht);
DataSource ds = (DataSource) miContexto.lookup ("MySQLDataSource");
Connection con = ds.getConnection ();
Para poder ejecutar debemos tener en el CLASSPATH el siguiente fichero:
$HOME_BEA/weblogic700/server/lib/weblogic.jar
donde $HOME_BEA es el directorio donde está instalado Bea. También, por supuesto, debe estar funcionando el servidor de aplicaciones y el de la base de datos.