the entry point (the main method) is in: org.example.country.report.CountryReportAppl for a Java Batch job the Entry point is Task I - talk to the User the job of Task I is to manage the "current run" a typical Java Batch Job will use a "config" file to pass run details this project has a Action class that handles all the config work ConfigurationManager w/ an Implementation this project also has an Action interface/implementation to handle read the DB (hold all the SQL): CountryDBReader/CountryDBReaderImpl finaly this project has an Action interface/implementation to handle write the PDF output: PDFBuilder/PDFBuildImpl we have Entity class(es) to hold set of data the SQL return 4 fields, so I need an Entity class holding 4 fields Country has these 4 fields Task I CountryReportAppl Task II Country Task III ConfigurationManager/ConfigurationManagerImpl CountryDBReader/CountryDBReaderImpl PDFBuilder/PDFBuildImpl