Development Guide.es - jjaroztegi/BuildingSignalSimulator GitHub Wiki
- Java JDK 1.8.0_131
- Apache Tomcat 9.0.89
- Base de datos MS Access o Apache Derby
- Editor de código (recomendado: VS Code, IntelliJ IDEA)
- Git para control de versiones
# Variables de entorno requeridas
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131
TOMCAT_HOME=C:\Program Files\Apache Software Foundation\Tomcat 9.0
PATH=%JAVA_HOME%\bin;%TOMCAT_HOME%\bin;%PATH%
-
MS Access
- Ubicar archivo .accdb en
database/
- Configurar JDBC URL en
src/com/signalapp/dao/AccessConnection.java
- Ubicar archivo .accdb en
-
Apache Derby
- Base de datos embebida
- Configuración en
src/com/signalapp/dao/DerbyConnection.java
# Windows (build_uni.bat)
@echo off
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131
set TOMCAT_HOME=C:\Program Files\Apache Software Foundation\Tomcat 9.0
set CLASSPATH=.;%JAVA_HOME%\lib;%TOMCAT_HOME%\lib\*;.\lib\*
# Compilar archivos Java
javac -source 1.8 -target 1.8 -d build\classes src\com\signalapp\**\*.java
# Crear WAR
cd build\classes
jar -cvf ..\..\BuildingSignalSimulator.war *
cd ..\..
# Desplegar en Tomcat
copy BuildingSignalSimulator.war "%TOMCAT_HOME%\webapps"
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "1313:8080"
volumes:
- ./database:/usr/local/tomcat/database
src/com/signalapp/
├── dao/ # Acceso a datos
├── models/ # Modelos de dominio
├── servlets/ # Controladores web
└── tests/ # Pruebas unitarias
-
Nomenclatura
// Clases en PascalCase public class ComponenteDAO { // Variables en camelCase private Connection conexion; // Constantes en SNAKE_CASE private static final String QUERY_SELECT = "SELECT * FROM Componentes"; }
-
Documentación
/** * Calcula el nivel de señal para un piso específico. * @param idConfiguracion ID de la configuración * @param numeroPiso Número de piso * @return Nivel de señal calculado * @throws SQLException Si hay error en la base de datos */ public double calcularNivelSenal(int idConfiguracion, int numeroPiso) throws SQLException { // Implementación }
// Ejemplo de prueba unitaria
import org.junit.Test;
import static org.junit.Assert.*;
public class ComponenteTest {
@Test
public void testCalcularAtenuacion() {
Componente componente = new Componente();
double atenuacion = componente.calcularAtenuacion(100.0);
assertTrue("La atenuación debe ser positiva", atenuacion > 0);
}
}
// Ejemplo de prueba de integración
@Test
public void testFlujoCompleto() {
// Crear configuración
Configuracion config = new Configuracion("Test", 95.0, 5);
configuracionDAO.guardar(config);
// Agregar componentes
List<Componente> componentes = new ArrayList<>();
// ... agregar componentes
// Calcular y validar
double[] niveles = calculador.calcularNiveles(config, componentes);
assertTrue("Todos los niveles deben estar en rango",
validador.validarNiveles(niveles));
}
- Detener Tomcat
- Ejecutar
build_uni.bat
- Iniciar Tomcat
- Verificar logs en
%TOMCAT_HOME%\logs
# Construir y desplegar
docker compose build
docker compose up -d
# Verificar logs
docker compose logs -f app
// Configuración de logging
import java.util.logging.*;
public class LoggerConfig {
private static final Logger LOGGER = Logger.getLogger(LoggerConfig.class.getName());
static {
LOGGER.setLevel(Level.INFO);
FileHandler fh = new FileHandler("logs/app.log");
LOGGER.addHandler(fh);
}
}
- Configurar breakpoints
- Inspeccionar variables
- Evaluar expresiones
- Analizar stack trace
main # Rama principal de producción
├── develop # Rama de desarrollo
└── feature/* # Ramas de características
feat: nueva característica
fix: corrección de error
docs: cambios en documentación
style: cambios de formato
refactor: refactorización de código
test: adición o modificación de pruebas
- Seguir principios SOLID
- Mantener métodos pequeños y enfocados
- Usar patrones de diseño apropiados
- Documentar código complejo
- Usar sentencias preparadas
- Manejar conexiones adecuadamente
- Implementar transacciones cuando sea necesario
- Mantener índices actualizados
- Validar entrada de usuario
- Escapar salida HTML
- Proteger contra inyección SQL
- Manejar errores apropiadamente
-
Error de conexión a base de datos
// Verificar configuración de conexión String url = "jdbc:ucanaccess://database/signal.accdb";
-
Errores de compilación
# Verificar CLASSPATH echo %CLASSPATH%
- Logs de aplicación
- Logs de Tomcat
- Herramientas de monitoreo JVM
- Analizador de base de datos