Project Structure


Structure of a Provisioned IM Instance

Every provisioned IM instance is backed by a Git repository with a standardized directory layout. PlatformManager deploys the repository to AWS or GCP and IM loads configuration from these directories at startup.

/
├── routes/          # Camel route XML definitions
├── mappers/         # Mapper XML definitions
├── filters/         # Filter XML definitions
├── connections/     # Connection definitions (JSON)
├── config/          # application.properties
├── classes/         # Custom Groovy classes
├── beans/           # Spring bean definitions
├── certs/           # SSL certificates
├── kamelets/        # Kamelet definitions
├── route-templates/ # Reusable route templates
└── resources/       # Static resources

Quick Reference

Directory

Format

Auto-loaded

Referenced by

routes

XML (<routes> wrapper)

Yes

Route ID

mappers

XML (<mappers> wrapper)

Yes

mapper= URI param

filters

XML (<filters> wrapper)

Yes

filter= URI param

connections

JSON

Yes

connection= URI param

config

Properties

Yes

Property keys

classes

Groovy

Yes

<process ref=""> bean name

beans

XML (Spring)

Yes

Bean ID

certs

PEM

Yes

Connection config

kamelets

YAML

Yes

Kamelet name

route-templates

XML

Yes

Template ID

resources

Any

No

Explicit path reference

Each directory is documented in detail on its own subpage below.

Naming Conventions

Consistent naming across all artifacts improves readability and maintainability.

Route IDs

Use kebab-case with action prefix:

Prefix

Use For

Example

import-

Inbound data loads

import-products-from-sftp

export-

Outbound data exports

export-prices-to-sftp

event-

Event-driven handlers

event-PADATALOAD_COMPLETED

Keep Pricefx event names in UPPER_CASE: event-ITEM_APPROVED_PL

Mapper Files

Pattern: [entity][ObjectType]Mapper.mapper.xml

Examples: productPMapper.mapper.xml, customerDetailsCXMapper.mapper.xml

Filter Files

Pattern: [purpose][Entity]Filter.filter.xml

Examples: truncateFlushedFilter.filter.xml, dateRangeFilter.filter.xml

Property Keys

Pattern: pfx:[routeId].[category].[name]

Examples: pfx:import-products.sftp.connection, pfx:export-prices.cron

See Naming Conventions for the complete reference.

Directory Organization Best Practices

src/main/resources/repo/
  routes/               # One XML file per logical route group
    import-products.xml
    import-customers.xml
    export-prices.xml
    event-routes.xml
  mappers/              # One mapper per object type
    productPMapper.mapper.xml
    customerCMapper.mapper.xml
  filters/              # One filter per use case
    truncateFlushedFilter.filter.xml
    dateRangeFilter.filter.xml
  connections/          # One JSON per external system
    pricefx.json
    sftp.json
  config/               # Properties and Spring config
    application.properties

Keep route files focused: one file per entity or closely related group. If a file exceeds 200 lines, consider splitting into sub-routes using direct: endpoints.