Skip to content

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

  1. JMS message arrives on queue boostv3.devapi.messages
  2. PortalServer (extends BoostMiddleware Server) routes by method name
  3. Controller executes business logic with JOOQ database access
  4. 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: 8080
dockerfile
FROM eclipse-temurin
ENTRYPOINT java -jar PortalMiddleware-jar-with-dependencies.jar

Configuration

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.net

Database Pools (HikariCP)

Multiple connection pools for different databases:

  • hikari-master.properties — Primary ERP database
  • hikari-qeeping-master.properties — Accounting database
  • hikari-portal-dev.properties — Portal database
  • hikari-inv.properties — Inventory database

API Methods

Authentication & Users

MethodDescription
authenticateLogin user
getTokenOAuth 2.0 client credentials flow
createUserRegister new user
whoamiGet current user info
refreshPermissionCacheReload RBAC permissions

Sales

MethodDescription
createSalesInvoiceCreate invoice
updateSalesInvoiceUpdate invoice
getSalesInvoiceRetrieve invoice
deleteSalesInvoiceDelete invoice
createCustomerOrderCreate sales order
addSalesInvoicePaymentRecord payment
findSalesInvoicesByFilterSearch invoices

Procurement

MethodDescription
createPurchaseOrderCreate PO
updatePurchaseOrderUpdate PO
updatePurchaseOrderStatusChange PO status
createReceiptAdviceRecord goods receipt
getReceiptAdvicesByPurchaseorderUUIDGet receipts for PO

Inventory

MethodDescription
createTransactionInventory movement
getTransactionReasonsTransaction types
getTransactionsBySkuHistory by SKU
createArticleStockTakeTransactionStock count
inventoryDoBatchActionBatch operations

Items & Catalog

MethodDescription
createItem / getItem / updateItem / deleteItemItem CRUD
createArticle / getArticleById / getArticleBySKUArticle management
findArticlesByName / findArticlesBySKUSearch
createItemGroup / getItemGroupItem groups
createItemInstance / getItemInstanceItem instances
getArticleSuppliersSupplier links

Accounting

MethodDescription
createAccJournalEntryCreate journal entry
getAccJournalEntryRetrieve entry
createAccAccountTemplateAccount templates

Documents

MethodDescription
createDocument / updateDocument / deleteDocumentDocument CRUD
createDocumentType / getDocumentTypesDocument types
updateFileFile management

Other

MethodDescription
createShipmentShipment tracking (Postnord)
createFlowDiagramWorkflow diagrams
createCatalogueProduct catalogs
authMinio / authzMinioMinIO file storage auth
alivetestHealth 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

ServicePurpose
MinIOS3-compatible file storage
Apache SolrFull-text search
ClickHouseAnalytics and reporting
RedisCaching
TwilioSMS notifications
Google MapsAddress validation
bank4jBanking integration
PostnordShipment tracking
BOOST.PDFBuilderPDF generation
BOOST.DispatcherAsync job processing

Dependencies

DependencyVersionPurpose
qpid-jms-client2.5.0AMQP messaging
jooq3.19.6Type-safe SQL / ORM
HikariCP5.1.0Connection pooling
mysql-connector-java8.3.0MySQL driver
mongodb-driver5.0.1MongoDB access
clickhouse-client0.7.1ClickHouse analytics
solr-solrj9.7.0Solr search
jedis5.1.2Redis client
minio8.4.3File storage
pdfbox3.0.2PDF handling
twilio10.1.3SMS
casbin1.78.0RBAC authorization
flyway11.4.0DB migrations
gson2.8.9JSON processing
okhttp4.12.0HTTP client
bouncycastle1.77Cryptography

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