View Javadoc
1   /*
2    *    Copyright 2009-2023 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       https://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.mybatis.guice.datasource.dbcp;
17  
18  import jakarta.inject.Named;
19  import jakarta.inject.Provider;
20  
21  import javax.sql.ConnectionPoolDataSource;
22  import javax.sql.DataSource;
23  
24  import org.apache.commons.dbcp2.datasources.SharedPoolDataSource;
25  
26  /**
27   * Provides the Apache commons-dbcp {@code SharedPoolDataSource}.
28   */
29  public final class SharedPoolDataSourceProvider implements Provider<DataSource> {
30  
31    private final SharedPoolDataSource dataSource = new SharedPoolDataSource();
32  
33    @com.google.inject.Inject(optional = true)
34    public void setConnectionPoolDataSource(ConnectionPoolDataSource cpds) {
35      dataSource.setConnectionPoolDataSource(cpds);
36    }
37  
38    @com.google.inject.Inject(optional = true)
39    public void setDataSourceName(@Named("DBCP.name") String name) {
40      dataSource.setDataSourceName(name);
41    }
42  
43    @com.google.inject.Inject(optional = true)
44    public void setDefaultAutoCommit(@Named("JDBC.autoCommit") boolean autoCommit) {
45      dataSource.setDefaultAutoCommit(autoCommit);
46    }
47  
48    @com.google.inject.Inject(optional = true)
49    public void setDefaultReadOnly(@Named("DBCP.defaultReadOnly") boolean defaultReadOnly) {
50      dataSource.setDefaultReadOnly(defaultReadOnly);
51    }
52  
53    @com.google.inject.Inject(optional = true)
54    public void setDefaultTransactionIsolation(
55        @Named("DBCP.defaultTransactionIsolation") int defaultTransactionIsolation) {
56      dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation);
57    }
58  
59    @com.google.inject.Inject(optional = true)
60    public void setDescription(@Named("DBCP.description") String description) {
61      dataSource.setDescription(description);
62    }
63  
64    @com.google.inject.Inject(optional = true)
65    public void setJndiEnvironment(@Named("DBCP.jndi.key") String key, @Named("DBCP.jndi.value") String value) {
66      dataSource.setJndiEnvironment(key, value);
67    }
68  
69    @com.google.inject.Inject(optional = true)
70    public void setLoginTimeout(@Named("JDBC.loginTimeout") int loginTimeout) {
71      dataSource.setLoginTimeout(loginTimeout);
72    }
73  
74    @com.google.inject.Inject(optional = true)
75    public void setDefaultMinEvictableIdleTimeMillis(
76        @Named("DBCP.defaultMinEvictableIdleTimeMillis") int defaultMinEvictableIdleTimeMillis) {
77      dataSource.setDefaultMinEvictableIdleTimeMillis(defaultMinEvictableIdleTimeMillis);
78    }
79  
80    @com.google.inject.Inject(optional = true)
81    public void setDefaultNumTestsPerEvictionRun(
82        @Named("DBCP.defaultNumTestsPerEvictionRun") int defaultNumTestsPerEvictionRun) {
83      dataSource.setDefaultNumTestsPerEvictionRun(defaultNumTestsPerEvictionRun);
84    }
85  
86    @com.google.inject.Inject(optional = true)
87    public void setRollbackAfterValidation(@Named("DBCP.rollbackAfterValidation") boolean rollbackAfterValidation) {
88      dataSource.setRollbackAfterValidation(rollbackAfterValidation);
89    }
90  
91    @com.google.inject.Inject(optional = true)
92    public void setDefaultTestOnBorrow(@Named("DBCP.defaultTestOnBorrow") boolean defaultTestOnBorrow) {
93      dataSource.setDefaultTestOnBorrow(defaultTestOnBorrow);
94    }
95  
96    @com.google.inject.Inject(optional = true)
97    public void setDefaultTestOnReturn(@Named("DBCP.defaultTestOnReturn") boolean defaultTestOnReturn) {
98      dataSource.setDefaultTestOnReturn(defaultTestOnReturn);
99    }
100 
101   @com.google.inject.Inject(optional = true)
102   public void setDefaultTestWhileIdle(@Named("DBCP.defaultTestWhileIdle") boolean defaultTestWhileIdle) {
103     dataSource.setDefaultTestWhileIdle(defaultTestWhileIdle);
104   }
105 
106   @com.google.inject.Inject(optional = true)
107   public void setDefaultTimeBetweenEvictionRunsMillis(
108       @Named("DBCP.defaultTimeBetweenEvictionRunsMillis") int defaultTimeBetweenEvictionRunsMillis) {
109     dataSource.setDefaultTimeBetweenEvictionRunsMillis(defaultTimeBetweenEvictionRunsMillis);
110   }
111 
112   @com.google.inject.Inject(optional = true)
113   public void setValidationQuery(@Named("DBCP.validationQuery") String validationQuery) {
114     dataSource.setValidationQuery(validationQuery);
115   }
116 
117   /**
118    * Sets the default max total.
119    *
120    * @param defaultMaxTotal
121    *          the new default max total
122    */
123   @com.google.inject.Inject(optional = true)
124   public void setDefaultMaxTotal(@Named("DBCP.defaultMaxTotal") final int defaultMaxTotal) {
125     dataSource.setDefaultMaxTotal(defaultMaxTotal);
126   }
127 
128   /**
129    * Sets the default max idle.
130    *
131    * @param defaultMaxIdle
132    *          the new default max idle
133    */
134   @com.google.inject.Inject(optional = true)
135   public void setDefaultMaxIdle(@Named("DBCP.defaultMaxIdle") final int defaultMaxIdle) {
136     dataSource.setDefaultMaxIdle(defaultMaxIdle);
137   }
138 
139   /**
140    * Sets the default max wait in milliseconds.
141    *
142    * @param defaultMaxWaitMillis
143    *          the new default max wait in milliseconds
144    */
145   @com.google.inject.Inject(optional = true)
146   public void setDefaultMaxWaitMillis(@Named("DBCP.defaultMaxWaitMillis") final int defaultMaxWaitMillis) {
147     dataSource.setDefaultMaxWaitMillis(defaultMaxWaitMillis);
148   }
149 
150   @Override
151   public DataSource get() {
152     return dataSource;
153   }
154 
155 }