AddressBook es un proyecto de ejemplo que realicé allá por el año 2010. Utiliza JSF para la parte visual y consta de dos implementaciones
- Aplicación con Richfaces
- Aplicación con Icefaces
Inicialmente eran proyectos NetBeans basado en Java 6, los he refactorizado y ahora son multimódulos basados en Maven.
Contiene básicamente un CRUD de contactos relacionado al usuario logueado. Soporta el almacenamiento de imágenes en la base de datos y la generación de reportes PDF con JasperReports.
Para levantar la BD con docker, usar esta sentencia:
docker run --name mysql-v5_7 -p 3310:3306 --restart on-failure -e MYSQL_DATABASE=address_book -e MYSQL_ROOT_PASSWORD=rootroot -e TZ=America/Lima -d mysql:5.7.44 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Considerar el siguiente comando con el que se hizo un backup de la base de datos.
mysqldump -u root -p -B --hex-blob --routines address_book > address_book_schema.sqlMe aproveché de una base de datos de ejemplo llamada Employees en donde inserté cerca de 30k registros como contactos. Ahora la aplicación tiene problemas de performance que deben ser corregidos.
Esta es la query con la que obtuve los datos desde el schema Employees.
insert into address_book.usuario(usu_usuario, usu_password)
select p.`name`, PASSWORD(p.`name`) from crud.tbl_person p;SET @random_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
SET @char_length = LENGTH(@random_chars);
-- Configuration for random domains
SET @domains_list = '@latin.com,@llajoo.com,@email.com,@correito.com.ar,@employees.dev,@correo.com.mx';
SET @num_domains = 6;
insert into address_book.contacto(con_nombres, con_cumpleanos, con_email, usu_id, con_codigo)
select concat(first_name, ' ', last_name), birth_date,
lower(concat(first_name, '.', last_name,
FLOOR(1000 + (RAND() * 8999)),
SUBSTRING_INDEX(SUBSTRING_INDEX(@domains_list, ',', 1 + FLOOR(RAND() * @num_domains)), ',', -1)
)),
(
SELECT u.usu_id
FROM `address_book`.usuario u
ORDER BY RAND()
LIMIT 1
),
upper(SUBSTRING(REPLACE(UUID(), '-', ''), 1, 12))
from employees;El actual backup de la base de datos ya lleva los passwords asegurados, inicialmente fueron creados con la siguiente query:
INSERT INTO usuario VALUES (1,'admin', PASSWORD('4dm1n')),(2,'cesardl',PASSWORD('123456'));