{
ApplicationAssembly appAss = applicationFactory.newApplicationAssembly();
appAss.setName( "SQL Support Sample" );
// Config
LayerAssembly configLayer = appAss.layer( "config" );
ModuleAssembly configModule = configLayer.module( "config" );
{
configModule.services( OrgJsonValueSerializationService.class ).
taggedWith( ValueSerialization.Formats.JSON );
configModule.services( MemoryEntityStoreService.class ).
visibleIn( Visibility.module );
// Use a PreferenceEntityStore instead if you want the configuration to be persistent
// new PreferenceEntityStoreAssembler( Visibility.module ).assemble( configModule );
}
// Infra
LayerAssembly infraLayer = appAss.layer( "infra" );
ModuleAssembly persistenceModule = infraLayer.module( "persistence" );
{
persistenceModule.services( OrgJsonValueSerializationService.class ).
taggedWith( ValueSerialization.Formats.JSON );
// SQL DataSource Service
String dataSourceServiceIdentity = "postgresql-datasource-service";
new DBCPDataSourceServiceAssembler().
identifiedBy( dataSourceServiceIdentity ).
visibleIn( Visibility.module ).
withConfig( configModule, Visibility.application ).
assemble( persistenceModule );
// SQL EntityStore DataSource and Service
new DataSourceAssembler().
withDataSourceServiceIdentity( dataSourceServiceIdentity ).
identifiedBy( "postgresql-es-datasource" ).
visibleIn( Visibility.module ).
withCircuitBreaker( DataSources.newDataSourceCircuitBreaker() ).assemble( persistenceModule );
new PostgreSQLEntityStoreAssembler().
visibleIn( Visibility.application ).
withConfig( configModule, Visibility.application ).
assemble( persistenceModule );
// SQL Index/Query DataSource and Service
new DataSourceAssembler().
withDataSourceServiceIdentity( dataSourceServiceIdentity ).
identifiedBy( "postgresql-index-datasource" ).
visibleIn( Visibility.module ).
withCircuitBreaker().
assemble( persistenceModule );
new PostgreSQLIndexQueryAssembler().
visibleIn( Visibility.application ).
withConfig( configModule, Visibility.application ).
assemble( persistenceModule );
}
// App
LayerAssembly appLayer = appAss.layer( "app" );
ModuleAssembly domainModule = appLayer.module( "domain" );
{
domainModule.entities( PretextEntity.class );
}
// Uses
infraLayer.uses( configLayer );
appLayer.uses( infraLayer );
return appAss;
}