- Overview
- Key Features
- System Architecture
- Technology Stack
- Getting Started
- Module Structure
- Application Workflows
- Screenshots
- Deployment
- Analytics & Monitoring
- Security
- License
- Support & Community
The Nawwa Banking System is a modern, enterprise-grade core banking platform designed to revolutionize banking operations. Built on the robust Jakarta EE 10 platform with Enterprise JavaBeans (EJB), this system delivers unparalleled security, scalability, and reliability for mission-critical banking functions.
β
Secure & Efficient - Manage core banking functions with enterprise-level security
β
Transactional Integrity - Leverage EJB for ACID-compliant transactions
β
Automated Operations - Utilize EJB Timer Services for scheduled tasks
β
Scalable Architecture - Multi-module design for independent development and deployment
| Feature | Description |
|---|---|
| π Secure Authentication | BCrypt password hashing with robust user management |
| π₯ Customer Management | Complete lifecycle management of customer profiles and accounts |
| π° Transaction Processing | Real-time and scheduled fund transfers with ACID compliance |
| β° Automated Services | EJB Timer Services for interest calculation and scheduled operations |
| π Analytics Integration | Google Analytics & Microsoft Clarity for user behavior insights |
| π PDF Reports | Downloadable transaction statements and reports |
| π‘οΈ Multi-layer Security | WAF, DDoS protection, and programmatic authorization |
| π± Responsive UI | Modern interface with Bootstrap 5 and dynamic components |
The Nawwa Banking System employs a multi-module architecture that ensures separation of concerns and enables parallel development.
%%{init: {'theme': 'dark'}}%%
graph TB
subgraph "Client Layer"
A[Web Browser]
end
subgraph "CDN & Security"
B[Cloudflare CDN/WAF]
end
subgraph "Proxy Layer"
C[Nginx Reverse Proxy<br/>SSL Termination]
end
subgraph "Application Server - GlassFish 7"
D[Web Module<br/>Servlets & JSP]
E[Security Module<br/>EJB]
F[Banking Services<br/>EJB]
G[Transaction Services<br/>EJB]
H[Timer Services<br/>EJB Singleton]
I[Notification Services<br/>EJB]
J[Core Module<br/>JPA Entities & DTOs]
end
subgraph "Data Layer"
K[(MySQL 8.0<br/>Database)]
L[S3 Bucket<br/>Backups]
end
A -->|HTTPS| B
B -->|Cached/Filtered| C
C -->|HTTP| D
D --> E
D --> F
D --> G
E --> J
F --> J
G --> J
H --> J
I --> J
J -->|JPA| K
K -.->|Hourly Backup| L
H -.->|Scheduled Tasks| G
H -.->|Interest Calculation| F
style A fill:#4169E1
style B fill:#FF8C00
style C fill:#228B22
style D fill:#9932CC
style E fill:#6495ED
style F fill:#6495ED
style G fill:#6495ED
style H fill:#FFD700
style I fill:#2E8B57
style J fill:#A0522D
style K fill:#DAA520
style L fill:#FF6347
| Module | Type | Description |
|---|---|---|
| core | JAR | Foundational module with JPA entities, DTOs, mappers, and exceptions |
| security-module | EJB | Authentication, authorization, and user management |
| banking-services | EJB | Customer and account CRUD operations |
| transaction-services | EJB | Financial transaction processing with Facade pattern |
| timer-services | EJB | Automated background tasks (interest, scheduled transfers) |
| notification-services | EJB | Notification and alert management |
| web | WAR | Presentation layer with Servlets and JSP |
| ear | EAR | Final deployable Enterprise Archive |
%%{init: {'theme': 'dark'}}%%
graph LR
A[core<br/>JAR] --> B[security-module<br/>EJB]
A --> C[banking-services<br/>EJB]
A --> D[transaction-services<br/>EJB]
A --> E[timer-services<br/>EJB]
A --> F[notification-services<br/>EJB]
B --> G[web<br/>WAR]
C --> G
D --> G
E --> G
F --> G
G --> H[ear<br/>Enterprise Archive]
B --> H
C --> H
D --> H
E --> H
F --> H
style A fill:#4169E1
style B fill:#FF8C00
style C fill:#228B22
style D fill:#9932CC
style E fill:#6495ED
style F fill:#6495ED
style G fill:#6495ED
style H fill:#FFD700
| Category | Technology | Purpose |
|---|---|---|
| Backend Framework | Jakarta EE 10 | Enterprise platform foundation |
| Business Logic | EJB 4.0 (@Stateless, @Singleton) |
Transaction management & business components |
| Persistence | JPA 3.1 with Hibernate | Object-Relational Mapping |
| Database | MySQL 8.0 | Relational data storage |
| Frontend | Servlets 6.0 & JSP 3.1 with JSTL | Server-side rendering |
| UI Framework | Bootstrap 5, jQuery, DataTables, Chart.js | Responsive UI & data visualization |
| Security | jBCrypt | Adaptive password hashing |
| Build Tool | Apache Maven 3.9+ | Dependency & build management |
| App Server | GlassFish 7 | Jakarta EE 10 runtime |
| Proxy | Nginx | Reverse proxy & SSL termination |
| CDN/Security | Cloudflare | WAF, DDoS protection & caching |
The repository includes a MySQL 8 schema and a GlassFish 7 image configured with
the macna_jdbc_v2 JTA datasource expected by persistence.xml.
docker compose up --build -dAfter both containers are healthy, open
http://localhost:8080/banking-system/. The seeded development administrator is
mac / password123A!.
To stop the application, run docker compose down. To also delete the local
database and recreate the schema on the next start, run
docker compose down -v.
The GitHub Actions workflow in .github/workflows/ci-cd.yml runs the Java 17
test suite for pull requests. Pushes to main additionally build the
linux/amd64 container with reusable BuildKit caching, publish it to Heroku,
release it, and smoke-test the login page.
Configure these GitHub Actions secrets before enabling production deployment:
HEROKU_API_KEYHEROKU_APP_NAME
The Heroku app requires a JawsDB attachment that exposes JAWSDB_URL. At boot,
the container binds GlassFish to Heroku's dynamic PORT, configures the JTA
pool from JAWSDB_URL, and applies the idempotent MySQL schema.
Before you begin, ensure you have the following installed:
- β Java Development Kit (JDK) 17 or higher
- π§ Apache Maven 3.9+
- ποΈ MySQL 8.0+
- π GlassFish 7.0 Application Server
-
Clone the Repository
git clone https://github.com/isharax9/nawwa-banking-system.git cd nawwa-banking-system -
Configure MySQL Database
CREATE DATABASE nawwa_banking; CREATE USER 'banking_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON nawwa_banking.* TO 'banking_user'@'localhost'; FLUSH PRIVILEGES;
-
Update Database Configuration
Configure your database connection in the persistence configuration file.
-
Build the Project
mvn clean install
-
Deploy to GlassFish
Deploy the generated EAR file from
ear/target/to your GlassFish server. -
Access the Application
Navigate to:
http://localhost:8080/nawwa-banking/
For testing administrative features:
- Username:
mac - Password:
password123A!
β οΈ Important: Change default credentials immediately in production!
The foundational library containing:
- ποΈ JPA Entities (User, Customer, Account, Transaction)
- π¦ Data Transfer Objects (DTOs)
- π Mappers for entity-DTO conversion
β οΈ Custom exception hierarchy
- π User authentication and registration
- π Password management with BCrypt
- β Authorization and role management
- π₯ User lifecycle operations
- π€ Customer profile management
- π¦ Account CRUD operations
- π Account activation/deactivation
- π Account type management
- πΈ Fund transfers (atomic operations)
- π° Payments and deposits
- π Transaction history
- π₯ PDF statement generation
Automated background operations:
- π Interest Calculation - Daily interest for savings accounts
- β° Scheduled Transfers - Execute scheduled fund movements
- π Daily Reports - Generate system summary reports
- π§Ή Maintenance Tasks - Weekly data archival and cleanup
- π Servlet-based controllers
- π¨ JSP views with JSTL
- π± Responsive Bootstrap UI
- π Interactive dashboards with Chart.js
%%{init: {'theme': 'dark'}}%%
sequenceDiagram
actor User
participant Browser
participant RegisterServlet
participant UserManagementService
participant Database
User->>Browser: Fill registration form
Browser->>RegisterServlet: POST /register
RegisterServlet->>RegisterServlet: Validate input
RegisterServlet->>UserManagementService: register(userData)
UserManagementService->>Database: Check username/email uniqueness
Database-->>UserManagementService: Validation result
alt Credentials unique
UserManagementService->>UserManagementService: Hash password (BCrypt)
UserManagementService->>Database: Create User entity
UserManagementService->>Database: Create Customer entity
Database-->>UserManagementService: Success
UserManagementService-->>RegisterServlet: Registration complete
RegisterServlet-->>Browser: Redirect to login (success)
else Credentials exist
UserManagementService-->>RegisterServlet: Throw exception
RegisterServlet-->>Browser: Show error message
end
Browser-->>User: Display result
%%{init: {'theme': 'dark'}}%%
sequenceDiagram
actor Customer
participant Browser
participant TransferServlet
participant TransactionManager
participant FundTransferService
participant ScheduledTransferService
participant Database
Customer->>Browser: Navigate to Transfer Funds
Browser->>TransferServlet: GET /transfer
TransferServlet->>Database: Fetch customer accounts
Database-->>TransferServlet: Account list
TransferServlet-->>Browser: Display transfer form
Customer->>Browser: Fill transfer details
Browser->>TransferServlet: POST /transfer
TransferServlet->>TransferServlet: Validate input
alt Immediate Transfer
TransferServlet->>TransactionManager: transferFunds()
TransactionManager->>FundTransferService: execute transfer
FundTransferService->>Database: BEGIN TRANSACTION
FundTransferService->>Database: Debit source account
FundTransferService->>Database: Credit destination account
FundTransferService->>Database: Create transaction records
FundTransferService->>Database: COMMIT
Database-->>FundTransferService: Success
FundTransferService-->>TransactionManager: Transfer complete
TransactionManager-->>TransferServlet: Success
else Scheduled Transfer
TransferServlet->>ScheduledTransferService: create scheduled transfer
ScheduledTransferService->>Database: Save ScheduledTransfer entity
Database-->>ScheduledTransferService: Success
ScheduledTransferService-->>TransferServlet: Scheduled
end
TransferServlet-->>Browser: Redirect to dashboard (success)
Browser-->>Customer: Show success message
%%{init: {'theme': 'dark'}}%%
sequenceDiagram
participant TimerService
participant InterestCalculationService
participant Database
participant Account
Note over TimerService: Daily @ 00:00
TimerService->>InterestCalculationService: Execute scheduled task
InterestCalculationService->>Database: Fetch all savings accounts
Database-->>InterestCalculationService: Savings accounts list
loop For each eligible account
InterestCalculationService->>InterestCalculationService: Calculate interest
InterestCalculationService->>Database: Update account balance
InterestCalculationService->>Database: Create interest transaction
end
InterestCalculationService->>Database: COMMIT all changes
Database-->>InterestCalculationService: Success
InterestCalculationService-->>TimerService: Task complete
Note over TimerService: Log execution results
Clean and secure authentication interface
Comprehensive overview of accounts and recent transactions
Support for both immediate and scheduled transfers
Detailed transaction logs with color-coded amounts
Administrative interface for user management
Simple and secure fund operations
Manage customer profiles and information
Administrative control over all bank accounts
Downloadable transaction statements
Server logs showing automated timer execution
The application is deployed in a production-grade environment optimized for security, performance, and scalability.
%%{init: {'theme': 'dark'}}%%
graph TB
A[User Request] -->|HTTPS| B[Cloudflare CDN]
B -->|WAF & DDoS Protection| C[Nginx Reverse Proxy]
C -->|SSL Termination| D[GlassFish 7 Server]
D --> E[Nawwa Banking EAR]
E --> F[(MySQL 8.0)]
F -.->|Hourly Backup<br/>via Crontab| G[Amazon S3]
style B fill:#f9a825
style C fill:#00bcd4
style D fill:#4caf50
style E fill:#2196f3
style F fill:#ff9800
style G fill:#9c27b0
| Component | Technology | Purpose |
|---|---|---|
| π Application Server | GlassFish 7 on Ubuntu VPS | Jakarta EE 10 runtime environment |
| π Reverse Proxy | Nginx | SSL/TLS termination, load balancing |
| π‘οΈ CDN & Security | Cloudflare | WAF, DDoS protection, edge caching |
| πΎ Database Backup | Crontab + AWS S3 | Hourly automated backups |
| π Monitoring | GlassFish Admin Console | Server health & performance |
%%{init: {'theme': 'dark'}}%%
gitGraph
commit id: "Initial commit"
branch testing
checkout testing
commit id: "Setup testing environment"
branch feature/security
checkout feature/security
commit id: "Implement authentication"
commit id: "Add BCrypt hashing"
checkout testing
merge feature/security
branch feature/banking-services
checkout feature/banking-services
commit id: "Account management"
checkout testing
merge feature/banking-services
branch feature/timer-services
checkout feature/timer-services
commit id: "Interest calculation"
commit id: "Scheduled transfers"
checkout testing
merge feature/timer-services
checkout main
merge testing tag: "v1.0"
Branching Strategy:
main- Production-ready releasestesting- Integration and QA testingfeature/*- Individual feature development
Comprehensive documentation available at: doc.bank.nawwa.xyz
The system leverages Google Analytics for comprehensive usage insights:
- π User Engagement - Session duration, bounce rates, page views
- π― Conversion Tracking - Account creation, transaction completion rates
- π Traffic Analysis - User acquisition sources and demographics
- π± Device Analytics - Cross-platform usage patterns
Qualitative user behavior analysis through:
- π₯ Session Recordings - Anonymized user interaction playback
- π₯ Heatmaps - Click, scroll, and attention pattern visualization
- π€ Frustration Detection - Rage clicks and abandoned processes
- π― Dead Click Analysis - Non-interactive element identification
%%{init: {'theme': 'dark'}}%%
graph TD
A[User Request] --> B{Cloudflare WAF}
B -->|Threat Detected| C[Block Request]
B -->|Clean Traffic| D{Nginx SSL/TLS}
D --> E{Authentication Layer}
E -->|Invalid| F[Deny Access]
E -->|Valid| G{Authorization Check}
G -->|Unauthorized| F
G -->|Authorized| H[Business Logic]
H --> I{Transaction Validation}
I -->|Failed| J[Rollback]
I -->|Success| K[Commit]
style B fill:#B22222
style D fill:#000080
style E fill:#008000
style G fill:#FFD700
style H fill:#8A2BE2
style I fill:#696969
| Layer | Implementation | Description |
|---|---|---|
| π Network | Cloudflare WAF | DDoS protection, malicious traffic filtering |
| π Transport | Nginx SSL/TLS | End-to-end encryption with HTTPS |
| π Authentication | BCrypt Hashing | Adaptive password hashing (2^10 rounds) |
| β Authorization | Programmatic | Role-based access control (RBAC) |
| πΌ Transaction | Container-Managed | ACID compliance via EJB CMT |
| Custom Hierarchy | Automatic transaction rollback on errors | |
| π Input Validation | Server-side | Comprehensive form validation |
| π Audit Logging | EJB Interceptors | Operation tracking and monitoring |
Inactive Account Transaction Attempt
Unauthorized Access Attempt
Registration Validation Flow
Server Module Deployment
Example: Adding PDF Report Feature
Final Repository State
β
Robust & Reliable - Container-managed transactions and persistent EJB timers
β
Enterprise Security - Multi-layer security with BCrypt and programmatic authorization
β
Process Automation - Scheduled tasks reduce manual intervention by 80%
β
High Availability - Hourly database backups with S3 redundancy
β
Scalable Architecture - Multi-module design enables independent scaling
β
Data-Driven Insights - Integrated analytics for continuous improvement
This project is licensed under the MIT License.
Copyright (c) 2025 Ishara Lakshitha
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
| Platform | Link | Purpose |
|---|---|---|
| π§ Email | isharax9@gmail.com | Direct support & inquiries |
| π¬ Telegram | @mac_knight141 | Quick questions & community |
| πΌ LinkedIn | isharax9 | Professional networking |
| πΈ Instagram | @mac_knight141 | Updates & behind-the-scenes |
| π¦ Twitter | @isharax9 | Announcements & tech discussions |
| Type | Link | Description |
|---|---|---|
| π Bug Reports | GitHub Issues | Report bugs and request features |
| π¬ Discussions | GitHub Discussions | Community Q&A and ideas |
| π Documentation | Project Docs | Complete guides and references |
β Star this repository if it helped you!
Made with β€οΈ by Ishara Lakshitha β’ Β© 2025
Empowering Banking Through Technology



























