0% encontró este documento útil (0 votos)
28 vistas10 páginas

Aplicación Singleton

Este documento describe la implementación de un patrón creacional (Singleton) para controlar las conexiones a una base de datos desde una aplicación. Se crearán clases para la conexión, manejo de datos, interfaz y prueba de la aplicación, aplicando el patrón Singleton para tener una única instancia de conexión independientemente del número de instancias de la aplicación.

Cargado por

Betzi Flores
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
28 vistas10 páginas

Aplicación Singleton

Este documento describe la implementación de un patrón creacional (Singleton) para controlar las conexiones a una base de datos desde una aplicación. Se crearán clases para la conexión, manejo de datos, interfaz y prueba de la aplicación, aplicando el patrón Singleton para tener una única instancia de conexión independientemente del número de instancias de la aplicación.

Cargado por

Betzi Flores
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

Implementación de un patrón creacional para un contexto especifico

 Objetivo: Crear un programa que use un patrón creacional (caso Singleton).


 Tema a cubrir: Patrones creacionales
 Propósitos:
Identificación de las inconveniencias que pueden presentarse con la creación de
objetos en un contexto de manejo de base datos.
Aplicar un patrón de diseño creacional para el control de instancias en un contexto de
base de datos.
 Productos esperados
A. Creación de una base de datos con algún DBMS agregándole datos en forma directa
mediante las herramientas proporcionadas por el NetBeans.
B. Creación de una aplicación sin uso del patrón de diseño usando el asistente de
NetBeans, creando las conexiones en forma implícita.
C. Creación de la aplicación utilizando el patrón creacional de instancia única (Singleton).
 Software a utilizar:
NetBeans 8.2, que incluya la versión de java 1.8
DBMS: Derby (puede ser cualquier otro)
 Descripción:
Como has de saber, para poder acceder a una base de datos relacional que se ha creado y
poder manipularla hay que crear una conexión entre la aplicación y el manejador de base
de datos. Aquí el punto central es la forma de cómo se llega a realizar una conexión y
analizar las repercusiones que se tienen cuando se crean varias instancias de una misma
aplicación que acceden a la misma base de datos.
La base de datos a ocupar en esta práctica es sobre unos estudiantes que están inscritos
en una de las carreras de una institución educativa superior como la del Instituto
Tecnológico de Oaxaca. Consta de dos tablas, una conformada datos básicos de los
estudiantes y la otra contiene datos sobre las carreras.
Los datos de los estudiantes son: su número de control(llave), nombre, edad, sexo,
semestre que cursan, créditos cursados y su identificador de la carrera. La carrera
contendrá su identificador, nombre y número de créditos a cursar.
La aplicación consistirá en mostrar y modificar algunos datos de los estudiantes como el
semestre que cursan y créditos acumulados usando instrucciones SQL y como vista una
tabla. De las cuales se tendrán varias instancias para simular concurrencia (ya que es una
aplicación de escritorio).
Las aplicaciones y las conexiones se harán de dos maneras: una apoyados con el asistente
de NetBeans y otra manera usando el código con el patrón de creacional “Singleton”

En el esquema siguiente se muestra lo que se pretende realizar


DBMS APLICACIÓN
Base de datos
datosdaos Instancia_1c
ESTUDIANTE ia_1
Instancia_2
CARRERA
CONEXIONES

Implícitas | Controladas Instancia_n

Creación, conexión y manipulación de base datos

 Problema a resolver
¿Cómo hacer para controlar las conexiones hacia una base de datos,
independientemente del número aplicaciones que accedan a ella?

 Desarrollo de la práctica:

A. Creación de la base datos: La creación de la base de acuerdo a la descripción es


mediante el uso del DBMS Derby incluido en java (puede hacerse con otro DBMS).

Dentro del NetBeans:

a) Abre la ventana Services (Prestaciones), ubícate y expande el nodo “Databases”


b) Ubicate en Java DB, da clic derecho y activa la opción: Create Database
c) Dentro de Database proporciona los datos tal como se muestran a continuación, la
contraseña es la que tú quieras, al terminar da clic en Ok

d) En la ventana de Services debe de verse la base de datos creada, da doble clic para
abrirla (y establecer la conexión)
e) En Tables , da clic derecho y elije la opción Execute Command, en la ventana mostrada
introduce el código del script abajo mostrado para crear la base de datos

f) Ejecuta el script, (clic en el icono con el triángulo verde), y en la ventana de Services


debe verse la base de datos creada

g) Ubicate en la tabla CARRERA y activa la opción View Data, inserta datos en la ventana del
asistente, tal como se muestra a continuación:

h) Has lo mismo para la tabla ESTUDIANTE, al final las dos tablas deben tener datos
B. Creación de la aplicación con conexión implícita usando el asistente de NetBeans
Dentro de NetBeans:
a) Crea un nuevo proyecto java simple, puedes llamarlo practica_02
b) Dentro de la carpeta Sources crea un nuevo paquete, puedes llamarlo practica
c) Dentro del paquete practica, crea una aplicación de tipo “Swing GUI Forms”, elige
Master/Detail sample Form, da clic en Next, dale un nombre , puedes llamarle
ManipulaArchivo, da clic en Next

d) En ventana de dialogo mostrada, elige la conexión de la base datos a usar, en este


caso será ACADEMICA. En la tabla de base datos elije ESTUDIANTE, tal como se
muestra a continuación:

e) Ahora observa lo que se ha generado en


