This is an automated email from the ASF dual-hosted git repository.
cbrisson pushed a commit to branch VELOCITY-965
in repository https://gitbox.apache.org/repos/asf/velocity-engine.git
The following commit(s) were added to refs/heads/VELOCITY-965 by this push:
new 3484d89e Drop CachingDatabaseObjectsFactory class
3484d89e is described below
commit 3484d89ec99fe1aaf9969ff15c6144c6368449f7
Author: Claude Brisson <[email protected]>
AuthorDate: Sun Sep 1 11:14:08 2024 +0200
Drop CachingDatabaseObjectsFactory class
---
.../loader/CachingDatabaseObjectsFactory.java | 203 ---------------------
...sourceResourceLoaderCachingFactoryTestCase.java | 19 --
2 files changed, 222 deletions(-)
diff --git
a/velocity-engine-core/src/main/java/org/apache/velocity/runtime/resource/loader/CachingDatabaseObjectsFactory.java
b/velocity-engine-core/src/main/java/org/apache/velocity/runtime/resource/loader/CachingDatabaseObjectsFactory.java
deleted file mode 100644
index aadc219e..00000000
---
a/velocity-engine-core/src/main/java/org/apache/velocity/runtime/resource/loader/CachingDatabaseObjectsFactory.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package org.apache.velocity.runtime. resource.loader;
-
-import org.apache.commons.pool2.BaseKeyedPooledObjectFactory;
-import org.apache.commons.pool2.KeyedObjectPool;
-import org.apache.commons.pool2.PooledObject;
-import org.apache.commons.pool2.impl.DefaultPooledObject;
-import org.apache.commons.pool2.impl.GenericKeyedObjectPool;
-import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
-import org.apache.velocity.util.ExtProperties;
-import org.slf4j.Logger;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- * <p>Database objects factory which will keep a single connection to be able
to cache statements preparation, by means
- * of appropriate pools.</p>
- * <p>This class requires the following optional dependency (maven syntax):</p>
- * <pre><code>
- * <dependency>
- * <groupId>org.apache.commons</groupId>
- * <artifactId>commons-pool2</artifactId>
- * <version>2.12.0</version>
- * <scope>runtime</scope>
- * </dependency>
- * </code></pre>
- * <p>To use this class, you must add the following property to the example
configuration described in
- * @link{org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader}
- * </p>
- * <pre><code>
- * resource.loader.ds.database_objects_factory.class =
org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader<br>
- * </code></pre>
- * <p>The default size of each pool of prepared statements (there is one pool
per statement) is 50. You can tune it
- * with:</p>
- * <pre><code>
- * resource.loader.ds.database_objects_factory. =
org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader<br>
- * </code></pre>
- * @see org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader
- */
-
-public class CachingDatabaseObjectsFactory implements DatabaseObjectsFactory {
-
- private static final String STATEMENTS_POOL_MAX_SIZE =
"statements_pool_max_size";
- private static final int STATEMENTS_POOL_MAX_SIZE_DEFAULT = 50;
-
- private DataSource dataSource;
- private Connection connection;
- private int poolsMaxSize;
- private KeyedObjectPool<String, PreparedStatement> statementsPool;
- protected Logger log = null;
-
- private class PreparedStatementFactory extends
BaseKeyedPooledObjectFactory<String, PreparedStatement>
- {
- @Override
- public PreparedStatement create(String sql) throws Exception {
- checkConnection();
- return connection.prepareStatement(sql);
- }
-
- @Override
- public PooledObject<PreparedStatement> wrap(PreparedStatement obj) {
- return new DefaultPooledObject<>(obj);
- }
-
- @Override
- public boolean validateObject(String key,
PooledObject<PreparedStatement> obj)
- {
- try
- {
- return !obj.getObject().isClosed() &&
obj.getObject().getConnection().isValid(0);
- }
- catch (SQLException sqle)
- {
- return false;
- }
- }
-
- @Override
- public void destroyObject(String key, PooledObject<PreparedStatement>
p) throws Exception {
- p.getObject().close();
- }
- }
-
- /**
- * Initialize the factory with the DataSourceResourceLoader properties
- * @param dataSource data source
- */
- @Override
- public void init(DataSource dataSource, ExtProperties properties) throws
SQLException
- {
- this.dataSource = dataSource;
- this.connection = dataSource.getConnection();
- this.poolsMaxSize = properties.getInt(STATEMENTS_POOL_MAX_SIZE,
STATEMENTS_POOL_MAX_SIZE_DEFAULT);
- createStatementsPool();
- }
-
- private void createStatementsPool()
- {
- GenericKeyedObjectPoolConfig<PreparedStatement> poolConfig = new
GenericKeyedObjectPoolConfig<>();
- poolConfig.setMaxTotal(poolsMaxSize);
- poolConfig.setTestOnBorrow(true);
- statementsPool = new GenericKeyedObjectPool<>(new
PreparedStatementFactory(), poolConfig);
- }
-
- @Override
- public void setLogger(Logger log)
- {
- this.log = log;
- }
-
- /**
- * Prepare a statement
- * @param sql Statement SQL
- * @return prepared statement
- */
- @Override
- public PreparedStatement prepareStatement(String sql) throws SQLException
- {
- try
- {
- return statementsPool.borrowObject(sql);
- }
- catch (SQLException sqle)
- {
- throw sqle;
- }
- catch (Exception e)
- {
- throw new SQLException("could not prepare statement", e);
- }
- }
-
- protected synchronized void checkConnection() throws SQLException
- {
- if (!connection.isValid(0))
- {
- reset();
- }
- }
-
- private void reset() throws SQLException
- {
- clear();
- // refresh connection and statements pool
- connection = dataSource.getConnection();
- createStatementsPool();
- }
-
- /**
- * Releases a prepared statement
- * @param sql original sql query
- * @param stmt statement
- */
- @Override
- public void releaseStatement(String sql, PreparedStatement stmt) throws
SQLException
- {
- try
- {
- statementsPool.returnObject(sql, stmt);
- }
- catch (Exception e)
- {
- if (log != null)
- {
- log.debug("could not return statement to the pool", e);
- }
- }
- }
-
- /**
- * Free resources
- */
- @Override
- public void clear()
- {
- statementsPool.close();
- try
- {
- statementsPool.clear();
- }
- catch (Exception e)
- {
- if (log != null)
- {
- log.debug("statements pool clearing gave an exception", e);
- }
- }
- try
- {
- connection.close();
- }
- catch (SQLException sqle)
- {
- log.debug("connection closing gave an exception", sqle);
- }
- finally
- {
- connection = null;
- }
- }
-}
diff --git
a/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/DatasourceResourceLoaderCachingFactoryTestCase.java
b/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/DatasourceResourceLoaderCachingFactoryTestCase.java
deleted file mode 100644
index 7f5e487b..00000000
---
a/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/DatasourceResourceLoaderCachingFactoryTestCase.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.velocity.test.sql;
-
-import org.apache.velocity.util.ExtProperties;
-
-public class DatasourceResourceLoaderCachingFactoryTestCase extends
DataSourceResourceLoaderTestCase
-{
- public DatasourceResourceLoaderCachingFactoryTestCase(String name) throws
Exception {
- super(name);
- }
-
- @Override
- protected ExtProperties getResourceLoaderProperties()
- {
- ExtProperties props = super.getResourceLoaderProperties();
- props.put("ds.database_objects_factory.class",
"org.apache.velocity.resource.loader.CachingDatabaseObjectsFactory");
- return props;
- }
-
-}