Conexión
Introducción
Se han creado las principales maquetas entre las cuales encontramos el formulario de conexión y se ha tratado la gestión de eventos en el capítulo Maquetas. En este capítulo se trata de poner en marcha todos los controles necesarios antes de autorizar el acceso a la aplicación. Simultáneamente, hay que gestionar el acceso al servidor y a la base de datos teniendo en cuenta los posibles problemas de conexión.
Parámetros de conexión
JPA provee un mecanismo general de configuración de la conexión a la base de datos. Este mecanismo se apoya en la presencia de un archivo particular en un sitio determinado. Se ha realizado la primera etapa, vista en el capítulo Base de datos MySQL, creando este archivo y rellenándolo con los datos de conexión a la base de datos. Se completará a medida que se avance en el proyecto.
Repita la creación del archivo «persistence.xml» en la carpeta src/main/resources/META-INF del proyecto de gestión.
Añada el driver JDBC MySQL en las propiedades del proyecto.
Añada los archivos jar de la librería EclipseLink.
Pruebe el acceso a la base de datos con la clase TestJPA que se codificó en el capítulo Base de datos MySQL, importándola en el proyecto de gestión Oxygen.
A continuación es momento de interesarse en el modo de acceso a los datos de la aplicación.
Para hacerlo sencillo y rápido, el nombre del usuario y la contraseña son únicos para todos los usuarios de la aplicación. Los parámetros correspondientes al driver, el servidor y la base de datos vienen de la instalación realizada para el SGBD MySQL (consulte el capítulo Base de datos MySQL), así como los datos de identificación.
En una aplicación más realista, sería posible crear tablas de usuarios y configurar para cada uno una combinación usuario/contraseña única y un identificador de acceso único a la base de datos. Otra posibilidad sería gestionar los usuarios mediante la propia base de datos, encargándose la aplicación de inyectar en la configuración...
Puesta en marcha del formulario de conexión
El formulario FConexion pasará aquí del estatus de maqueta al de formulario operacional.
Empiece por añadir un package llamado «dialogo».
Vuelva a copiar en este package todas las clases de las maquetas.
La clase FConexion es una HMI. Se contenta con transmitir la solicitud del usuario a la clase Conexion para la conexión a la base de datos.
Abra la clase gráfica FConexion con WindowBuilder Editor.
Complete los imports.
import control.connection.Conexion;
Vaya al método validar() y reemplace el código siguiente:
boolean valido = true; // se reemplazará este código más adelante
por :
String elNombre = txtIntroUsuario.getText();
String laContrasena = String.valueOf(
pwdContrasena.getPassword());
Conexion conexion = Conexion.getConnexion();
boolean valido = conexion.control(elNombre, laContrasena);
El control de introducción se efectúa con el método control() de la clase Conexion.
La expresión pwdContrasena.getPassword() devuelve un array de caracteres.
Por razones de seguridad en el uso de la clase JPasswordField, Java hace una distinción entre las cadenas de caracteres declaradas con la clase String y los arrays de caracteres.
// aceptado
char[] vChar = pwdContrasena.getPassword();
// rechazado
String laContrasena = pwdContrasena.getPassword();
Hay que convertir el array de caracteres en una cadena de caracteres, conversión realizada con el método estático valueOf() de la clase String.
laContrasena = String.valueOf(pwdContrasena.getPassword());
Estos controles se efectúan de dos maneras: si la introducción del usuario/contraseña es incorrecta, el método control() de la clase Conexion devolverá...
Lectura de los registros
Llegados a este punto, es hora de realizar algunos test de escritura y lectura de los datos de la base de datos, con la ayuda de la clase TestJPA.
Primero añada un método toString() a esta clase usando la opción Source - Generate toString()... del menú contextual. Permitirá tener más comodidad para visualizar los datos.
@Override
public String toString() {
return "TestJPA [clavePrimaria=" + clavePrimaria
+ ", mensaje=" + mensaje
+ "]";
}
Modifique después el método main() de la clase TestJPA como sigue:
public static void main(String[] args) {
Conexion conexion = Conexion.getConexion();
// creación de datos de test
TestJPA test1 = new TestJPA();
test1.clavePrimaria = 1;
test1.mensaje = "mensaje 1";
TestJPA test2 = new TestJPA();
test2.clavePrimaria = 2;
test2.mensaje = "mensaje 2";
TestJPA test3 = new TestJPA();
test3.clavePrimaria = 3;
test3.mensaje = "mensaje 3";
// empezar una transacción
EntityTransaction transaccion = em.getTransaction();
transaccion.begin();
// guardar los elementos en el administrador de entidades
em.persist(test1);
em.persist(test2);
em.persist(test3);
// sincronizar el administrador con la base de datos
em.flush();
em.remove(test3);
// finalizar la transacción
transaccion.commit();
// los datos están ahora en la base de datos
}
Para efectuar una operación...