el paquete practica y en lo demás del proyecto, algo como lo mostrado a
continuación:
En el paquete práctica se muestra una nueva clase generada, con el nombre de
la tabla (Estudiante). Un paquete META-INF con un archivo xml, y dentro del
Libraries, varias librerías más y los archivos *.jar de derby

f) El archivo persistence.xml contiene la información de la conexión que se forma


entre el manejador y la aplicación, ábrelo y revisa su contenido

g) Ejecuta ahora la aplicación ManipulaArchivo, por lo menos tres veces, de tal


manera que haya tres instancias de la misma aplicación corriendo a la vez, observa
en la ventana de Output, cuantas conexiones se han generado.
h) Modifica en alguna de la ejecuciones de la aplicación los valores de créditos y/o
semestre de alguno de los estudiantes en una de las tablas, verifica si se llega a
presentar inconsistencia como se muestra en la figura siguiente.

i) Contesta ahora las preguntas:


->¿Si se llegó a presentar alguna inconsistencia, a qué se debe?
->¿Es deseable crear varias conexiones para varios accesos a una misma base de
datos(independientemente si es para la misma aplicación o con una diferente), si
o no y por que?
->¿De qué manera se asocia la conexión de la base de datos con la aplicación?
C. Creación de la aplicación utilizando el patrón creacional de instancia única (Singleton)
para el control de la conexión.
Se crearan las clases Conexión, ManejaDatosEstudiante, ModeloTabla , Interfaz, y
PruebaAplicacion.

Creación de la conexión.
a) Dentro del proyecto y de Source Packages , crea un paquete llamado datos.
Dentro de él crea una clase llamada Conexión, la cual tendrá la estructura del
patrón Singleton.
b) La clase creada tendrá tres atributos:
private static Connection coneccion;
private static int numConexiones=0; // después debes de descubrir para qué es útil
// el tercer atributo créalo pues es lo que caracteriza al patrón Singleton
c) Agrega un constructor, con los parámetros (String url,String usuario,String password),
agrega el ámbito(o visibilidad) que debe corresponder al patrón. El contenido del
constructor debe ser:

d) El método que también caracteriza al patrón referido será:

e) Se hace necesario agregar un método que regrese un objeto de la clase


Connection, creado en el constructor, ¿por qué?.
public static Connection getConeccion()
{
return coneccion;
}

f) Por último, se crea el método que servirá para cerrar la conexión y si esto se llevó
a cabo. ¿Por qué crees que puede no cerrarse?
Creación de la clase ModeloTabla
a) Crea un paquete llamado datos y dentro de él la siguiente clase

Manejo datos de estudiantes


a) Crea un paquete llamado control y dentro de él crea una clase llamada
ManejaDatosEst, la cual servirá para acceder a los datos de estudiantes
b) El contenido de la clase es(la contraseña aquí es ‘’12345”) :
Creación de la clase Interfaz
Esta clase es una aplicación que interactúa con las demás para agregar, editar y
visualizar los datos de estudiantes. El número de control se generará
automáticamente (al ser llave primaria no se modifica).
La interfaz de la aplicación será como se muestra a continuación
a) Dentro del proyecto y de Source Packages , crea un paquete llamado vista, dentro de él
crea una clase llamada Interfaz que se herede de JFrame y que implemente las interfaces
ActionListener y Runnable, esto último porque la clase será una tarea que se ejecutara por
varios hilos.
b) Crea un constructor que tenga como parámetro: ModeloTabla modTabla
c) En el constructor crea los elementos Swing(de clases JTextField,JRadioButton,JSpinner)
requeridos para agregar todos los datos de “Estudiante”. Crea dos atributos uno de clase
ModeloTabla y el otro de ManipulaDatos.
d) También dentro del constructor agrega el siguiente código necesario para mostrar y editar
los datos en una tabla

e) Dentro del método de actionPerformed, identifica si se activó por pulsar el botón llamado
Registrar, para que en ese caso se ejecute el código siguiente:

f) También dentro del método actionPerformed, si se activó por pulsar el botón llamado
Terminar, que se ejecute el siguiente código:
if(baseDatos.cerrarSesion())
System.exit(0);
else
this.dispose();
g) Por último, dentro del método run() has que el marco(objeto JFrame) sea visible y dale el
tamaño y ubicación adecuados: this.setVisible(true);, this.setSize(…….).

Prueba de la aplicación

a) Dentro del paquete prueba, crea una clase la cual puedes llamarla PruebaAplicacion , y
dentro de ella el método main que contendrá:
ModeloTabla mt = new ModeloTabla();
Interfaz v1 = new Interfaz(mt);
…..
Crea varias objetos de Interfaz con el mismo modelo de tabla
b) Crea tantos hilos (Thread) dándole como parámetro a cada hilo un objeto distinto de la
clase Interfaz
c) Inicia los hilos creados
d) Ejecuta el programa de la clase prueba, cuida de que las instancias de la clase

 Análisis

Realiza varias pruebas y revisa el comportamiento de la forma en que funciona la clase


Conexion.

a) ¿Cuantas instancias se crean de conexión al hacer una ejecución?


b) ¿Cuál crees que sea el propósito de usar un contador, que pasa si no lo usas ?
c) ¿Qué utilidad tiene el controlar una conexión a una base de datos con el Singleton?

 Conclusiones

Redacta brevemente tus conclusiones sobre el uso del patrón Singleton en esta aplicación

También podría gustarte