use of org.qi4j.bootstrap.LayerAssembly in project qi4j-sdk by Qi4j.
the class ForumAssembler method assemble.
@Override
public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory) throws AssemblyException {
ApplicationAssembly assembly = applicationFactory.newApplicationAssembly();
assembly.setName("Forum");
LayerAssembly configuration = assembly.layer("Configuration");
{
ModuleAssembly configModule = configuration.module("Configuration");
configModule.entities(NeoConfiguration.class).visibleIn(Visibility.application);
configModule.services(MemoryEntityStoreService.class);
configModule.services(UuidIdentityGeneratorService.class);
new OrgJsonValueSerializationAssembler().assemble(configModule);
}
LayerAssembly infrastructure = assembly.layer("Infrastructure").uses(configuration);
{
ModuleAssembly entityStore = infrastructure.module("EntityStore");
entityStore.services(FileConfigurationService.class);
entityStore.services(NeoEntityStoreService.class).visibleIn(Visibility.application);
entityStore.services(UuidIdentityGeneratorService.class).visibleIn(Visibility.application);
new OrgJsonValueSerializationAssembler().visibleIn(Visibility.application).withValuesModuleFinder(new Function<Application, Module>() {
@Override
public Module map(Application app) {
return app.findModule("REST", "Values");
}
}).assemble(entityStore);
}
LayerAssembly data = assembly.layer("Data").uses(infrastructure);
{
ModuleAssembly forum = data.module("Forum");
for (Class<?> dataClass : filter(hasModifier(Modifier.INTERFACE), filter(isAssignableFrom(EntityComposite.class), ClassScanner.findClasses(User.class)))) {
forum.entities(dataClass).visibleIn(Visibility.application);
}
}
LayerAssembly context = assembly.layer("Context").uses(data);
{
ModuleAssembly contexts = context.module("Context");
for (Class<?> contextClass : filter(not(hasModifier(Modifier.INTERFACE)), ClassScanner.findClasses(Context.class))) {
if (contextClass.getName().contains("$")) {
contexts.transients(contextClass).visibleIn(Visibility.application);
} else {
contexts.objects(contextClass).visibleIn(Visibility.application);
}
}
for (Class<?> valueClass : filter(isAssignableFrom(ValueComposite.class), ClassScanner.findClasses(Context.class))) {
contexts.values(valueClass).visibleIn(Visibility.application);
}
contexts.services(EventsService.class);
context.module("Domain events").values(DomainEventValue.class, ParameterValue.class).visibleIn(Visibility.application);
}
LayerAssembly services = assembly.layer("Service").uses(data);
{
ModuleAssembly bootstrap = services.module("Bootstrap");
bootstrap.services(BootstrapData.class).identifiedBy("bootstrap").instantiateOnStartup();
}
LayerAssembly rest = assembly.layer("REST").uses(context, data);
{
ModuleAssembly values = rest.module("Values");
{
new ValueAssembler().assemble(values);
}
ModuleAssembly transformation = rest.module("Transformation");
{
new RestServerAssembler().assemble(transformation);
transformation.objects(RequestReaderDelegator.class, ResponseWriterDelegator.class).visibleIn(Visibility.layer);
new OrgJsonValueSerializationAssembler().assemble(transformation);
}
ModuleAssembly resources = rest.module("Resources");
for (Class<?> resourceClass : ClassScanner.findClasses(RootResource.class)) {
resources.objects(resourceClass).visibleIn(Visibility.layer);
}
ModuleAssembly restlet = rest.module("Restlet");
restlet.objects(ForumRestlet.class);
restlet.importedServices(CommandResult.class).setMetaInfo(new DomainCommandResult());
restlet.importedServices(MetadataService.class);
}
return assembly;
}
use of org.qi4j.bootstrap.LayerAssembly in project qi4j-sdk by Qi4j.
the class RentalApplicationAssembler method assemble.
@Override
public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory) throws AssemblyException {
ApplicationAssembly assembly = applicationFactory.newApplicationAssembly();
assembly.setMode(mode);
LayerAssembly webLayer = assembly.layer("WebLayer");
new PagesModule().assemble(webLayer.module("PagesModule"));
LayerAssembly domainLayer = assembly.layer("DomainLayer");
new RentalModule().assemble(domainLayer.module("RentalModule"));
LayerAssembly infraLayer = assembly.layer("InfraLayer");
new StorageModule().assemble(infraLayer.module("StorageModule"));
webLayer.uses(domainLayer);
domainLayer.uses(infraLayer);
return assembly;
}
use of org.qi4j.bootstrap.LayerAssembly in project qi4j-sdk by Qi4j.
the class AppAssembler method assemble.
@Override
public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory) throws AssemblyException {
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;
}
use of org.qi4j.bootstrap.LayerAssembly in project qi4j-sdk by Qi4j.
the class QueryPerformanceTest method assemble.
@Override
public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory) throws AssemblyException {
ApplicationAssembly applicationAssembly = applicationFactory.newApplicationAssembly();
LayerAssembly infra = createInfrastructureLayer(applicationAssembly);
LayerAssembly domain = createDomainLayer(applicationAssembly);
LayerAssembly config = createConfigurationLayer(applicationAssembly);
infra.uses(config);
domain.uses(infra);
return applicationAssembly;
}
use of org.qi4j.bootstrap.LayerAssembly in project qi4j-sdk by Qi4j.
the class QueryPerformanceTest method createInfrastructureLayer.
private LayerAssembly createInfrastructureLayer(ApplicationAssembly applicationAssembly) throws AssemblyException {
LayerAssembly infrastructureLayer = applicationAssembly.layer(LAYER_INFRASTRUCTURE);
// Persistence module
ModuleAssembly persistenceModule = infrastructureLayer.module(MODULE_PERSISTENCE);
// Indexing
new RdfNativeSesameStoreAssembler().assemble(persistenceModule);
// Entity store
new OrgJsonValueSerializationAssembler().assemble(persistenceModule);
new MemoryEntityStoreAssembler().visibleIn(Visibility.application).assemble(persistenceModule);
return infrastructureLayer;
}
Aggregations