{
@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" ) );
}