252 lines
7.7 KiB
Markdown
252 lines
7.7 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
eLink EMS (eLink Management System) is an enterprise API management platform consisting of three main applications:
|
|
- **eapim-admin**: Management console for configuration, monitoring, and statistics
|
|
- **eapim-online**: API gateway for real-time transaction processing
|
|
- **eapim-portal**: Developer portal for API consumers (Spring Boot-based)
|
|
|
|
This directory (`eapim-admin`) contains the management console, built with Spring 5.3 and a hybrid ORM approach (JPA + iBATIS).
|
|
|
|
## Build & Development Commands
|
|
|
|
### Building the Application
|
|
|
|
```bash
|
|
# Standard WAR build for Tomcat
|
|
gradle war
|
|
|
|
# Build without tests
|
|
gradle build -x test
|
|
|
|
# WebLogic deployment (uses weblogic-web.xml)
|
|
gradle build -x test -Pprofile=weblogic
|
|
|
|
# Clean and rebuild
|
|
gradle clean build
|
|
```
|
|
|
|
### Running Tests
|
|
|
|
```bash
|
|
# Run all tests
|
|
gradle test
|
|
|
|
# Run specific test class
|
|
gradle test --tests "com.example.ClassName"
|
|
```
|
|
|
|
### Development Tasks
|
|
|
|
```bash
|
|
# Assemble classes without packaging
|
|
gradle classes
|
|
|
|
# Generate QueryDSL Q-classes and other annotations
|
|
gradle compileJava
|
|
|
|
# View dependency tree
|
|
gradle dependencies
|
|
|
|
# List all available tasks
|
|
gradle tasks --all
|
|
```
|
|
|
|
## Architecture & Module Dependencies
|
|
|
|
### Multi-Module Structure
|
|
|
|
eapim-admin references modules from the sibling `eapim-online` directory via settings.gradle:
|
|
|
|
```
|
|
eapim-admin (root project)
|
|
├── elink-online-core # Core interfaces and domain models
|
|
├── elink-online-core-jpa # JPA entities and repositories
|
|
├── elink-online-transformer # Message transformation logic
|
|
├── elink-online-common # Shared utilities
|
|
├── elink-online-emsclient # EMS client communication
|
|
├── elink-portal-common # Portal shared components (JPA entities)
|
|
└── kjb-safedb # Custom encryption library
|
|
```
|
|
|
|
All module projects are located in `../eapim-online/` and `../` relative to this directory.
|
|
|
|
### Hybrid ORM Approach
|
|
|
|
This application uses **both JPA and iBATIS**:
|
|
- **JPA/Hibernate**: Modern data access via `elink-portal-common` (Spring Data repositories)
|
|
- **iBATIS**: Legacy SQL mapping for existing code (will be migrated over time)
|
|
|
|
When working with data access:
|
|
- New features should use JPA with Spring Data repositories
|
|
- Legacy iBATIS mappers are in `src/main/resources/sql/` and configured via Spring XML
|
|
|
|
### Code Generation
|
|
|
|
The build process generates:
|
|
- **QueryDSL Q-classes**: Type-safe query classes
|
|
- **Lombok**: Getters/setters/builders via annotation processing
|
|
- **MapStruct**: Object mappers between DTOs and entities
|
|
|
|
#### Dual Q-Class Generation (Gradle + Eclipse)
|
|
|
|
This project uses **both Gradle and Eclipse annotation processors**, which means Q-classes are generated in **two locations**:
|
|
|
|
1. **`build/generated/java/`** - Generated by Gradle when running `gradle compileJava` or `gradle build`
|
|
2. **`WebContent/generated/`** - Generated by Eclipse APT when building in Eclipse IDE
|
|
|
|
**This is expected behavior and intentional.** Both directories are in `.gitignore` and should NOT be committed.
|
|
|
|
#### Working with Generated Code
|
|
|
|
- **Gradle builds**: Q-classes in `build/generated/java/` are automatically on the classpath
|
|
- **Eclipse IDE**: Q-classes in `WebContent/generated/` are automatically on the classpath
|
|
- **After pulling updates**: Run `gradle compileJava` or refresh Eclipse project to regenerate Q-classes
|
|
- **IDE errors on Q-classes**: Regenerate by running `gradle clean compileJava` or Eclipse → Project → Clean
|
|
|
|
The duplication causes no issues since:
|
|
- Both tools generate identical Q-classes from the same JPA entities
|
|
- Both output directories are gitignored
|
|
- Each tool uses its own generated classes (no classpath conflicts)
|
|
|
|
## Local Development Setup
|
|
|
|
### Required Environment Variables (Tomcat)
|
|
|
|
```
|
|
-Deai.datasource.type=DEV
|
|
-Dinst.Name=apimsSvr11
|
|
-Deai.tableowner=ems
|
|
-Deai.systemmode=D
|
|
-Dfile.encoding=utf-8
|
|
-DLOGBACK_LOG_LEVEL=info
|
|
```
|
|
|
|
### Database Configuration
|
|
|
|
The application supports:
|
|
- **Oracle**: Production database
|
|
- **PostgreSQL**: Alternative production DB
|
|
- **H2**: In-memory database for tests
|
|
|
|
Database connection is configured via `eai.datasource.type` system property (DEV/STG/PROD).
|
|
|
|
### SafeDB Encryption Library
|
|
|
|
The `kjb-safedb` module provides three operational modes:
|
|
- **REAL**: Uses actual SafeDB native library
|
|
- **FAKE**: Development mode using SHA-256/AES-256 (no SafeDB installation required)
|
|
- **NONE**: Bypass encryption (for testing only)
|
|
|
|
In development, use FAKE mode if SafeDB is not installed locally.
|
|
|
|
## Key Features & Functionality
|
|
|
|
The admin console manages all aspects of the eLink platform:
|
|
|
|
| Feature | Description |
|
|
|---------|-------------|
|
|
| User Management | User accounts and authorization |
|
|
| Transaction Logs | View online/batch/bulk transaction history |
|
|
| Statistics & Dashboard | Real-time monitoring and metrics |
|
|
| Interface Management | API interface configuration |
|
|
| Layout Management | Message layout definitions |
|
|
| Transformation Rules | Message transformation logic |
|
|
| Adapter Configuration | Protocol adapters (HTTP, TCP, etc.) |
|
|
| Routing Rules | Request routing and load balancing |
|
|
| Batch Processing | Batch interface and adapter management |
|
|
| Scheduler | Quartz-based job scheduling |
|
|
|
|
## Deployment Targets
|
|
|
|
The application can be deployed to:
|
|
- **Tomcat** (default, development)
|
|
- **WebLogic 14.1.2** (production, requires `-Pprofile=weblogic`)
|
|
- **JEUS** (supported)
|
|
- **JBoss/WildFly** (supported with descriptors)
|
|
|
|
### WebLogic-Specific Build
|
|
|
|
When building for WebLogic, use the `weblogic` profile which replaces `web.xml` with `weblogic-web.xml` to address DefaultServlet issues:
|
|
|
|
```bash
|
|
gradle build -x test -Pprofile=weblogic
|
|
```
|
|
|
|
## Technology Stack
|
|
|
|
- **Java 8**: Enforced via Gradle toolchain
|
|
- **Spring Framework 5.3.27**: Core framework
|
|
- **Spring Data JPA 2.5.2**: Repository abstraction
|
|
- **Hibernate 5.4.33**: ORM implementation
|
|
- **QueryDSL 5.0.0**: Type-safe queries
|
|
- **iBATIS 2.3.4**: Legacy SQL mapping
|
|
- **Quartz 2.2.1**: Job scheduling
|
|
- **Apache POI 3.17**: Excel export functionality
|
|
- **Jackson 2.13.1**: JSON processing
|
|
- **Logback 1.2.10**: Logging framework/ㅊ
|
|
- **AWS SDK 2.20.142**: S3 integration
|
|
- **Kubernetes Client 18.0.1**: K8s management
|
|
|
|
## Project Conventions
|
|
|
|
### Package Structure
|
|
|
|
```
|
|
com.eactive.ems/
|
|
├── controller/ # Spring MVC controllers
|
|
├── service/ # Business logic
|
|
├── dao/ # iBATIS DAOs (legacy)
|
|
├── repository/ # JPA repositories (via elink-portal-common)
|
|
├── model/ # DTOs and view models
|
|
└── config/ # Spring configuration classes
|
|
```
|
|
|
|
### Spring Configuration
|
|
|
|
The application uses:
|
|
- **XML-based configuration**: Legacy Spring XML in `WebContent/WEB-INF/`
|
|
- **Java-based configuration**: Modern `@Configuration` classes
|
|
- **Component scanning**: Enabled for annotated components
|
|
|
|
### Logging
|
|
|
|
- Uses **SLF4J** with **Logback** implementation
|
|
- Log level controlled via `LOGBACK_LOG_LEVEL` system property
|
|
- All `log4j` dependencies are excluded (configurations in build.gradle)
|
|
|
|
## IDE Setup
|
|
|
|
### Eclipse
|
|
|
|
```bash
|
|
gradle eclipse
|
|
```
|
|
|
|
This generates:
|
|
- `.project` and `.classpath` files
|
|
- Eclipse WTP configuration (context path: `/monitoring`)
|
|
- UTF-8 encoding settings
|
|
- Annotation processor configuration for QueryDSL/Lombok
|
|
|
|
### IntelliJ IDEA
|
|
|
|
```bash
|
|
gradle idea
|
|
```
|
|
|
|
Alternatively, use "Import Gradle Project" directly in IntelliJ.
|
|
|
|
## Testing
|
|
|
|
Tests use:
|
|
- **JUnit 5 (Jupiter)**: Test framework
|
|
- **Spring Boot Test 2.6.15**: Integration testing utilities
|
|
- **H2 Database**: In-memory database for tests
|
|
- **Mockito**: Mocking framework (via Spring Boot Test)
|
|
|
|
Test resources are in `src/test/resources` with H2-compatible configurations.
|