ADR-062: Centralized ID Management - Practical Flow
Parent: ADR-062
When It Triggers
| Triggers |
Does NOT Trigger |
create-table, create-column, create-window, create-process |
list-tables, describe-table, export |
generator plugin, generator model |
generator callout (pure Java) |
Decision Flow
Entity Type from table name or --entity-type flag
│
┌────┴────┐
│ │
U/D XX/YY/ZZ
(System) (Custom)
│ │
▼ ▼
LOCAL Centralized config?
│ ┌────┴────┐
│ Yes No
│ │ │
│ ▼ ▼
│ CENTRALIZED --local-ids?
│ ┌────┴────┐
│ Yes No
│ │ │
│ ▼ ▼
│ LOCAL ERROR
│ (warn)
▼
Done
Quick Reference
| Scenario |
Entity |
Mode |
Command |
| Core iDempiere |
U, D |
Local |
create-table C_Order |
| Plugin dev (test) |
XX |
Local |
create-table XX_Test --local-ids |
| Plugin prod |
XX |
Centralized |
create-table XX_Plugin (with config) |
| CI/CD |
Any |
Local |
CENTRALIZED_ID_MODE=local |
Configuration
# Production (one-time setup in ~/.bashrc)
export CENTRALIZED_ID_SERVER_URL=https://developer.idempiere.com/cgi-bin/get_ID
export CENTRALIZED_ID_USER=your_github_username
export CENTRALIZED_ID_PASSWORD=your_password
export CENTRALIZED_ID_PROJECT=Adempiere
# Development override
idempiere-hub registry create-table XX_Test --local-ids
Key Takeaways
- System types (U, D): Just work, no config needed
- Custom types (XX, YY, ZZ): Require centralized server or
--local-ids
- MCP/Chat API: Configure env vars once at startup
- CI/CD: Use
CENTRALIZED_ID_MODE=local
- Production: Always centralized for custom entities