I'm working on a Java project in which we want to have data collection plugins that collect data to be processed by one or more data aggregation modules. The plugins will all written in-house. Say for example we have data collection plugins A, B and C and data aggegration module X. The modules A, B & C input data into tables that are different but have a few certain fields in common that X cares about. Sometimes the names of the fields are different, but as far as the algorithm is concerned they are "the same".

What's the best way to get X to operate on these different data sources while still allowing for a new data collection plugin D to be integrated, as well as the possibility of a new aggregation module Y that operates on some or all of the data sources?

My main concerns are about dependencies - for example, should the data collection plugins know about the aggregation modules, or the other way round? Or neither? Should the collection plugins implement interfaces that the aggregators can then make use of, and if so then where should be interfaces be defined?

1 Answer 1


Provide a API containing the Interfaces and the JavaDoc that the AggregationModul respects, you can add some tools, you can add some extra custom-annotations like @MustBeThredSave or @DoNotSynchronize or @Obsolete, a few simple Tools like conversation-methods or Helper are ok in the api too. Use @Documented and @Since-Annotations too, use them to let the InputModules know when a Version will support the Modul.

JSF handle this by having a jsf-impl.jar and a jsf-api.jar and it works like a charm.

Also its a good idea to use the SecurityManager in the AggregationModul and the InputModuls A,B,C (http://docs.oracle.com/javase/tutorial/security/userperm/).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.