Development Guide.es - jjaroztegi/BuildingSignalSimulator GitHub Wiki

Guía de Desarrollo

🇬🇧 View in English

Configuración del Entorno

1. Requisitos del Sistema

  • 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

2. Configuración del Entorno Java

# 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%

3. Configuración de Base de Datos

  • MS Access

    • Ubicar archivo .accdb en database/
    • Configurar JDBC URL en src/com/signalapp/dao/AccessConnection.java
  • Apache Derby

    • Base de datos embebida
    • Configuración en src/com/signalapp/dao/DerbyConnection.java

Proceso de Compilación

1. Compilación Manual

# 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"

2. Compilación con Docker

# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "1313:8080"
    volumes:
      - ./database:/usr/local/tomcat/database

Estructura del Código

1. Organización de Paquetes

src/com/signalapp/
├── dao/           # Acceso a datos
├── models/        # Modelos de dominio
├── servlets/      # Controladores web
└── tests/         # Pruebas unitarias

2. Convenciones de Código

  • 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
    }

Pruebas

1. Pruebas Unitarias

// 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);
    }
}

2. Pruebas de Integración

// 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));
}

Despliegue

1. Despliegue Manual

  1. Detener Tomcat
  2. Ejecutar build_uni.bat
  3. Iniciar Tomcat
  4. Verificar logs en %TOMCAT_HOME%\logs

2. Despliegue con Docker

# Construir y desplegar
docker compose build
docker compose up -d

# Verificar logs
docker compose logs -f app

Depuración

1. Logging

// 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);
    }
}

2. Depuración en IDE

  • Configurar breakpoints
  • Inspeccionar variables
  • Evaluar expresiones
  • Analizar stack trace

Control de Versiones

1. Estructura de Ramas

main           # Rama principal de producción
├── develop    # Rama de desarrollo
└── feature/*  # Ramas de características

2. Convenciones de Commits

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

Mejores Prácticas

1. Código

  • Seguir principios SOLID
  • Mantener métodos pequeños y enfocados
  • Usar patrones de diseño apropiados
  • Documentar código complejo

2. Base de Datos

  • Usar sentencias preparadas
  • Manejar conexiones adecuadamente
  • Implementar transacciones cuando sea necesario
  • Mantener índices actualizados

3. Seguridad

  • Validar entrada de usuario
  • Escapar salida HTML
  • Proteger contra inyección SQL
  • Manejar errores apropiadamente

Recursos

1. Documentación

2. Herramientas

Solución de Problemas

1. Problemas Comunes

  • 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%

2. Herramientas de Diagnóstico

  • Logs de aplicación
  • Logs de Tomcat
  • Herramientas de monitoreo JVM
  • Analizador de base de datos
⚠️ **GitHub.com Fallback** ⚠️