12.14. Using @Initialize and @Uninitialize
Overview
In this example, assume we have a component that opens multiple connections to a database on initialization and then needs to release all those database resources when we close the Smooks instance.
public class MultiDataSourceAccessor { @ConfigParam private File dataSourceConfig; Map<String, Datasource> datasources = new HashMap<String, Datasource>(); @Initialize public void createDataSources() { // Add DS creation code here.... // Read the dataSourceConfig property to read the DS configs... } @Uninitialize public void releaseDataSources() { // Add DS release code here.... } // etc... }
When using the
@Initialize
and @Uninitialize
annotations above, the following should be noted:
- The
@Initialize
and@Uninitialize
methods must be public, zero-arg methods. - The
@ConfigParam
properties are all initialized before the first@Initialize
method is called. Therefore, you can use the@ConfigParam
component properties as input to the initialization process. - The
@Uninitialize
methods are all called in response to a call to theSmooks.close
method.