Search in sources :

Example 21 with Module

use of org.qi4j.api.structure.Module in project qi4j-sdk by Qi4j.

the class ApplicationBuilderTest method givenJsonWhenBuildingApplicationExpectSuccess.

@Test
public void givenJsonWhenBuildingApplicationExpectSuccess() throws JSONException, ActivationException, AssemblyException {
    ApplicationBuilder builder = ApplicationBuilder.fromJson(APPLICATION);
    Application application = builder.newApplication();
    Module module = application.findModule("layer3", "test module");
    TestService service = module.findService(TestService.class).get();
    assertThat(service.sayHello(), equalTo("Hello Qi4j!"));
}
Also used : Module(org.qi4j.api.structure.Module) Application(org.qi4j.api.structure.Application) Test(org.junit.Test)

Example 22 with Module

use of org.qi4j.api.structure.Module in project qi4j-sdk by Qi4j.

the class PassivationExceptionTest method testPassivationExceptionsAccrossStructure.

@Test
public void testPassivationExceptionsAccrossStructure() throws AssemblyException, ActivationException {
    ApplicationBuilder appBuilder = new ApplicationBuilder("TestApplication");
    appBuilder.withLayer("Layer 1").withModule("Module A").withAssembler(new Assembler() {

        @Override
        public void assemble(ModuleAssembly module) throws AssemblyException {
            module.services(TestService.class).identifiedBy("TestService_Module.A").withActivators(FailBeforePassivationServiceActivator.class).instantiateOnStartup();
        }
    });
    appBuilder.withLayer("Layer 2").withModule("Module B").withAssembler(new Assembler() {

        @Override
        public void assemble(ModuleAssembly module) throws AssemblyException {
            module.services(TestService.class).identifiedBy("TestService_Module.B").withActivators(FailAfterPassivationServiceActivator.class).instantiateOnStartup();
        }
    });
    appBuilder.registerActivationEventListener(new TestActivationEventListener());
    Application app = appBuilder.newApplication();
    try {
        Module moduleA = app.findModule("Layer 1", "Module A");
        TestService service = moduleA.findService(TestService.class).get();
        assertThat(service.hello(), equalTo("Hello Qi4j!"));
    } finally {
        try {
            app.passivate();
            fail("No PassivationException");
        } catch (PassivationException ex) {
            ex.printStackTrace();
            String stack = stack(ex);
            assertThat(ex.getMessage(), containsString("has 12 cause(s)"));
            assertThat(stack, containsString("EVENT: FAIL BEFORE PASSIVATION for TestApplication"));
            assertThat(stack, containsString("EVENT: FAIL BEFORE PASSIVATION for Layer 2"));
            assertThat(stack, containsString("EVENT: FAIL BEFORE PASSIVATION for Module B"));
            assertThat(stack, containsString("ACTIVATOR: FAIL AFTER PASSIVATION for TestService_Module.B(active=false,module='Module B')"));
            assertThat(stack, containsString("EVENT: FAIL AFTER PASSIVATION for Module B"));
            assertThat(stack, containsString("EVENT: FAIL AFTER PASSIVATION for Layer 2"));
            assertThat(stack, containsString("EVENT: FAIL BEFORE PASSIVATION for Layer 1"));
            assertThat(stack, containsString("EVENT: FAIL BEFORE PASSIVATION for Module A"));
            assertThat(stack, containsString("ACTIVATOR: FAIL BEFORE PASSIVATION for TestService_Module.A(active=true,module='Module A')"));
            assertThat(stack, containsString("EVENT: FAIL AFTER PASSIVATION for Module A"));
            assertThat(stack, containsString("EVENT: FAIL AFTER PASSIVATION for Layer 1"));
            assertThat(stack, containsString("EVENT: FAIL AFTER PASSIVATION for TestApplication"));
        }
    }
}
Also used : ApplicationBuilder(org.qi4j.bootstrap.builder.ApplicationBuilder) ModuleAssembly(org.qi4j.bootstrap.ModuleAssembly) AssemblyException(org.qi4j.bootstrap.AssemblyException) Assembler(org.qi4j.bootstrap.Assembler) StringContains.containsString(org.hamcrest.core.StringContains.containsString) Module(org.qi4j.api.structure.Module) Application(org.qi4j.api.structure.Application) Test(org.junit.Test)

Example 23 with Module

use of org.qi4j.api.structure.Module in project qi4j-sdk by Qi4j.

