Architecture - jjaroztegi/BuildingSignalSimulator GitHub Wiki
Architecture
πͺπΈ Ver en espaΓ±ol
Overview
The Building Signal Simulator is built using a three-tier architecture:
- Frontend (Presentation Layer)
- Backend (Business Logic Layer)
- Database (Data Layer)
Technical Stack
Backend
- Language: Java 1.8 (JDK 1.8.0_131)
- Server: Apache Tomcat 9.0.89
- API: javax.servlet for HTTP request handling
- Database Access: JDBC for database operations
Frontend
- HTML: Structure and content
- JavaScript: ES6 modules for functionality
- CSS: Tailwind CSS for styling
- Theme: Built-in dark mode support
Database
- Primary: MS Access via JDBC
- Alternative: Apache Derby (embedded)
- Schema: Relational database with component and configuration tables
Project Structure
βββ src/ # Java source files
β βββ com/
β βββ signalapp/ # Main application code
β βββ dao/ # Data Access Objects
β βββ models/ # Data models
β βββ servlets/ # Servlet controllers
β βββ tests/ # Unit tests
βββ webapp/ # Web application files
β βββ js/ # JavaScript files
β β βββ script.js # Main application logic
β β βββ modules/ # JavaScript modules
β βββ WEB-INF/ # Web configuration
β βββ index.html # Main application page
βββ database/ # Database files and SQL scripts
βββ doc/ # Documentation
βββ lib/ # Required JAR dependencies
βββ tools/ # Jakarta migration tool
βββ Dockerfile # Docker configuration
βββ docker-compose.yml # Docker Compose configuration
Component Architecture
Backend Components
1. Data Access Layer (DAO)
Located in src/com/signalapp/dao/
-
BaseDAO.java
- Abstract base class for all DAOs
- Implements common CRUD operations
- Handles connection management
-
AccessConnection.java
- MS Access database connection management
- Connection pooling
- Transaction handling
-
DerbyConnection.java
- Apache Derby database connection management
- Alternative database support
- Embedded database configuration
-
Entity-specific DAOs
- ComponenteDAO.java
- TiposComponenteDAO.java
- CoaxialDAO.java
- DerivadorDAO.java
- DistribuidorDAO.java
- TomaDAO.java
- ConfiguracionDAO.java
- MargenCalidadDAO.java
2. Model Layer
Located in src/com/signalapp/models/
-
Base Models
- Componente.java
- TipoComponente.java
- Configuracion.java
- MargenCalidad.java
-
Component-specific Models
- Coaxial.java
- Derivador.java
- Distribuidor.java
- Toma.java
3. Servlet Controllers
Located in src/com/signalapp/servlets/
-
ConfigurationServlet.java
- Handles configuration management
- CRUD operations for configurations
- Configuration validation
-
ComponentServlet.java
- Component management
- Component type handling
- Property validation
-
SignalTypeServlet.java
- Signal type management
- Quality margin handling
-
SignalCalculationServlet.java
- Signal level calculations
- Validation against margins
- Cost calculations
Frontend Components
1. Core Application
Located in webapp/
- index.html
- Main application entry point
- Tab-based interface
- Responsive layout
2. JavaScript Modules
Located in webapp/js/modules/
-
servlet.js
- API communication
- Request/response handling
- Error management
-
ui.js
- UI updates
- DOM manipulation
- Event handling
-
forms.js
- Form management
- Input validation
- Form submission
-
tabs.js
- Tab navigation
- Content switching
- State management
-
theme.js
- Theme switching
- Dark mode handling
- Preference persistence
-
utils.js
- Helper functions
- Data formatting
- Validation utilities
Communication Flow
-
User Interaction
User β Frontend β JavaScript Modules β API Calls
-
API Request Processing
API Call β Servlet β Business Logic β DAO β Database
-
Response Flow
Database β DAO β Business Logic β Servlet β JSON Response β Frontend
Security Considerations
-
Input Validation
- Frontend validation
- Server-side validation in servlets
- Prepared statements for SQL
-
Error Handling
- Consistent error format
- Appropriate error codes
- User-friendly messages
-
Data Protection
- SQL injection prevention
- XSS prevention
- CSRF protection
Performance Optimization
-
Database
- Indexed key columns
- Connection pooling
- Prepared statements
-
Frontend
- Modular JavaScript
- Efficient DOM updates
- Resource caching
-
Backend
- Response caching
- Efficient algorithms
- Resource pooling
Development Workflow
-
Local Development
- Manual compilation
- Hot reload for frontend
- Local database
-
Testing
- Unit tests
- Integration tests
- Manual testing
-
Deployment
- Manual deployment
- Docker containerization
- Configuration management