You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/05/08 02:17:23 UTC
[4/7] james-project git commit: JAMES-2386 Datasource validation is
configurable
JAMES-2386 Datasource validation is configurable
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5e10c35d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5e10c35d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5e10c35d
Branch: refs/heads/master
Commit: 5e10c35d41ee10dd1717905314786a4937d0f71d
Parents: bfa5e42
Author: Simon Levesque <si...@foilen.com>
Authored: Tue May 1 07:30:13 2018 -0400
Committer: benwa <bt...@linagora.com>
Committed: Tue May 8 09:16:07 2018 +0700
----------------------------------------------------------------------
.../apache/james/backends/jpa/JPAConstants.java | 26 ++++++++++
.../destination/conf/james-database.properties | 8 ++-
.../destination/conf/james-database.properties | 8 ++-
.../resources/META-INF/spring/mailbox-jpa.xml | 3 ++
.../main/resources/james-database.properties | 22 ++++++++-
.../main/resources/james-database.properties | 8 ++-
.../java/org/apache/james/JPAConfiguration.java | 45 ++++++++++++++++-
.../james/modules/mailbox/JPAMailboxModule.java | 18 ++++++-
.../JPAJamesServerWithSqlValidationTest.java | 40 +++++++++++++++
...JPAConfigurationModuleWithSqlValidation.java | 52 ++++++++++++++++++++
.../james-database.properties | 8 ++-
.../java/org/apache/james/JPAConfiguration.java | 45 ++++++++++++++++-
.../META-INF/org/apache/james/spring-server.xml | 3 ++
.../main/resources/OSGI-INF/blueprint/jdbc.xml | 3 ++
14 files changed, 279 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/JPAConstants.java
----------------------------------------------------------------------
diff --git a/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/JPAConstants.java b/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/JPAConstants.java
new file mode 100644
index 0000000..f90b032
--- /dev/null
+++ b/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/JPAConstants.java
@@ -0,0 +1,26 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.backends.jpa;
+
+public class JPAConstants {
+
+ public static final int VALIDATION_NO_TIMEOUT = -1;
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/dockerfiles/run/guice/jpa/destination/conf/james-database.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/jpa/destination/conf/james-database.properties b/dockerfiles/run/guice/jpa/destination/conf/james-database.properties
index b3ac7eb..22770d0 100644
--- a/dockerfiles/run/guice/jpa/destination/conf/james-database.properties
+++ b/dockerfiles/run/guice/jpa/destination/conf/james-database.properties
@@ -37,4 +37,10 @@ vendorAdapter.database=DERBY
# See:
# http://openjpa.apache.org/builds/latest/docs/manual/ref_guide_mapping_jpa.html #7.11. LOB Streaming
#
-openjpa.streaming=false
\ No newline at end of file
+openjpa.streaming=false
+
+# Validate the data source before using it
+# datasource.testOnBorrow=true
+# datasource.validationQueryTimeoutSec=2
+# This is different per database. See https://stackoverflow.com/questions/10684244/dbcp-validationquery-for-different-databases#10684260
+# datasource.validationQuery=select 1
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/dockerfiles/run/spring/destination/conf/james-database.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/spring/destination/conf/james-database.properties b/dockerfiles/run/spring/destination/conf/james-database.properties
index b3ac7eb..22770d0 100644
--- a/dockerfiles/run/spring/destination/conf/james-database.properties
+++ b/dockerfiles/run/spring/destination/conf/james-database.properties
@@ -37,4 +37,10 @@ vendorAdapter.database=DERBY
# See:
# http://openjpa.apache.org/builds/latest/docs/manual/ref_guide_mapping_jpa.html #7.11. LOB Streaming
#
-openjpa.streaming=false
\ No newline at end of file
+openjpa.streaming=false
+
+# Validate the data source before using it
+# datasource.testOnBorrow=true
+# datasource.validationQueryTimeoutSec=2
+# This is different per database. See https://stackoverflow.com/questions/10684244/dbcp-validationquery-for-different-databases#10684260
+# datasource.validationQuery=select 1
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
index 53a014e..cb0f321 100644
--- a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
+++ b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
@@ -78,6 +78,9 @@
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
+ <property name="testOnBorrow" value="${datasource.testOnBorrow:false}" />
+ <property name="validationQueryTimeout" value="${datasource.validationQueryTimeoutSec:-1}" />
+ <property name="validationQuery" value="${datasource.validationQuery:#{null}}" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="datasource"/>
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/mailbox/jpa/src/main/resources/james-database.properties
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/resources/james-database.properties b/mailbox/jpa/src/main/resources/james-database.properties
index 0821945..22770d0 100644
--- a/mailbox/jpa/src/main/resources/james-database.properties
+++ b/mailbox/jpa/src/main/resources/james-database.properties
@@ -14,13 +14,33 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-#
+
+# This template file can be used as example for James Server configuration
+# DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS
# See http://james.apache.org/server/3/config.html for usage
+# Use derby as default
database.driverClassName=org.apache.derby.jdbc.EmbeddedDriver
database.url=jdbc:derby:../var/store/derby;create=true
database.username=app
database.password=app
+
+# Supported adapters are:
+# DB2, DERBY, H2, HSQL, INFORMIX, MYSQL, ORACLE, POSTGRESQL, SQL_SERVER, SYBASE
vendorAdapter.database=DERBY
+
+# Use streaming for Blobs
+# This is only supported on a limited set of databases atm. You should check if its supported by your DB before enable
+# it.
+#
+# See:
+# http://openjpa.apache.org/builds/latest/docs/manual/ref_guide_mapping_jpa.html #7.11. LOB Streaming
+#
openjpa.streaming=false
+
+# Validate the data source before using it
+# datasource.testOnBorrow=true
+# datasource.validationQueryTimeoutSec=2
+# This is different per database. See https://stackoverflow.com/questions/10684244/dbcp-validationquery-for-different-databases#10684260
+# datasource.validationQuery=select 1
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/app/src/main/resources/james-database.properties
----------------------------------------------------------------------
diff --git a/server/app/src/main/resources/james-database.properties b/server/app/src/main/resources/james-database.properties
index b3ac7eb..22770d0 100644
--- a/server/app/src/main/resources/james-database.properties
+++ b/server/app/src/main/resources/james-database.properties
@@ -37,4 +37,10 @@ vendorAdapter.database=DERBY
# See:
# http://openjpa.apache.org/builds/latest/docs/manual/ref_guide_mapping_jpa.html #7.11. LOB Streaming
#
-openjpa.streaming=false
\ No newline at end of file
+openjpa.streaming=false
+
+# Validate the data source before using it
+# datasource.testOnBorrow=true
+# datasource.validationQueryTimeoutSec=2
+# This is different per database. See https://stackoverflow.com/questions/10684244/dbcp-validationquery-for-different-databases#10684260
+# datasource.validationQuery=select 1
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAConfiguration.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAConfiguration.java
index c0f7d76..62e96c3 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAConfiguration.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAConfiguration.java
@@ -18,10 +18,13 @@
****************************************************************/
package org.apache.james;
+import org.apache.james.backends.jpa.JPAConstants;
+
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
public class JPAConfiguration {
+
public static Builder builder() {
return new Builder();
}
@@ -29,6 +32,10 @@ public class JPAConfiguration {
public static class Builder {
private String driverName;
private String driverURL;
+ private boolean testOnBorrow;
+ private int validationQueryTimeoutSec = JPAConstants.VALIDATION_NO_TIMEOUT;
+ private String validationQuery;
+
public Builder driverName(String driverName) {
this.driverName = driverName;
@@ -40,19 +47,41 @@ public class JPAConfiguration {
return this;
}
+ public Builder testOnBorrow(boolean testOnBorrow) {
+ this.testOnBorrow = testOnBorrow;
+ return this;
+ }
+
+ public Builder validationQueryTimeoutSec(int validationQueryTimeoutSec) {
+ this.validationQueryTimeoutSec = validationQueryTimeoutSec;
+ return this;
+ }
+
+ public Builder validationQuery(String validationQuery) {
+ this.validationQuery = validationQuery;
+ return this;
+ }
+
public JPAConfiguration build() {
Preconditions.checkNotNull(driverName);
Preconditions.checkNotNull(driverURL);
- return new JPAConfiguration(driverName, driverURL);
+ return new JPAConfiguration(driverName, driverURL, testOnBorrow, validationQueryTimeoutSec, validationQuery);
}
}
private final String driverName;
private final String driverURL;
+ private final boolean testOnBorrow;
+ private final int validationQueryTimeoutSec;
+ private final String validationQuery;
- @VisibleForTesting JPAConfiguration(String driverName, String driverURL) {
+ @VisibleForTesting
+ JPAConfiguration(String driverName, String driverURL, boolean testOnBorrow, int validationQueryTimeoutSec, String validationQuery) {
this.driverName = driverName;
this.driverURL = driverURL;
+ this.testOnBorrow = testOnBorrow;
+ this.validationQueryTimeoutSec = validationQueryTimeoutSec;
+ this.validationQuery = validationQuery;
}
public String getDriverName() {
@@ -63,4 +92,16 @@ public class JPAConfiguration {
return driverURL;
}
+ public boolean isTestOnBorrow() {
+ return testOnBorrow;
+ }
+
+ public int getValidationQueryTimeoutSec() {
+ return validationQueryTimeoutSec;
+ }
+
+ public String getValidationQuery() {
+ return validationQuery;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
index 896a1a9..eb3c310 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
@@ -19,7 +19,9 @@
package org.apache.james.modules.mailbox;
import java.io.FileNotFoundException;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import javax.inject.Singleton;
import javax.persistence.EntityManagerFactory;
@@ -30,6 +32,7 @@ import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.james.JPAConfiguration;
import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
+import org.apache.james.backends.jpa.JPAConstants;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxPathLocker;
import org.apache.james.mailbox.SubscriptionManager;
@@ -62,6 +65,7 @@ import org.apache.james.modules.Names;
import org.apache.james.utils.MailboxManagerDefinition;
import org.apache.james.utils.PropertiesProvider;
+import com.google.common.base.Joiner;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Provides;
@@ -135,8 +139,17 @@ public class JPAMailboxModule extends AbstractModule {
properties.put("openjpa.ConnectionDriverName", jpaConfiguration.getDriverName());
properties.put("openjpa.ConnectionURL", jpaConfiguration.getDriverURL());
- return Persistence.createEntityManagerFactory("Global", properties);
+ List<String> connectionFactoryProperties = new ArrayList<>();
+ connectionFactoryProperties.add("TestOnBorrow=" + jpaConfiguration.isTestOnBorrow());
+ if (jpaConfiguration.getValidationQueryTimeoutSec() > 0) {
+ connectionFactoryProperties.add("ValidationTimeout=" + jpaConfiguration.getValidationQueryTimeoutSec() * 1000);
+ }
+ if (jpaConfiguration.getValidationQuery() != null) {
+ connectionFactoryProperties.add("ValidationSQL='" + jpaConfiguration.getValidationQuery() + "'");
+ }
+ properties.put("openjpa.ConnectionFactoryProperties", Joiner.on(", ").join(connectionFactoryProperties));
+ return Persistence.createEntityManagerFactory("Global", properties);
}
@Provides
@@ -146,6 +159,9 @@ public class JPAMailboxModule extends AbstractModule {
return JPAConfiguration.builder()
.driverName(dataSource.getString("database.driverClassName"))
.driverURL(dataSource.getString("database.url"))
+ .testOnBorrow(dataSource.getBoolean("datasource.testOnBorrow", false))
+ .validationQueryTimeoutSec(dataSource.getInt("datasource.validationQueryTimeoutSec", JPAConstants.VALIDATION_NO_TIMEOUT))
+ .validationQuery(dataSource.getString("datasource.validationQuery", null))
.build();
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java
new file mode 100644
index 0000000..5bdee09
--- /dev/null
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java
@@ -0,0 +1,40 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james;
+
+import java.io.IOException;
+
+import org.apache.james.server.core.configuration.Configuration;
+
+public class JPAJamesServerWithSqlValidationTest extends JPAJamesServerTest {
+
+ @Override
+ protected GuiceJamesServer createJamesServer() throws IOException {
+ Configuration configuration = Configuration.builder()
+ .workingDirectory(temporaryFolder.newFolder())
+ .configurationFromClasspath()
+ .build();
+
+ return new GuiceJamesServer(configuration)
+ .combineWith(JPAJamesServerMain.JPA_SERVER_MODULE, JPAJamesServerMain.PROTOCOLS)
+ .overrideWith(new TestJPAConfigurationModuleWithSqlValidation());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/container/guice/jpa-guice/src/test/java/org/apache/james/TestJPAConfigurationModuleWithSqlValidation.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/TestJPAConfigurationModuleWithSqlValidation.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/TestJPAConfigurationModuleWithSqlValidation.java
new file mode 100644
index 0000000..04e7c9d
--- /dev/null
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/TestJPAConfigurationModuleWithSqlValidation.java
@@ -0,0 +1,52 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james;
+
+import java.io.FileNotFoundException;
+
+import javax.inject.Singleton;
+
+import org.apache.commons.configuration.ConfigurationException;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+
+public class TestJPAConfigurationModuleWithSqlValidation extends AbstractModule {
+
+ private static final String JDBC_EMBEDDED_URL = "jdbc:derby:memory:mailboxintegration;create=true";
+ private static final String JDBC_EMBEDDED_DRIVER = org.apache.derby.jdbc.EmbeddedDriver.class.getName();
+ private static final String VALIDATION_SQL_QUERY = "VALUES 1";
+
+ @Override
+ protected void configure() {
+ }
+
+ @Provides
+ @Singleton
+ JPAConfiguration provideConfiguration() throws FileNotFoundException, ConfigurationException {
+ return JPAConfiguration.builder()
+ .driverName(JDBC_EMBEDDED_DRIVER)
+ .driverURL(JDBC_EMBEDDED_URL)
+ .testOnBorrow(true)
+ .validationQueryTimeoutSec(2)
+ .validationQuery(VALIDATION_SQL_QUERY)
+ .build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/container/guice/jpa-smtp/sample-configuration/james-database.properties
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp/sample-configuration/james-database.properties b/server/container/guice/jpa-smtp/sample-configuration/james-database.properties
index b3ac7eb..22770d0 100644
--- a/server/container/guice/jpa-smtp/sample-configuration/james-database.properties
+++ b/server/container/guice/jpa-smtp/sample-configuration/james-database.properties
@@ -37,4 +37,10 @@ vendorAdapter.database=DERBY
# See:
# http://openjpa.apache.org/builds/latest/docs/manual/ref_guide_mapping_jpa.html #7.11. LOB Streaming
#
-openjpa.streaming=false
\ No newline at end of file
+openjpa.streaming=false
+
+# Validate the data source before using it
+# datasource.testOnBorrow=true
+# datasource.validationQueryTimeoutSec=2
+# This is different per database. See https://stackoverflow.com/questions/10684244/dbcp-validationquery-for-different-databases#10684260
+# datasource.validationQuery=select 1
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAConfiguration.java b/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAConfiguration.java
index c0f7d76..62e96c3 100644
--- a/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAConfiguration.java
+++ b/server/container/guice/jpa-smtp/src/main/java/org/apache/james/JPAConfiguration.java
@@ -18,10 +18,13 @@
****************************************************************/
package org.apache.james;
+import org.apache.james.backends.jpa.JPAConstants;
+
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
public class JPAConfiguration {
+
public static Builder builder() {
return new Builder();
}
@@ -29,6 +32,10 @@ public class JPAConfiguration {
public static class Builder {
private String driverName;
private String driverURL;
+ private boolean testOnBorrow;
+ private int validationQueryTimeoutSec = JPAConstants.VALIDATION_NO_TIMEOUT;
+ private String validationQuery;
+
public Builder driverName(String driverName) {
this.driverName = driverName;
@@ -40,19 +47,41 @@ public class JPAConfiguration {
return this;
}
+ public Builder testOnBorrow(boolean testOnBorrow) {
+ this.testOnBorrow = testOnBorrow;
+ return this;
+ }
+
+ public Builder validationQueryTimeoutSec(int validationQueryTimeoutSec) {
+ this.validationQueryTimeoutSec = validationQueryTimeoutSec;
+ return this;
+ }
+
+ public Builder validationQuery(String validationQuery) {
+ this.validationQuery = validationQuery;
+ return this;
+ }
+
public JPAConfiguration build() {
Preconditions.checkNotNull(driverName);
Preconditions.checkNotNull(driverURL);
- return new JPAConfiguration(driverName, driverURL);
+ return new JPAConfiguration(driverName, driverURL, testOnBorrow, validationQueryTimeoutSec, validationQuery);
}
}
private final String driverName;
private final String driverURL;
+ private final boolean testOnBorrow;
+ private final int validationQueryTimeoutSec;
+ private final String validationQuery;
- @VisibleForTesting JPAConfiguration(String driverName, String driverURL) {
+ @VisibleForTesting
+ JPAConfiguration(String driverName, String driverURL, boolean testOnBorrow, int validationQueryTimeoutSec, String validationQuery) {
this.driverName = driverName;
this.driverURL = driverURL;
+ this.testOnBorrow = testOnBorrow;
+ this.validationQueryTimeoutSec = validationQueryTimeoutSec;
+ this.validationQuery = validationQuery;
}
public String getDriverName() {
@@ -63,4 +92,16 @@ public class JPAConfiguration {
return driverURL;
}
+ public boolean isTestOnBorrow() {
+ return testOnBorrow;
+ }
+
+ public int getValidationQueryTimeoutSec() {
+ return validationQueryTimeoutSec;
+ }
+
+ public String getValidationQuery() {
+ return validationQuery;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
----------------------------------------------------------------------
diff --git a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
index f98eae7..40f6008 100644
--- a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
+++ b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
@@ -181,6 +181,9 @@
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
+ <property name="testOnBorrow" value="${datasource.testOnBorrow:false}" />
+ <property name="validationQueryTimeout" value="${datasource.validationQueryTimeoutSec:-1}" />
+ <property name="validationQuery" value="${datasource.validationQuery:#{null}}" />
<!--The value for maxActive should always be larger than the number of spooler threads. The-->
<!--reason is that a spooler thread normally requires 1 connection to process a mail, however-->
<!--sometimes OpenJPA requires 1 connection to finish the processing on top of that. If-->
http://git-wip-us.apache.org/repos/asf/james-project/blob/5e10c35d/server/data/data-jdbc/src/main/resources/OSGI-INF/blueprint/jdbc.xml
----------------------------------------------------------------------
diff --git a/server/data/data-jdbc/src/main/resources/OSGI-INF/blueprint/jdbc.xml b/server/data/data-jdbc/src/main/resources/OSGI-INF/blueprint/jdbc.xml
index 31a20b0..2db7c88 100644
--- a/server/data/data-jdbc/src/main/resources/OSGI-INF/blueprint/jdbc.xml
+++ b/server/data/data-jdbc/src/main/resources/OSGI-INF/blueprint/jdbc.xml
@@ -36,6 +36,9 @@
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
+ <property name="testOnBorrow" value="${datasource.testOnBorrow:false}" />
+ <property name="validationQueryTimeout" value="${datasource.validationQueryTimeoutSec:-1}" />
+ <property name="validationQuery" value="${datasource.validationQuery:#{null}}" />
</bean>
<service id="datasource" ref="dataSourceJames" interface="javax.sql.DataSource">
<service-properties>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org