Aggregate Enterprise Integration Pattern Extensibility: IFL
Overview
A "java" type can be specified for the Aggregate EIP, this extends aggregate to invoke simple POJO's to perform the aggregation task.
IFL
The "java" type can be specified for aggregate as follows:
With external configuration
aggregate java "myaggregate"
With inline configuration
aggregate java ("name=value,*")
Aggregator POJO
When the "java" type is specified for aggregate, a user defined POJO is plugged into the framework for aggregation.
A template POJO which implements the Aggregate EIP extension interface is generated in the application's space, this POJO can be updated by a developer to customize the aggregation behaviour.
The default package and class name of the generated Aggregate POJO defaults to "aggregate.{aggregateName}" and "Aggregator". In case the configuration is external, then aggregateName = externalConfigName, if it's inline then the aggregateName is a system generated name. A user can specify a classname/packagename in the configuration to override the defaults.
For example:
With external configuration
aggregate java "myaggregate"
The Aggregate POJO has :
packagename = aggregate.myaggregate
classname = Aggregator
Location of the generated source file:
src/main/java/aggregate/myaggregate/Aggregator.java
With inline configuration
aggregate java "myKey=myValue"
The Aggregate POJO has :
packagename = aggregate.aggregate${n} ( where n = 1,2,3 .. }
classname = Aggregator
Location of the generated source file:
src/main/java/aggregate/aggregate_1/Aggregator.java
Inline configuration and user defined classname
aggregate java "myKey=myValue, classname=CustomAggregate"
The Aggregate POJO has :
packagename = aggregate.aggregate${n} ( where n = 1,2,3 .. }
classname = CustomAggregate
Location of the generated source file:
src/main/java/aggregate/aggregate_1/CustomAggregate.java
Inline configuration and user defined packagename
aggregate java "myKey=myValue, packagename=com.mycompany"
The Aggregate POJO has :
packagename = com.mycompany
classname = Aggregator
Location of the generated source file:
src/main/java/com/mycompany/Aggregator.java
Inline configuration and user defined classname and packagename
aggregate java "myKey=myValue, packagename=com.mycompany, classname=CustomAggregate"
The Aggregate POJO has :
packagename = com.mycompany
classname = CustomAggregate
Location of the generated source file:
src/main/java/com/mycompany/CustomAggregate.java