the class DocumentationSupport method assembledWithValuesModuleSerialization.

// END SNIPPET: io
@Test
public // TODO Include in each ValueSerialization extensions documentation
void assembledWithValuesModuleSerialization() throws Exception {
    Application app = new Energy4Java().newApplication(new ApplicationAssembler() {

        @Override
        public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory) throws AssemblyException {
            Assembler[][][] pancakes = new Assembler[][][] { { { new Assembler() {

                @Override
                public void assemble(ModuleAssembly valuesModule) throws AssemblyException {
                    valuesModule.layer().setName("SINGLE-Layer");
                    valuesModule.setName("VALUES-Module");
                    valuesModule.values(SomeValue.class);
                }
            } }, { new Assembler() {

                @Override
                public void assemble(ModuleAssembly servicesModule) throws AssemblyException {
                    servicesModule.setName("SERVICES-Module");
                    Function<Application, Module> valuesModuleFinder = new Function<Application, Module>() {

                        @Override
                        public Module map(Application app) {
                            return app.findModule("SINGLE-Layer", "VALUES-Module");
                        }
                    };
                    new OrgJsonValueSerializationAssembler().withValuesModuleFinder(valuesModuleFinder).assemble(servicesModule);
                }
            } } } };
            return applicationFactory.newApplicationAssembly(pancakes);
        }
    });
    app.activate();
    try {
        Module valuesModule = app.findModule("SINGLE-Layer", "VALUES-Module");
        SomeValue someValue = someNewValueInstance(valuesModule);
        Module servicesModule = app.findModule("SINGLE-Layer", "SERVICES-Module");
        ValueSerialization valueSerialization = servicesModule.findService(ValueSerialization.class).get();
        String json = valueSerialization.serialize(someValue);
        assertThat(json, equalTo("{\"foo\":\"bar\"}"));
        SomeValue someNewValue = valueSerialization.deserialize(SomeValue.class, json);
        assertThat(someNewValue, equalTo(someValue));
    } finally {
        app.passivate();
    }
}
Also used : ApplicationAssemblyFactory(org.qi4j.bootstrap.ApplicationAssemblyFactory) ApplicationAssembly(org.qi4j.bootstrap.ApplicationAssembly) AssemblyException(org.qi4j.bootstrap.AssemblyException) ModuleAssembly(org.qi4j.bootstrap.ModuleAssembly) Function(org.qi4j.functional.Function) ApplicationAssembler(org.qi4j.bootstrap.ApplicationAssembler) Energy4Java(org.qi4j.bootstrap.Energy4Java) Assembler(org.qi4j.bootstrap.Assembler) OrgJsonValueSerializationAssembler(org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler) ApplicationAssembler(org.qi4j.bootstrap.ApplicationAssembler) Module(org.qi4j.api.structure.Module) Application(org.qi4j.api.structure.Application) OrgJsonValueSerializationAssembler(org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler) AbstractQi4jTest(org.qi4j.test.AbstractQi4jTest) Test(org.junit.Test)

Example 24 with Module

use of org.qi4j.api.structure.Module in project qi4j-sdk by Qi4j.

the class ActivationEventsTest method testSingleModuleSingleLazyService.

