1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.guice.datasource.c3p0;
17
18 import com.mchange.v2.c3p0.ComboPooledDataSource;
19
20 import jakarta.inject.Inject;
21 import jakarta.inject.Named;
22 import jakarta.inject.Provider;
23
24 import java.beans.PropertyVetoException;
25 import java.util.Properties;
26
27 import javax.sql.DataSource;
28
29
30
31
32 public final class C3p0DataSourceProvider implements Provider<DataSource> {
33
34
35
36
37 private final ComboPooledDataSource dataSource = new ComboPooledDataSource();
38 private String username;
39 private String password;
40
41
42
43
44
45
46
47
48
49 @Inject
50 public C3p0DataSourceProvider(@Named("JDBC.driver") final String driver, @Named("JDBC.url") final String url) {
51 try {
52 dataSource.setDriverClass(driver);
53 } catch (PropertyVetoException e) {
54 throw new RuntimeException(
55 "Impossible to initialize C3P0 Data Source with driver class '" + driver + "', see nested exceptions", e);
56 }
57 dataSource.setJdbcUrl(url);
58 }
59
60
61
62
63
64
65
66
67
68 @com.google.inject.Inject(optional = true)
69 public void setUser(@Named("JDBC.username") final String username) {
70 this.username = username;
71 }
72
73
74
75
76
77
78
79
80
81 @com.google.inject.Inject(optional = true)
82 public void setPassword(@Named("JDBC.password") final String password) {
83 this.password = password;
84 }
85
86
87
88
89
90
91
92 @com.google.inject.Inject(optional = true)
93 public void setAcquireIncrement(@Named("c3p0.acquireIncrement") final int acquireIncrement) {
94 dataSource.setAcquireIncrement(acquireIncrement);
95 }
96
97
98
99
100
101
102
103 @com.google.inject.Inject(optional = true)
104 public void setAcquireRetryAttempts(@Named("c3p0.acquireRetryAttempts") final int acquireRetryAttempts) {
105 dataSource.setAcquireRetryAttempts(acquireRetryAttempts);
106 }
107
108
109
110
111
112
113
114 @com.google.inject.Inject(optional = true)
115 public void setAcquireRetryDelay(@Named("c3p0.acquireRetryDelay") final int acquireRetryDelay) {
116 dataSource.setAcquireRetryDelay(acquireRetryDelay);
117 }
118
119
120
121
122
123
124
125 @com.google.inject.Inject(optional = true)
126 public void setAutoCommitOnClose(@Named("JDBC.autoCommit") final boolean autoCommit) {
127 dataSource.setAutoCommitOnClose(autoCommit);
128 }
129
130
131
132
133
134
135
136 @com.google.inject.Inject(optional = true)
137 public void setDriverProperties(@Named("JDBC.driverProperties") final Properties driverProperties) {
138 dataSource.setProperties(driverProperties);
139 }
140
141
142
143
144
145
146
147 @com.google.inject.Inject(optional = true)
148 public void setAautomaticTestTable(@Named("c3p0.automaticTestTable") final String automaticTestTable) {
149 dataSource.setAutomaticTestTable(automaticTestTable);
150 }
151
152
153
154
155
156
157
158 @com.google.inject.Inject(optional = true)
159 public void setBreakAfterAcquireFailure(
160 @Named("c3p0.breakAfterAcquireFailure") final boolean breakAfterAcquireFailure) {
161 dataSource.setBreakAfterAcquireFailure(breakAfterAcquireFailure);
162 }
163
164
165
166
167
168
169
170 @com.google.inject.Inject(optional = true)
171 public void setCheckoutTimeout(@Named("c3p0.checkoutTimeout") final int checkoutTimeout) {
172 dataSource.setCheckoutTimeout(checkoutTimeout);
173 }
174
175
176
177
178
179
180
181 @com.google.inject.Inject(optional = true)
182 public void setConnectionCustomizerClassName(
183 @Named("c3p0.connectionCustomizerClassName") final String connectionCustomizerClassName) {
184 dataSource.setConnectionCustomizerClassName(connectionCustomizerClassName);
185 }
186
187
188
189
190
191
192
193 @com.google.inject.Inject(optional = true)
194 public void setConnectionTesterClassName(
195 @Named("c3p0.connectionTesterClassName") final String connectionTesterClassName) {
196 try {
197 dataSource.setConnectionTesterClassName(connectionTesterClassName);
198 } catch (PropertyVetoException e) {
199 throw new RuntimeException("Impossible to set C3P0 Data Source connection tester class name '"
200 + connectionTesterClassName + "', see nested exceptions", e);
201 }
202 }
203
204
205
206
207
208
209
210 @com.google.inject.Inject(optional = true)
211 public void setIdleConnectionTestPeriod(@Named("c3p0.idleConnectionTestPeriod") final int idleConnectionTestPeriod) {
212 dataSource.setIdleConnectionTestPeriod(idleConnectionTestPeriod);
213 }
214
215
216
217
218
219
220
221 @com.google.inject.Inject(optional = true)
222 public void setInitialPoolSize(@Named("c3p0.initialPoolSize") final int initialPoolSize) {
223 dataSource.setInitialPoolSize(initialPoolSize);
224 }
225
226
227
228
229
230
231
232 @com.google.inject.Inject(optional = true)
233 public void setMaxAdministrativeTaskTime(
234 @Named("c3p0.maxAdministrativeTaskTime") final int maxAdministrativeTaskTime) {
235 dataSource.setMaxAdministrativeTaskTime(maxAdministrativeTaskTime);
236 }
237
238
239
240
241
242
243
244 @com.google.inject.Inject(optional = true)
245 public void setMaxConnectionAge(@Named("c3p0.maxConnectionAge") final int maxConnectionAge) {
246 dataSource.setMaxConnectionAge(maxConnectionAge);
247 }
248
249
250
251
252
253
254
255 @com.google.inject.Inject(optional = true)
256 public void setMaxIdleTime(@Named("c3p0.maxIdleTime") final int maxIdleTime) {
257 dataSource.setMaxIdleTime(maxIdleTime);
258 }
259
260
261
262
263
264
265
266 @com.google.inject.Inject(optional = true)
267 public void setMaxIdleTimeExcessConnections(
268 @Named("c3p0.maxIdleTimeExcessConnections") final int maxIdleTimeExcessConnections) {
269 dataSource.setMaxIdleTimeExcessConnections(maxIdleTimeExcessConnections);
270 }
271
272
273
274
275
276
277
278 @com.google.inject.Inject(optional = true)
279 public void setMaxPoolSize(@Named("c3p0.maxPoolSize") final int maxPoolSize) {
280 dataSource.setMaxPoolSize(maxPoolSize);
281 }
282
283
284
285
286
287
288
289 @com.google.inject.Inject(optional = true)
290 public void setMaxStatements(@Named("c3p0.maxStatements") final int maxStatements) {
291 dataSource.setMaxStatements(maxStatements);
292 }
293
294
295
296
297
298
299
300 @com.google.inject.Inject(optional = true)
301 public void setMaxStatementsPerConnection(
302 @Named("c3p0.maxStatementsPerConnection") final int maxStatementsPerConnection) {
303 dataSource.setMaxStatementsPerConnection(maxStatementsPerConnection);
304 }
305
306
307
308
309
310
311
312 @com.google.inject.Inject(optional = true)
313 public void setMinPoolSize(@Named("c3p0.minPoolSize") final int minPoolSize) {
314 dataSource.setMinPoolSize(minPoolSize);
315 }
316
317
318
319
320
321
322
323 @com.google.inject.Inject(optional = true)
324 public void setPreferredTestQuery(@Named("c3p0.preferredTestQuery") final String preferredTestQuery) {
325 dataSource.setPreferredTestQuery(preferredTestQuery);
326 }
327
328
329
330
331
332
333
334 @com.google.inject.Inject(optional = true)
335 public void setPropertyCycle(@Named("c3p0.propertyCycle") final int propertyCycle) {
336 dataSource.setPropertyCycle(propertyCycle);
337 }
338
339
340
341
342
343
344
345 @com.google.inject.Inject(optional = true)
346 public void setTestConnectionOnCheckin(@Named("c3p0.testConnectionOnCheckin") final boolean testConnectionOnCheckin) {
347 dataSource.setTestConnectionOnCheckin(testConnectionOnCheckin);
348 }
349
350
351
352
353
354
355
356 @com.google.inject.Inject(optional = true)
357 public void setTestConnectionOnCheckout(
358 @Named("c3p0.testConnectionOnCheckout") final boolean testConnectionOnCheckout) {
359 dataSource.setTestConnectionOnCheckout(testConnectionOnCheckout);
360 }
361
362
363
364
365
366
367
368 @com.google.inject.Inject(optional = true)
369 public void setUnreturnedConnectionTimeout(
370 @Named("c3p0.unreturnedConnectionTimeout") final int unreturnedConnectionTimeout) {
371 dataSource.setUnreturnedConnectionTimeout(unreturnedConnectionTimeout);
372 }
373
374
375
376
377
378
379
380 @com.google.inject.Inject(optional = true)
381 public void setUsesTraditionalReflectiveProxies(
382 @Named("c3p0.usesTraditionalReflectiveProxies") final boolean usesTraditionalReflectiveProxies) {
383 dataSource.setUsesTraditionalReflectiveProxies(usesTraditionalReflectiveProxies);
384 }
385
386 @Override
387 public DataSource get() {
388 if (username != null) {
389 dataSource.setUser(username);
390 }
391 if (password != null) {
392 dataSource.setPassword(password);
393 }
394 return dataSource;
395 }
396
397 }