Apache Commons DBCP Provider
The org.mybatis.guice.datasource.dbcp package contains Google Guice providers for Apache Commons DBCP Data Source implementations.
for Apache Maven users the Apache Commons DBCP dependency is not transitive, so they have to take care about including it in their applications.
Basic Data Source Provider
The org.mybatis.guice.datasource.dbcp.BasicDataSourceProvider is the provider that builds the org.apache.commons.dbcp2.BasicDataSource and helps users to configure it.
The table below contains all of the available properties for the Provider; for more details please consult the Official reference.
| Property | Required | Bind to Java Type |
|---|---|---|
| JDBC.driver | true | java.lang.String |
| JDBC.url | true | java.lang.String |
| JDBC.username | true | java.lang.String |
| JDBC.password | true | java.lang.String |
| JDBC.autoCommit | false | boolean |
| JDBC.driverProperties | false | java.util.Properties |
| DBCP.accessToUnderlyingConnectionAllowed | false | boolean |
| DBCP.defaultCatalog | false | java.lang.String |
| DBCP.defaultReadOnly | false | boolean |
| DBCP.defaultTransactionIsolation | false | int |
| DBCP.initialSize | false | int |
| DBCP.maxActive | false | int |
| DBCP.maxIdle | false | int |
| DBCP.maxOpenPreparedStatements | false | int |
| DBCP.maxWait | false | long |
| DBCP.minEvictableIdleTimeMillis | false | long |
| DBCP.minIdle | false | int |
| DBCP.numTestsPerEvictionRun | false | int |
| DBCP.poolPreparedStatements | false | boolean |
| DBCP.testOnBorrow | false | boolean |
| DBCP.testOnReturn | false | boolean |
| DBCP.testWhileIdle | false | boolean |
| DBCP.validationQuery | false | java.lang.String |
Shared Pool Data Source
The org.mybatis.guice.datasource.dbcp.SharedPoolDataSourceProvider is the provider that builds the org.apache.commons.dbcp2.datasources.SharedPoolDataSource and helps users to configure it.
Warning this provider requires a javax.sql.ConnectionPoolDataSource existing binding in order to be instantiated.
The table below contains all of the available properties for the Provider:
| Property | Required | Bind to Java Type |
|---|---|---|
| JDBC.autoCommit | false | boolean |
| JDBC.loginTimeout | false | int |
| DBCP.defaultReadOnly | false | boolean |
| DBCP.defaultTransactionIsolation | false | int |
| DBCP.maxActive | false | int |
| DBCP.maxIdle | false | int |
| DBCP.maxWait | false | int |
| DBCP.minEvictableIdleTimeMillis | false | int |
| DBCP.numTestsPerEvictionRun | false | int |
| DBCP.testOnBorrow | false | boolean |
| DBCP.testOnReturn | false | boolean |
| DBCP.testWhileIdle | false | boolean |
| DBCP.validationQuery | false | java.lang.String |
| DBCP.name | false | java.lang.String |
| DBCP.jndi.key | false | java.lang.String |
| DBCP.jndi.value | false | java.lang.String |
| DBCP.rollbackAfterValidation | false | boolean |
| DBCP.timeBetweenEvictionRunsMillis | false | int |
| DBCP.description | false | java.lang.String |
Per User Pool Data Source
The org.mybatis.guice.datasource.dbcp.PerUserPoolDataSourceProvider is the provider that builds the org.apache.commons.dbcp2.datasources.PerUserPoolDataSource and helps users to configure it.
Warning this provider requires a javax.sql.ConnectionPoolDataSource existing binding in order to be instantiated.
The table below contains all of the available properties for the Provider:
| Property | Required | Bind to Java Type |
|---|---|---|
| JDBC.autoCommit | false | boolean |
| JDBC.loginTimeout | false | int |
| DBCP.defaultReadOnly | false | boolean |
| DBCP.defaultTransactionIsolation | false | int |
| DBCP.minEvictableIdleTimeMillis | false | int |
| DBCP.numTestsPerEvictionRun | false | int |
| DBCP.testOnBorrow | false | boolean |
| DBCP.testOnReturn | false | boolean |
| DBCP.testWhileIdle | false | boolean |
| DBCP.validationQuery | false | java.lang.String |
| DBCP.name | false | java.lang.String |
| DBCP.jndi.key | false | java.lang.String |
| DBCP.jndi.value | false | java.lang.String |
| DBCP.rollbackAfterValidation | false | boolean |
| DBCP.timeBetweenEvictionRunsMillis | false | int |
| DBCP.maxActive | false | int |
| DBCP.maxIdle | false | int |
| DBCP.maxWait | false | int |
| DBCP.description | false | java.lang.String |
Since all these settings can't be easily covered using jakarta.inject.Named annotations, and we don't want to put a limit on how users can retrieve these informations, the library provides the org.mybatis.guice.datasource.dbcp.PerUserPoolDataSourceModule module that alleviates the task of binding per users properties.
So, developers have to write their own com.google.inject.Provider for mapped properties and binding them through the module; keep in mind that every provider is optional so, if not specified, properties won't be set.
Let's take a look at an example that shows how to set the perUserDefaultAutoCommit properties; first of all, let's implement the provider that communicates the user bindings:
import jakarta.inject.Provider;
import jakarta.inject.Named;
class MyPerUserDefaultAutoCommit implements Provider<Map<String, Boolean>> {
private final Map<String, Boolean> perUserDefaultAutoCommitMap;
public MyPerUserDefaultAutoCommit(
@Named("perUserDefaultAutoCommit.url") URL url) {
// reads the URL and populate a map
}
public Map<String, Boolean> get() {
return this.perUserDefaultAutoCommitMap;
}
}
then, create the org.mybatis.guice.datasource.dbcp.PerUserPoolDataSourceModule and create the context:
import org.mybatis.guice.core.SqlSessionFactoryModule;
import org.mybatis.guice.datasource.dbcp.PerUserPoolDataSourceModule;
import org.mybatis.guice.datasource.dbcp.PerUserPoolDataSourceProvider;
Injector injector = Guice.createInjector(
new MyBatisModule(PerUserPoolDataSourceProvider.class),
new PerUserPoolDataSourceModule.Builder()
.setPerUserDefaultAutoCommitProviderClass(
MyPerUserDefaultAutoCommit.class).create();
);
That's all :)
Warning it's strongly reccommended to use the same org.mybatis.guice.datasource.dbcp.PerUserPoolDataSourceModule instance to set also the other per user bindings, resumed in the following table
| Provider Type | to bind |
|---|---|
| Map<String, Boolean> | perUserDefaultAutoCommit |
| Map<String, Boolean> | perUserDefaultReadOnly |
| Map<String, Integer> | perUserDefaultTransactionIsolation |
| Map<String, Integer> | perUserMaxActive |
| Map<String, Integer> | perUserMaxIdle |
| Map<String, Integer> | perUserMaxWait |
Connection Pool Data Source driver adapter
The org.mybatis.guice.datasource.dbcp.DriverAdapterCPDSProvider provides the org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS adapter for jdbc drivers that do not include an implementation of javax.sql.ConnectionPoolDataSource.
The table below contains all of the available properties for the Provider:
| Property | Required | Bind to Java Type |
|---|---|---|
| JDBC.driver | true | java.lang.String |
| JDBC.url | true | java.lang.String |
| JDBC.username | true | java.lang.String |
| JDBC.password | true | java.lang.String |
| JDBC.loginTimeout | false | int |
| DBCP.maxActive | false | int |
| DBCP.maxIdle | false | int |
| DBCP.minEvictableIdleTimeMillis | false | int |
| DBCP.numTestsPerEvictionRun | false | int |
| DBCP.poolPreparedStatements | false | boolean |
| DBCP.timeBetweenEvictionRunsMillis | false | int |
| DBCP.maxOpenPreparedStatements | false | int |
| DBCP.description | false | java.lang.String |
MyBatis