@Test
public void testSingleModuleSingleLazyService() throws Exception {
    final List<ActivationEvent> events = new ArrayList<ActivationEvent>();
    SingletonAssembler assembler = new SingletonAssembler() {

        @Override
        public void assemble(ModuleAssembly module) throws AssemblyException {
            module.services(TestServiceComposite.class);
        }

        @Override
        protected void beforeActivation(Application application) {
            application.registerActivationEventListener(new EventsRecorder(events));
        }
    };
    Application application = assembler.application();
    application.passivate();
    Iterator<ActivationEvent> it = events.iterator();
    // Activation
    assertEvent(it.next(), ACTIVATING, "Application");
    assertEvent(it.next(), ACTIVATING, "Layer");
    assertEvent(it.next(), ACTIVATING, "Module");
    // Lazy Service NOT activated
    assertEvent(it.next(), ACTIVATED, "Module");
    assertEvent(it.next(), ACTIVATED, "Layer");
    assertEvent(it.next(), ACTIVATED, "Application");
    // Passivation
    assertEvent(it.next(), PASSIVATING, "Application");
    assertEvent(it.next(), PASSIVATING, "Layer");
    assertEvent(it.next(), PASSIVATING, "Module");
    // Lazy Service NOT passivated
    assertEvent(it.next(), PASSIVATED, "Module");
    assertEvent(it.next(), PASSIVATED, "Layer");
    assertEvent(it.next(), PASSIVATED, "Application");
    assertFalse(it.hasNext());
    events.clear();
    application.activate();
    Module module = assembler.module();
    module.findService(TestService.class).get().test();
    application.passivate();
    for (ActivationEvent event : events) {
        System.out.println(event);
    }
    it = events.iterator();
    // Activation
    assertEvent(it.next(), ACTIVATING, "Application");
    assertEvent(it.next(), ACTIVATING, "Layer");
    assertEvent(it.next(), ACTIVATING, "Module");
    assertEvent(it.next(), ACTIVATED, "Module");
    assertEvent(it.next(), ACTIVATED, "Layer");
    assertEvent(it.next(), ACTIVATED, "Application");
    // Lazy Service Activation
    assertEvent(it.next(), ACTIVATING, "TestService");
    assertEvent(it.next(), ACTIVATED, "TestService");
    // Passivation
    assertEvent(it.next(), PASSIVATING, "Application");
    assertEvent(it.next(), PASSIVATING, "Layer");
    assertEvent(it.next(), PASSIVATING, "Module");
    assertEvent(it.next(), PASSIVATING, "TestService");
    assertEvent(it.next(), PASSIVATED, "TestService");
    assertEvent(it.next(), PASSIVATED, "Module");
    assertEvent(it.next(), PASSIVATED, "Layer");
    assertEvent(it.next(), PASSIVATED, "Application");
    assertFalse(it.hasNext());
}
Also used : ModuleAssembly(org.qi4j.bootstrap.ModuleAssembly) SingletonAssembler(org.qi4j.bootstrap.SingletonAssembler) ArrayList(java.util.ArrayList) Module(org.qi4j.api.structure.Module) Application(org.qi4j.api.structure.Application) Test(org.junit.Test)

Example 25 with Module

use of org.qi4j.api.structure.Module in project qi4j-sdk by Qi4j.

the class TypeToCompositeLookupTest method transients.

@Test
public void transients() throws ActivationException, AssemblyException {
    Module module = new SingletonAssembler() {

        @Override
        public void assemble(ModuleAssembly module) throws AssemblyException {
            module.transients(SomeOtherFoo.class);
        }
    }.module();
    assertEquals(CATHEDRAL, module.newTransientBuilder(SomeOtherFoo.class).newInstance().bar());
    assertEquals(CATHEDRAL, module.newTransientBuilder(BasicFoo.class).newInstance().bar());
    assertEquals(CATHEDRAL, module.newTransientBuilder(Foo.class).newInstance().bar());
}
Also used : ModuleAssembly(org.qi4j.bootstrap.ModuleAssembly) AssemblyException(org.qi4j.bootstrap.AssemblyException) SingletonAssembler(org.qi4j.bootstrap.SingletonAssembler) Module(org.qi4j.api.structure.Module) Test(org.junit.Test)

Aggregations

Module (org.qi4j.api.structure.Module)41 Test (org.junit.Test)28 ModuleAssembly (org.qi4j.bootstrap.ModuleAssembly)18 Application (org.qi4j.api.structure.Application)17 AssemblyException (org.qi4j.bootstrap.AssemblyException)16 SingletonAssembler (org.qi4j.bootstrap.SingletonAssembler)15 ArrayList (java.util.ArrayList)6 Energy4Java (org.qi4j.bootstrap.Energy4Java)6 UnitOfWork (org.qi4j.api.unitofwork.UnitOfWork)5 UnitOfWorkFactory (org.qi4j.api.unitofwork.UnitOfWorkFactory)5 AmbiguousTypeException (org.qi4j.api.composite.AmbiguousTypeException)4 EntityDescriptor (org.qi4j.api.entity.EntityDescriptor)4 EntityTypeNotFoundException (org.qi4j.api.unitofwork.EntityTypeNotFoundException)4 Assembler (org.qi4j.bootstrap.Assembler)4 HashMap (java.util.HashMap)3 List (java.util.List)3 JSONException (org.json.JSONException)3 JSONObject (org.json.JSONObject)3 JSONTokener (org.json.JSONTokener)3 AssociationDescriptor (org.qi4j.api.association.AssociationDescriptor)3