Configurar DataSources en WebSphere

1
39164

 

En Autentia trabajamos constantemente en el desarrollo de aplicaciones web para nuestros clientes. En esta línea, resulta fundamental el manejo y dominio de los distintos servidores para aplicaciones web disponibles que ofrecen mayor fiabilidad. Hoy os queremos mostrar cómo

configurar un DataSource de SQLServer en WebSphere.

Índice
de contenidos

1. Crear el
datasource 1

1.1.
Crear el usuario J2C 1

1.2.
Crear el proveedor de JDBC 5

1.3.
Creación del datasource 9

2. Conectarse desde
java al datasource de SQL Server 19

1.
Crear el datasource

En
primer lugar hemos de abrir la consola de administración de
WebSphere Express (http://<DIRECCION_SERVIDOR_WEBSPHERE>:7090/admin).

1.1.
Crear el usuario J2C

Para
comenzar hay que crear un usuario J2C en la consola de administración
de WebSphere.

Un
usuario J2C (Java 2 Connector) es un usuario que tiene permisos para
hacer referencia a entradas de datos de autenticación de
adaptadores de recursos, orígenes de datos (datasources) y
otras configuraciones que requieran datos de autenticación.

Como
necesitamos permisos para poder acceder a una base de datos mediante
un datasource, nos dirgimos a Seguridad->Configuración de
JAAS->Datos de autenticación de J2C:

Imagen
1: insertar usuario J2C

Y
pulsamos sobre el botón ‘nuevo’.

En
este punto tendremos una pantalla como la siguiente:

Imagen
2: insertar usuario J2C

Insertamos
los datos necesarios:

  • Alias:
    es el nombre que se le da al usuario dentro del contexto de
    websphere. Este nombre debe ser único para cada usuario
    insertado.

  • ID
    de usuario
    : aquí se debe introducir el id de usuario para
    la base de datos a la que queremos acceder. Nosotros tenemos en
    nuestro servidor de Sql Server un usuario llamado AutentiaUser.

  • Contraseña:
    Contraseña del usuario de la base de datos.

  • Descripción:
    Si se desea se puede introducir una descripción para este
    usuario

Tras
introducir los datos pulsamos en aceptar. Veremos una pantalla como
la siguiente, donde se muestra el usuario recientemente creado:

Imagen
3: insertar usuario J2C

Si
nos fijamos bien, en la parte superior de la ventana aparece un
mensaje avisándonos de que deberemos guardar los cambios.
Pulsamos sobre guardar (recuadrado en rojo), y aparece un mensaje de
confirmación. Volvemos a pulsar guardar:

Imagen
4: insertar usuario J2C

Tras
realizar los pasos anteriores ya tenemos creado un usuario que va a
poder acceder a la base de datos. Ahora vamos a proceder a crear un
Datasource en el servidor, al que luego accederemos desde cualquier
aplicación.

1.2. Crear el
proveedor de JDBC

El
proveedor es simplemente el driver que vamos a usar para conectarnos
con la base de datos.

Una
vez creado el proveedor, es decir, una vez dado de alta el driver,
podremos crear tantos datasources (fuentes de datos) que usen ese
proveedor de JDBC, como queramos.

Para
ello pulsamos sobre el enlace Proveedores de JDBC
(Recursos->Proveedores de JDBC), y llegaremos a la siguiente
pantalla:

Imagen
5: crear un datasource

Se
puede apreciar que se puede elegir en que ámbito crear el
datasource. Para este documento se ha realizado sobre el ámbito
‘servidor’, pero se puede también hacer sobre el
ámbito ‘Nodo’.

Pulsamos
entonces sobre el botón nuevo que aparece un poco más
abajo que nos llevara al siguiente menú:

Imagen
6: crear un datasource

Desde
aquí seleccionamos el proveedor del driver JDBC que se va a
utilizar. Como el servidor al que nos queremos conectar es SQL Server
elegimos el penúltimo driver que aparece en la lista
desplegable (WebSphere embedded ConnectJDBC driver for MS SQL
Server
).

Si
nos fijamos en la lista desplegable podemos observar que existen 2
drivers con este nombre; uno terminado en (XA) y otro sin esta
terminación. Los drivers jdbc XA son los que se utilizan para
realizar transacciones distribuidas. Nosotros usaremos aquí la
versión que no utiliza transacciones distribuidas (aquella que
no lleva XA en su nombre).

Pulsamos
sobre aceptar y llegamos a la próxima pantalla:

Imagen
7: crear un datasource

Imagen
8: crear un datasource

En
este punto no es necesario cambiar nada, y podemos pulsar sobre
Aplicar.

1.3. Creación del datasource

Ahora
en la parte inferior de la pantalla han aparecido más opciones
como muestra la siguiente captura:

Imagen
9: crear un datasource

En
recuadro rojo esta resaltado el link sobre el que deberemos pulsar
ahora para definir el datasource en sí:

Imagen
10: crear un datasource

Pulsamos
sobre nuevo e introducimos los siguientes datos:

Imagen
11: crear un datasource

Dentro
del dato recuadrado en rojo (Nombre JNDI) insertamos el nombre con el
cual más tarde haremos referencia en la aplicación
mediante JNDI. Nosotros lo hemos llamado ‘jdbc/autentiaDS’.

Si
seguimos haciendo scroll hacia abajo (pues hay más opciones
que no caben en la captura) insertaremos más datos que se
explican a continuación:

Imagen
12: crear un datasource

Recuadrados
en rojo hay 2 listas desplegables cuyos valores iniciales son
‘(nada)’ (‘Alias de autenticación gestionada
por componentes’ y ‘Alias de autenticación
gestionado por contenedor’). Desplegamos las listas y
seleccionamos el alias del usuario J2C que creamos al principio del
documento, y pulsamos aplicar:

Imagen
13: crear un datasource

Tras
pulsar aplicar, en la parte inferior de la pantalla vuelven a
aparecer 2 opciones más: pinchamos sobre ‘propiedades
personalizadas’ y continuamos.

Imagen
14: crear un datasource

Ahora
hemos de rellenar los datos referentes a la conexión con la
base de datos, como son el nombre de la misma, la dirección
del servidor.. Más abajo se explica cada opción con más
detalle:

Imagen
15: crear un datasource

En
la captura anterior vemos varios parámetros rodeados por un
cuadrado rojo, que son aquellos que se han rellenado. El resto pueden
quedarse vacíos (son opcionales). Los parámetros
rellenados son:

  • databaseName:
    nombre de la base de datos a la cual nos conectaremos con este
    datasource.

  • serverName:
    Dirección o nombre del servidor. Para el ejemplo es
    “localhost” puesto que el servidor de SQL Server está
    en la misma máquina que el WebSphere. También puede
    introducirse la dirección IP del servidor, su URL
    (
    www.unadireccioncualquiera.com),
    o el nombre de la máquina para redes Windows (p. ej.
    SERVIDOR, SQLSERVER, AUTENTIASERVER,…). Consultar al
    administrador de la red para más información acerca de
    este dato.

  • portNumber:
    por defecto ya viene el 1433, que es el puerto de escucha de SQL
    Server por defecto, pero habrá que introducir otro si así
    fuera necesario.

  • selectMethod:
    se ha utilizado para este documento el método ‘cursor’.
    También es posible establecer ‘direct’ (ver
    opciones de SQL Server).

Si
es necesario rellenar más parámetros debe hacerse desde
aquí, y en caso de necesitar algún parámetro que
no esté listado en esta sección, se pueden añadir
más mediante el botón ‘Nuevo’, que esta en
la parte superior.

Y
tras finalizar de insertar los parámetros necesarios, vamos a
la parte superior de la ventana y pulsamos el link ‘Guardar’:

Imagen
16: crear un datasource

Seguidamente
otra pantalla nos pide confirmación al guardar los cambios.
Pulsamos en guardar de nuevo:

Imagen
17: crear un datasource

En
este punto ya tenemos creado el datasource. Podemos hacer una prueba
del mismo yendo a ‘Proveedores de JDBC -> WebSphere embedded
ConnectJDBC driver for MS SQL Server’. Veremos el datasource
que acabamos de crear. Lo seleccionamos mediante el checkbox, y
pulsamos sobre el botón ‘conexión de prueba’:

Imagen
18: crear un datasource

Si
todo ha ido bien el sistema nos tiene que devolver un mensaje en la
parte superior como el siguiente:

Imagen
19: crear un datasource

2. Conectarse desde java al datasource de SQL
Server

Tras
la creación del datasource vamos a proceder a mostrar un
sencillo ejemplo de java para conseguir un objeto Connection (que
representa una conexión con el datasource, y por tanto con la
base de datos).

Como
el objetivo de este documento es mostrar cómo se crea dicha
conexión, los ejemplos de java no seguirán ninguno de
los patrones de diseño que se esperaría en un
desarrollo serio; eso queda en manos del lector de este documento.

Para
mostrar estos ejemplos se ha utilizado como entorno de desarrollo IBM
Studio Site Developer 5.1.2, que viene instalado junto con el
servidor de aplicaciones WebSphere.

package
com.autentia.ejemplo;

import
java.sql.Connection;

import
java.sql.PreparedStatement;

import
java.sql.ResultSet;

import
java.sql.SQLException;

import
java.sql.Statement;

import
java.util.Hashtable;

import
javax.naming.Context;

import
javax.naming.InitialContext;

import
javax.naming.NamingException;

import
javax.sql.DataSource;

/**


* @author autentia


*

*/

public
class Conexion {


public Conexion()
{


}


public Connection
getConnection() {


try {


Hashtable
env = new Hashtable();


env.put(Context.INITIAL_CONTEXT_FACTORY,

«com.ibm.websphere.naming.WsnInitialContextFactory»);


InitialContext
ctx = new InitialContext(env);


DataSource
ds = (DataSource) ctx.lookup(«jdbc/autentiaDS»);


return
ds.getConnection();


} catch
(Exception e) {


e.printStackTrace();


}


return null;


}



public String
getUsers() {


StringBuffer
strRet = new StringBuffer(

«<tr><th>Nombre</th><th>Apellidos</th><th>Descripcion</th></tr>»);


PreparedStatement
pstmt;


ResultSet rs;


Connection c
= this.getConnection();


try {


pstmt =
c.prepareStatement(


«SELECT
USER_NOMBRE, USER_APELLIDOS, USER_DESC » +


«FROM
USUARIOS»);


rs =
pstmt.executeQuery();


while
(rs.next()) {


strRet.append(«<tr>»);


strRet.append(«<td>»);


strRet.append(rs.getString(1));


strRet.append(«</td>»);


strRet.append(«<td>»);


strRet.append(rs.getString(2));


strRet.append(«</td>»);


strRet.append(«<td>»);


strRet.append(rs.getString(3));


strRet.append(«</td>»);


strRet.append(«</tr>»);

}


} catch
(Exception e) {


strRet.append(e.getMessage());


}


return
strRet.toString();


}


public String
getPC() {


StringBuffer
strRet = new StringBuffer(«<tr><th>Nombre
PC</th></tr>»);


PreparedStatement
pstmt;


ResultSet rs;


Connection c
= this.getConnection();


try {


pstmt =
c.prepareStatement(«SELECT PC_NOMBRE FROM autentiapc.dbo.PC»);


rs =
pstmt.executeQuery();


while
(rs.next()) {


strRet.append(«<tr>»);


strRet.append(«<td>»);


strRet.append(rs.getString(1));


strRet.append(«</td>»);


strRet.append(«<td>»);


strRet.appe
nd(«</tr>»);


}


} catch
(Exception e) {


strRet.append(e.getMessage());


}


return
strRet.toString();


}



public String
getALL() {


StringBuffer
strRet = new StringBuffer(

«<tr><th>Nombre</th><th>Apellidos</th><th>Descripcion</th><th>Nombre
PC</th></tr>»);


PreparedStatement
pstmt;


ResultSet rs;


Connection c
= this.getConnection();


try {


pstmt =
c.prepareStatement(


«SELECT
U.USER_NOMBRE, U.USER_APELLIDOS, U.USER_DESC, P.PC_NOMBRE » +


«FROM
autentiapc.dbo.PC P, USUARIOS U » +


«WHERE
P.USER_UID = U.USER_UID»);


rs =
pstmt.executeQuery();


while
(rs.next()) {


strRet.append(«<tr>»);


strRet.append(«<td>»);


strRet.append(rs.getString(1));


strRet.append(«</td>»);


strRet.append(«<td>»);


strRet.append(rs.getString(2));


strRet.append(«</td>»);


strRet.append(«<td>»);


strRet.append(rs.getString(3));


strRet.append(«</td>»);


strRet.append(«<td>»);


strRet.append(rs.getString(4));


strRet.append(«</td>»);


strRet.append(«</tr>»);


}


} catch
(Exception e) {


strRet.append(e.getMessage());


}


return
strRet.toString();


}

}

Fijémonos
ahora en el método getConnection que es aquel que nos da la
conexión:


Hashtable
env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY,


«com.ibm.websphere.naming.WsnInitialContextFactory»);

