Our application needs module entry point which will initialize all needed services. Our module will depends on ServerAppAdminModuleEntryPoint - administration module and will inherit all its dependencies. We need to register here menu, add business servicess mapping, and register database sequences for JPA entities.
public class EmpCoreModuleEntryPointImpl extends AbstractModuleEntryPoint
implements EmpCoreModuleEntryPoint {
private static LoggerMethodTracer logger = LoggerMethodTracer
.getLogger(EmpCoreModuleEntryPointImpl.class);
@Override
protected Module createModule() {
return EmpCoreModule.getInstance();
}
@SuppressWarnings("unchecked")
@Override
public <T extends ModuleEntryPoint> Class<T> getImplClassForModule(
Class<T> moduleIface) {
if (ServerAppAdminModuleEntryPoint.class.equals(moduleIface)) {
return (Class<T>) ServerAppAdminModuleEntryPointImpl.class;
}
return null;
}
@Override
public void entryPoint(AppEntryPoint appEntryPoint, Module module) {
MethodTimer method = logger.methodEntry(Level.INFO);
registerMenu(appEntryPoint, module);
registerSequences(appEntryPoint,module);
registerBusinesServices(appEntryPoint, module);
logger.methodExit(method);
}
private void registerMenu(AppEntryPoint appEntryPoint, Module module) {
MenuBarBuilder menuBarBuilder = PicoHelper.getMandatoryComponent(module.getContainer(), MenuBarBuilder.class);
menuBarBuilder.registerMenuBuilder(new EmployeesMenuDefinitionBuilder());
menuBarBuilder.registerMenuBuilder(new DepartmentsMenuDefinitionBuilder());
menuBarBuilder.registerMenuBuilder(new ProjectsMenuDefinitionBuilder());
}
private void registerBusinesServices(AppEntryPoint appEntryPoint,Module module) {
BusinessServiceCreator bsc = PicoHelper.getMandatoryComponent(module.getContainer(),BusinessServiceCreator.class);
bsc.registerMapping(DepartmentService.class,new BSImplMapping(DepartmentServiceImpl.class));
bsc.registerMapping(TaskService.class,new BSImplMapping(TaskServiceImpl.class));
bsc.registerMapping(ProjectService.class,new BSImplMapping(ProjectServiceImpl.class));
bsc.registerMapping(EmployeeService.class,new BSImplMapping(EmployeeServiceImpl.class));
}
private void registerSequences(AppEntryPoint appEntryPoint, Module module) {
JPAWrapper jpaWrapper = PicoHelper.getMandatoryComponent(module.getContainer(), JPAWrapper.class);
DatabaseInfoRegistry dbInfoRegistry = PicoHelper.getMandatoryComponent(module.getContainer(), DatabaseInfoRegistry.class);
IdGeneratorRegistry registry = module.getContainer().getComponent(IdGeneratorRegistry.class);
if(registry == null){
registry = new IdGeneratorRegistryByEntity();
ServerPersistenceModule.getInstance().getContainer().addComponent(IdGeneratorRegistry.class,registry);
IdHelper.setRegistry(registry);
}
DataSource ds = jpaWrapper.getDataSource(VPDAUnitsRefs.VPDA);
DatabaseInfo dbInfo = dbInfoRegistry.getDatabaseInfo(jpaWrapper.getDBProduct(VPDAUnitsRefs.VPDA));
String dummyTable = VPDADBSchema.Tables.dummyTable.getQualifiedName(dbInfo);
String seqName = null;
seqName = EMPDBSchema.Sequences.depSeq.getQualifiedName(dbInfo);
registry.registerIdGenerator(Department.class,new SequenceIdGenerator(ds,dbInfo,seqName,dummyTable));
seqName = EMPDBSchema.Sequences.empSeq.getQualifiedName(dbInfo);
registry.registerIdGenerator(Employee.class,new SequenceIdGenerator(ds,dbInfo,seqName,dummyTable));
seqName = EMPDBSchema.Sequences.taskSeq.getQualifiedName(dbInfo);
registry.registerIdGenerator(Task.class,new SequenceIdGenerator(ds,dbInfo,seqName,dummyTable));
seqName = EMPDBSchema.Sequences.projSeq.getQualifiedName(dbInfo);
registry.registerIdGenerator(Project.class,new SequenceIdGenerator(ds,dbInfo,seqName,dummyTable));
}
@Override
public List<Class<? extends ModuleEntryPoint>> getRequiredModuleEntryPointsClasses(
AppEntryPoint appEntryPoint) {
List<Class<? extends ModuleEntryPoint>> result = new ArrayList<Class<? extends ModuleEntryPoint>>(
2);
result.add(ServerAppAdminModuleEntryPoint.class);
return result;
}
}