Data Model: Multi-Module Project Split
Feature Branch: 001-multi-module-splitDate: 2026-02-07
Module Entities
Parent POM (Root Aggregator)
Location: /pom.xmlPackaging: pom
Attributes:
groupId:ai.wanakuartifactId:camel-integration-capability-parentversion:0.1.0-SNAPSHOTmodules:[camel-integration-capability-common, runtimes]
Responsibilities:
- Define shared properties (versions, encoding)
- Manage dependency versions via
<dependencyManagement> - Configure shared plugins via
<pluginManagement> - Aggregate all child modules
Common Module
Location: /camel-integration-capability-common/pom.xmlPackaging: jar
Attributes:
artifactId:camel-integration-capability-commonparent:camel-integration-capability-parent
Dependencies (from parent dependencyManagement):
ai.wanaku.sdk:capabilities-commonai.wanaku.sdk:capabilities-discoveryai.wanaku.sdk:capabilities-data-filesai.wanaku.sdk:capabilities-exchangeai.wanaku.sdk:capabilities-runtimeai.wanaku.sdk:capabilities-services-clientorg.apache.camel:camel-coreorg.apache.camel:camel-mainorg.apache.camel:camel-kamelet-mainorg.apache.camel:camel-directorg.apache.camel:camel-fileorg.apache.camel:camel-yaml-dslcom.fasterxml.jackson.*(YAML, databind)org.eclipse.jgit:org.eclipse.jgit
Resources:
src/main/resources/
└── cic-version.txt # Version info, accessible to all consumersPackages:
ai.wanaku.capability.camel/
├── WanakuCamelManager.java
├── downloader/
│ ├── DownloaderFactory.java
│ ├── ResourceDownloaderCallback.java
│ ├── ResourceListBuilder.java
│ ├── ResourceRefs.java
│ └── ResourceType.java
├── grpc/
│ ├── CamelResource.java
│ ├── CamelTool.java
│ └── ProvisionBase.java
├── init/
│ ├── Initializer.java
│ ├── InitializerFactory.java
│ ├── GitInitializer.java
│ └── NoOpInitializer.java
├── model/
│ └── (all model classes)
├── spec/
│ └── rules/
│ ├── RulesProcessor.java
│ ├── RulesTransformer.java
│ ├── resources/
│ │ ├── WanakuResourceRuleProcessor.java
│ │ └── WanakuResourceTransformer.java
│ └── tools/
│ ├── WanakuToolRuleProcessor.java
│ ├── WanakuToolTransformer.java
│ └── mapping/
│ └── (all mapper classes)
└── util/
├── FileUtil.java
├── GavUtil.java
├── McpRulesManager.java
├── McpRulesReader.java
├── VersionHelper.java
└── WanakuRoutesLoader.javaRuntimes Aggregator
Location: /camel-integration-capability-runtimes/pom.xmlPackaging: pom
Attributes:
artifactId:camel-integration-capability-runtimesparent:camel-integration-capability-parentmodules:[camel-integration-capability-plugin, camel-integration-capability-main]
Plugin Module
Location: /camel-integration-capability-runtimes/camel-integration-capability-plugin/pom.xmlPackaging: jar
Attributes:
artifactId:camel-integration-capability-pluginparent:camel-integration-capability-runtimes
Dependencies:
ai.wanaku:camel-integration-capability-commonorg.apache.camel:camel-api(for ContextServicePlugin interface)org.slf4j:slf4j-api
Packages:
ai.wanaku.capability.camel.plugin/
├── CamelIntegrationPlugin.java # ContextServicePlugin implementation
└── PluginConfiguration.java # Properties/env var loader
META-INF/
└── services/
└── org.apache.camel.spi.ContextServicePluginNew Class: PluginConfiguration
public class PluginConfiguration {
// Properties with environment variable override
private String registrationUrl;
private int grpcPort = 9190;
private String registrationAnnounceAddress = "auto";
private String serviceName = "camel";
private String routesRef;
private String rulesRef;
private String tokenEndpoint;
private String clientId;
private String clientSecret;
private String dependenciesRef;
private String repositoriesList;
private String dataDir = "/tmp";
private String initFrom;
// Load from properties file, then override with env vars
public static PluginConfiguration load();
// Getters for all properties
}New Class: CamelIntegrationPlugin
public class CamelIntegrationPlugin implements ContextServicePlugin {
private Server grpcServer;
private RegistrationManager registrationManager;
@Override
public void load(CamelContext camelContext) {
// 1. Load configuration from properties/env
// 2. Initialize resources (same as CamelToolMain.call())
// 3. Start gRPC server
// 4. Register with discovery service
}
@Override
public void unload(CamelContext camelContext) {
// 1. Deregister from discovery
// 2. Stop gRPC server
// 3. Cleanup resources
}
}Main Module
Location: /camel-integration-capability-runtimes/camel-integration-capability-main/pom.xmlPackaging: jar
Attributes:
artifactId:camel-integration-capability-mainparent:camel-integration-capability-runtimes
Dependencies:
ai.wanaku:camel-integration-capability-commoninfo.picocli:picocliorg.apache.logging.log4j:log4j-slf4j2-implorg.apache.logging.log4j:log4j-core
Packages:
ai.wanaku.capability.camel/
└── CamelToolMain.java # CLI entry point (existing, moved)
src/main/resources/
└── log4j2.properties # Logging configurationBuild Plugins:
maven-assembly-plugin(jar-with-dependencies)camel-maven-plugin(prepare-fatjar)
Configuration Entity
File: camel-integration-capability.properties (plugin module resource)
Schema:
# Registration
registration.url=
registration.announce.address=auto
# gRPC
grpc.port=9190
# Service Identity
service.name=camel
# Routes
routes.ref=
rules.ref=
# Authentication
token.endpoint=
client.id=
client.secret=
# Dependencies
dependencies=
repositories=
# Initialization
init.from=
data.dir=/tmpState Transitions
Plugin Lifecycle
[Unloaded] --load(ctx)--> [Initializing] --success--> [Running] --unload(ctx)--> [Stopped]
|
+--failure--> [Failed]Module Build Order
[common] --> [plugin]
--> [main]Build order enforced by Maven reactor based on dependencies.