InitialContext
ctx = new InitialContext(env);

Este
fragmento de código es la forma definida por IBM para obtener
el contexto de WebSphere dentro de la aplicación java, así
que siempre debería obtenerse de esta manera.

DataSource
ds = (DataSource) ctx.lookup(«jdbc/autentiaDS»);

return
ds.getConnection();

Mediante
este último fragmento obtendremos el objeto que representa el
datasource en java, y del cual obtendremos la conexión que nos
permitirá realizar operaciones sobre la base de datos. El
nombre
jdbc/autentiaDS es
el nombre JNDI que le dimos al datasource en WebSphere al crearlo.

Como
último comentario decir que aunque el datasource accede por
defecto a la base de datos ‘autentia’ (que se indicó
en la creación), se pueden acceder a otras bases de datos del
servidor mediante sus nombres, como se puede observar con el
fragmento de código mostrado a continuación:

pstmt
= c.prepareStatement(


«SELECT
U.USER_NOMBRE, U.USER_APELLIDOS, U.USER_DESC, P.PC_NOMBRE » +


«FROM
autentiapc.dbo.PC P, USUARIOS U » +


«WHERE
P.USER_UID = U.USER_UID»);

Usuarios’
es una tabla que se encuentra dentro de la base de datos ‘autentia’,
mientras que ‘PC’ es otra tabla que se encuentra en otra
base de datos del servidor, a saber, ‘autentiapc’. La
forma de acceder a esta tabla es mediante el nombre de recurso
completo ‘autentiapc.dbo.PC’.

Y
finalmente vamos a mostrar el resultado de ejecutar la clase anterior
en la aplicación web:

Nombre

Apellidos

Descripcion

german

jimenez

autentia

daniel

hernandez

autentia

miguel

mena

autentia

alberto

carrasco

autentia

Nombre
PC

autentiaserver

pc-mena

pc-alberto

pc-german

pc-daniel

Nombre

Apellidos

Descripcion

Nombre
PC

miguel

mena

autentia

pc-mena

alberto

carrasco

autentia

pc-alberto

german

jimenez

autentia

pc-german

daniel

hernandez

autentia

pc-daniel

1 Comentario

Dejar respuesta

Please enter your comment!
Please enter your name here