BOOST.ERP.Compute
The core ERP backend compute engine for the BOOST platform. Processes 150+ API methods via JMS message queues, covering sales, procurement, inventory, accounting, documents, and more. Deployed as a Kubernetes service.
Note: This project currently lives at
C:\src\BOOST.Middleware(previously named PortalMiddleware). The recommended name is BOOST.ERP.Compute.
Architecture
AMQP Broker
↓
PortalServer (extends Server from BoostMiddleware)
↓
DynamicMethodRegistrator
↓
150+ Controller Methods
↓
┌──────────┬──────────┬────────────┐
│ MySQL │ MongoDB │ ClickHouse │
│ (JOOQ) │ (Driver) │ (Analytics)│
└──────────┴──────────┴────────────┘
+ Redis (cache) + MinIO (files) + Solr (search)Request Flow
- JMS message arrives on queue
boostv3.devapi.messages PortalServer(extends BoostMiddlewareServer) routes by method name- Controller executes business logic with JOOQ database access
- Response sent via JMS reply-to queue
Prerequisites
- Java 15
- AMQP Broker (RabbitMQ / ActiveMQ)
- MySQL (primary ERP data)
- MongoDB (document storage)
- ClickHouse (analytics/reporting)
- Redis (caching)
- MinIO (S3-compatible file storage)
- Apache Solr (full-text search)
Deployment
Kubernetes with Docker:
yaml
replicas: 3
image: qasim786/portalmiddleware
port: 8080dockerfile
FROM eclipse-temurin
ENTRYPOINT java -jar PortalMiddleware-jar-with-dependencies.jarConfiguration
config.properties
properties
broker_url=amqp://172.16.200.32:5672
message_queue_name=boostv3.devapi.messages
dispatcher_queue_name=boost.dispatcher.jobs
redis_uri=redis://172.16.200.65:6379
mongodb.uri=mongodb://172.16.200.35
mqtt_host=tcp://p-s01-mqtt-01.westbahr.netDatabase Pools (HikariCP)
Multiple connection pools for different databases:
hikari-master.properties— Primary ERP databasehikari-qeeping-master.properties— Accounting databasehikari-portal-dev.properties— Portal databasehikari-inv.properties— Inventory database
API Methods
Authentication & Users
| Method | Description |
|---|---|
authenticate | Login user |
getToken | OAuth 2.0 client credentials flow |
createUser | Register new user |
whoami | Get current user info |
refreshPermissionCache | Reload RBAC permissions |
Sales
| Method | Description |
|---|---|
createSalesInvoice | Create invoice |
updateSalesInvoice | Update invoice |
getSalesInvoice | Retrieve invoice |
deleteSalesInvoice | Delete invoice |
createCustomerOrder | Create sales order |
addSalesInvoicePayment | Record payment |
findSalesInvoicesByFilter | Search invoices |
Procurement
| Method | Description |
|---|---|
createPurchaseOrder | Create PO |
updatePurchaseOrder | Update PO |
updatePurchaseOrderStatus | Change PO status |
createReceiptAdvice | Record goods receipt |
getReceiptAdvicesByPurchaseorderUUID | Get receipts for PO |
Inventory
| Method | Description |
|---|---|
createTransaction | Inventory movement |
getTransactionReasons | Transaction types |
getTransactionsBySku | History by SKU |
createArticleStockTakeTransaction | Stock count |
inventoryDoBatchAction | Batch operations |
Items & Catalog
| Method | Description |
|---|---|
createItem / getItem / updateItem / deleteItem | Item CRUD |
createArticle / getArticleById / getArticleBySKU | Article management |
findArticlesByName / findArticlesBySKU | Search |
createItemGroup / getItemGroup | Item groups |
createItemInstance / getItemInstance | Item instances |
getArticleSuppliers | Supplier links |
Accounting
| Method | Description |
|---|---|
createAccJournalEntry | Create journal entry |
getAccJournalEntry | Retrieve entry |
createAccAccountTemplate | Account templates |
Documents
| Method | Description |
|---|---|
createDocument / updateDocument / deleteDocument | Document CRUD |
createDocumentType / getDocumentTypes | Document types |
updateFile | File management |
Other
| Method | Description |
|---|---|
createShipment | Shipment tracking (Postnord) |
createFlowDiagram | Workflow diagrams |
createCatalogue | Product catalogs |
authMinio / authzMinio | MinIO file storage auth |
alivetest | Health check |
Security
- Authentication: JWT Bearer tokens + OAuth 2.0 client credentials
- Authorization: Role-based access control (RBAC) via Casbin
- Object-level: Permission objects for fine-grained access
Key Integrations
| Service | Purpose |
|---|---|
| MinIO | S3-compatible file storage |
| Apache Solr | Full-text search |
| ClickHouse | Analytics and reporting |
| Redis | Caching |
| Twilio | SMS notifications |
| Google Maps | Address validation |
| bank4j | Banking integration |
| Postnord | Shipment tracking |
| BOOST.PDFBuilder | PDF generation |
| BOOST.Dispatcher | Async job processing |
Dependencies
| Dependency | Version | Purpose |
|---|---|---|
qpid-jms-client | 2.5.0 | AMQP messaging |
jooq | 3.19.6 | Type-safe SQL / ORM |
HikariCP | 5.1.0 | Connection pooling |
mysql-connector-java | 8.3.0 | MySQL driver |
mongodb-driver | 5.0.1 | MongoDB access |
clickhouse-client | 0.7.1 | ClickHouse analytics |
solr-solrj | 9.7.0 | Solr search |
jedis | 5.1.2 | Redis client |
minio | 8.4.3 | File storage |
pdfbox | 3.0.2 | PDF handling |
twilio | 10.1.3 | SMS |
casbin | 1.78.0 | RBAC authorization |
flyway | 11.4.0 | DB migrations |
gson | 2.8.9 | JSON processing |
okhttp | 4.12.0 | HTTP client |
bouncycastle | 1.77 | Cryptography |
Project Structure
src/main/java/com/luqon/portal/middleware/
├── ServerHandler.java # Entry point (daemon)
├── PortalServer.java # Server config & method registration
├── controllers/
│ ├── SalesOrderController.java
│ ├── SalesInvoiceController.java
│ ├── PurchaseOrderController.java
│ ├── InventoryController.java
│ ├── ItemController.java
│ ├── CustomerController.java
│ ├── DocumentController.java
│ ├── AgreementController.java
│ ├── CategoryController.java
│ ├── CatalogueController.java
│ ├── FlowDiagramController.java
│ └── ...
├── models/
│ ├── BOOSTRecord.java # Base entity class
│ ├── Account.java
│ ├── JournalEntry.java
│ ├── Facility.java
│ ├── Brand.java
│ └── ...
├── auth/
│ ├── Permission.java
│ ├── Role.java
│ └── PermissionObject.java
├── jobs/
│ └── PDFJob.java
└── utils/
├── BOOSTController.java # Base controller with CRUD
├── RecordConfigLoader.java # Dynamic entity config
└── DynamicMethodRegistrator.java