Search in sources :

Example 1 with Databases

use of org.qi4j.library.sql.common.Databases in project qi4j-sdk by Qi4j.

the class LiquibaseServiceTest method testLiquibase.

@Test
public void testLiquibase() throws SQLException, IOException, ActivationException, AssemblyException {
    final SingletonAssembler assembler = new SingletonAssembler() {

        @Override
        public void assemble(ModuleAssembly module) throws AssemblyException {
            ModuleAssembly configModule = module;
            // Create in-memory store for configurations
            new EntityTestAssembler().assemble(configModule);
            new C3P0DataSourceServiceAssembler().identifiedBy("datasource-service").withConfig(configModule, Visibility.layer).assemble(module);
            new DataSourceAssembler().withDataSourceServiceIdentity("datasource-service").identifiedBy("testds-liquibase").withCircuitBreaker().assemble(module);
            module.values(SomeValue.class);
            // Set up Liquibase service that will create the tables
            // START SNIPPET: assembly
            new LiquibaseAssembler().withConfig(configModule, Visibility.layer).assemble(module);
            // END SNIPPET: assembly
            module.forMixin(LiquibaseConfiguration.class).declareDefaults().enabled().set(true);
            module.forMixin(LiquibaseConfiguration.class).declareDefaults().changeLog().set("changelog.xml");
        }

        @Override
        public void beforeActivation(Application application) {
            application.registerActivationEventListener(new ActivationEventListener() {

                @Override
                public void onEvent(ActivationEvent event) {
                    System.out.println(event);
                }
            });
        }
    };
    Module module = assembler.module();
    // START SNIPPET: io
    // Look up the DataSource
    DataSource ds = module.findService(DataSource.class).get();
    // Instanciate Databases helper
    Databases database = new Databases(ds);
    // Assert that insertion works
    assertTrue(database.update("insert into test values ('someid', 'bar')") == 1);
    // END SNIPPET: io
    database.query("select * from test", new Databases.ResultSetVisitor() {

        @Override
        public boolean visit(ResultSet visited) throws SQLException {
            assertThat(visited.getString("id"), equalTo("someid"));
            assertThat(visited.getString("foo"), equalTo("bar"));
            return true;
        }
    });
    Function<ResultSet, SomeValue> toValue = new Function<ResultSet, SomeValue>() {

        @Override
        public SomeValue map(ResultSet resultSet) {
            ValueBuilder<SomeValue> builder = assembler.module().newValueBuilder(SomeValue.class);
            try {
                builder.prototype().id().set(resultSet.getString("id"));
                builder.prototype().foo().set(resultSet.getString("foo"));
            } catch (SQLException e) {
                throw new IllegalArgumentException("Could not convert to SomeValue", e);
            }
            return builder.newInstance();
        }
    };
    // START SNIPPET: io
    // Select rows and load them in a List
    List<SomeValue> rows = new ArrayList<SomeValue>();
    database.query("select * from test").transferTo(map(toValue, collection(rows)));
    // Transfer all rows to System.out
    Inputs.iterable(rows).transferTo(Outputs.systemOut());
// END SNIPPET: io
}
Also used : C3P0DataSourceServiceAssembler(org.qi4j.library.sql.c3p0.C3P0DataSourceServiceAssembler) DataSourceAssembler(org.qi4j.library.sql.assembly.DataSourceAssembler) SQLException(java.sql.SQLException) ArrayList(java.util.ArrayList) DataSource(javax.sql.DataSource) ModuleAssembly(org.qi4j.bootstrap.ModuleAssembly) Function(org.qi4j.functional.Function) Databases(org.qi4j.library.sql.common.Databases) SingletonAssembler(org.qi4j.bootstrap.SingletonAssembler) EntityTestAssembler(org.qi4j.test.EntityTestAssembler) ActivationEventListener(org.qi4j.api.activation.ActivationEventListener) ResultSet(java.sql.ResultSet) ActivationEvent(org.qi4j.api.activation.ActivationEvent) Module(org.qi4j.api.structure.Module) Application(org.qi4j.api.structure.Application) Test(org.junit.Test)

Example 2 with Databases

use of org.qi4j.library.sql.common.Databases in project qi4j-sdk by Qi4j.

the class DataSourceConfigurationManagerServiceTest method init.

public void init(@Service @IdentifiedBy("testds") DataSource dataSource, @Service @IdentifiedBy("testds2") ServiceReference<DataSource> dataSource2) throws SQLException, PropertyVetoException {
    Databases databases = new Databases(dataSource);
    // Insert some data and print it out
    databases.update("insert into test values ('id1','foo')");
    databases.query("select * from test").transferTo(Outputs.withReceiver(new Receiver<ResultSet, SQLException>() {

        @Override
        public void receive(ResultSet item) throws SQLException {
            System.out.println(item.getString("id"));
        }
    }));
    Databases databases2 = new Databases(dataSource2.get());
    // Insert some data and print it out
    databases2.update("insert into test values ('id2','bar')");
    databases2.query("select * from test").transferTo(Outputs.withReceiver(new Receiver<ResultSet, SQLException>() {

        @Override
        public void receive(ResultSet item) throws SQLException {
            System.out.println(item.getString("id"));
        }
    }));
    // Trip the CB
    dataSource2.metaInfo(CircuitBreaker.class).trip();
    // This should now fail
    try {
        databases2.query("select * from test").transferTo(Outputs.withReceiver(new Receiver<ResultSet, SQLException>() {

            @Override
            public void receive(ResultSet item) throws SQLException {
                System.out.println(item.getString("id"));
            }
        }));
        Assert.fail();
    } catch (Throwable e) {
    // Correct
    }
    // Turn the CB back on
    dataSource2.metaInfo(CircuitBreaker.class).turnOn();
    // This should now work
    databases2.query("select * from test").transferTo(Outputs.withReceiver(new Receiver<ResultSet, SQLException>() {

        @Override
        public void receive(ResultSet item) throws SQLException {
            System.out.println(item.getString("id"));
        }
    }));
}
Also used : CircuitBreaker(org.qi4j.library.circuitbreaker.CircuitBreaker) Databases(org.qi4j.library.sql.common.Databases) ResultSet(java.sql.ResultSet) Receiver(org.qi4j.io.Receiver)

Aggregations

ResultSet (java.sql.ResultSet)2 Databases (org.qi4j.library.sql.common.Databases)2 SQLException (java.sql.SQLException)1 ArrayList (java.util.ArrayList)1 DataSource (javax.sql.DataSource)1 Test (org.junit.Test)1 ActivationEvent (org.qi4j.api.activation.ActivationEvent)1 ActivationEventListener (org.qi4j.api.activation.ActivationEventListener)1 Application (org.qi4j.api.structure.Application)1 Module (org.qi4j.api.structure.Module)1 ModuleAssembly (org.qi4j.bootstrap.ModuleAssembly)1 SingletonAssembler (org.qi4j.bootstrap.SingletonAssembler)1 Function (org.qi4j.functional.Function)1 Receiver (org.qi4j.io.Receiver)1 CircuitBreaker (org.qi4j.library.circuitbreaker.CircuitBreaker)1 DataSourceAssembler (org.qi4j.library.sql.assembly.DataSourceAssembler)1 C3P0DataSourceServiceAssembler (org.qi4j.library.sql.c3p0.C3P0DataSourceServiceAssembler)1 EntityTestAssembler (org.qi4j.test.EntityTestAssembler)1