It's better to create a new repository for each new module (or possibly for a couple of related modules, but they should be more related than just being Log4j plugins).
On 2018-01-19 06:31, Ralph Goers wrote:
Gary, I am complaining because I perform the releases. You never have. We keep adding more and more crap to the build and it keeps taking longer and longer. Af far as I am concerned that is a valid technical reason. My -1 stands. RalphOn Jan 18, 2018, at 10:24 PM, Gary Gregory <garydgreg...@gmail.com> wrote: On Thu, Jan 18, 2018 at 10:20 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote:OK, but that doesn’t resolve the initial problem. The log4j 2 project is too large.From what I've experienced, folks complain about the size of the api and core jars, not the Maven project. What is the target size/metric if it is currently "too large"? ;-) GaryRalphOn Jan 18, 2018, at 10:15 PM, Gary Gregory <garydgreg...@gmail.com>wrote:On Thu, Jan 18, 2018 at 9:43 PM, Ralph Goers <ralph.go...@dslextreme.com wrote:In addition, the build is now failing to compile on Jenkins.Oops, please accept my apologies. I got caught by the Eclipse compiler being more forgiving (or more powerful) than the Oracle compiler in the generics department. All of that despite the Maven partial builds I ran.Imust have not run the clean goal or some-such. GaryRalphOn Jan 18, 2018, at 9:28 PM, Ralph Goers <ralph.go...@dslextreme.com>wrote:-1 Please revert and move this to the log4j plugins project. RalphOn Jan 18, 2018, at 8:54 PM, ggreg...@apache.org wrote: Repository: logging-log4j2 Updated Branches: refs/heads/master bb6fcd09e -> 639f093b8 [LOG4J2-2186] Add a JDBC ConnectionSource that provides poolingthroughApache Commons DBCP 2. Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/639f093bTree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/639f093bDiff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/639f093bBranch: refs/heads/master Commit: 639f093b8103df2c2eda8d62fd12d7619d98ac04 Parents: bb6fcd0 Author: Gary Gregory <garydgreg...@gmail.com> Authored: Thu Jan 18 20:54:47 2018 -0700 Committer: Gary Gregory <garydgreg...@gmail.com> Committed: Thu Jan 18 20:54:47 2018 -0700 ----------------------------------------------------------------------log4j-jdbc-dbcp2/pom.xml | 170+++++++++++++++++++.../db/jdbc/PoolingDriverConnectionSource.java | 155+++++++++++++++++log4j-jdbc-dbcp2/src/site/manual/index.md | 35 ++++ log4j-jdbc-dbcp2/src/site/site.xml | 52 ++++++ .../jdbc/PoolingDriverConnectionSourceTest.java | 96 +++++++++++ pom.xml | 1 + src/changes/changes.xml | 3 + src/site/xdoc/manual/appenders.xml | 28 ++- 8 files changed, 537 insertions(+), 3 deletions(-) ----------------------------------------------------------------------http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/639f093b/log4j-jdbc-dbcp2/pom.xml----------------------------------------------------------------------diff --git a/log4j-jdbc-dbcp2/pom.xml b/log4j-jdbc-dbcp2/pom.xml new file mode 100644 index 0000000..18e0e86 --- /dev/null +++ b/log4j-jdbc-dbcp2/pom.xml @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Licensed to the Apache Software Foundation (ASF) under one ormore ~ contributor license agreements. See the NOTICE+ file distributed with ~ this work for additional informationregarding copyright ownership. ~ The ASF licenses this file+ to You under the Apache License, Version 2.0 ~ (the "License"); youmay 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 theLicense is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES+ OR CONDITIONS OF ANY KIND, either express or implied. ~ See theLicense for the specific language governing permissions and+ ~ limitations under the License. --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">+ <parent> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j</artifactId> + <version>2.10.1-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>log4j-jdbc-dbcp2</artifactId> + <name>Apache Log4j JDBC DBCP 2</name> + <description> + Connection source for the JDBC Appender using on Apache CommonsDBCP 2.+ </description> + <properties> + <log4jParentDir>${basedir}/..</log4jParentDir> + <docLabel>Log4j JDBC DBCP 2 Documentation</docLabel> + <projectDir>/log4j-jdbc-dbcp2</projectDir> + <module.name>org.apache.logging.log4j.jdbc.dbcp2</module.name> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-dbcp2</artifactId> + <version>2.2.0</version> + </dependency> + <!-- Test Dependencies --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + <type>test-jar</type> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <type>test-jar</type> + </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <configuration> + <instructions> + <Fragment-Host>org.apache.logging.log4j.core.appender.db.jdbc</Fragment-Host>+ <Export-Package>*</Export-Package> + </instructions> + </configuration> + </plugin> + </plugins> + </build> + <reporting> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-changes-plugin</artifactId> + <version>${changes.plugin.version}</version> + <reportSets> + <reportSet> + <reports> + <report>changes-report</report> + </reports> + </reportSet> + </reportSets> + <configuration> + <issueLinkTemplate>%URL%/show_bug.cgi?id=%ISSUE%</issueLinkTemplate>+ <useJql>true</useJql> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + <version>${checkstyle.plugin.version}</version> + <configuration> + <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->+ <configLocation>${log4jParentDir}/checkstyle.xml</configLocation>+ <suppressionsLocation>${log4jParentDir}/checkstyle-suppressions.xml</suppressionsLocation>+ <enableRulesSummary>false</enableRulesSummary> + <propertyExpansion>basedir=${basedir}</propertyExpansion> + <propertyExpansion>licensedir=${log4jParentDir}/checkstyle-header.txt</propertyExpansion>+ </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>${javadoc.plugin.version}</version> + <configuration> + <bottom><![CDATA[<p align="center">Copyright ©{inceptionYear}-{currentYear} {organizationName}. All RightsReserved.<br />+ Apache Logging, Apache Log4j, Log4j, Apache, the Apachefeather logo, the Apache Logging project logo,+ and the Apache Log4j logo are trademarks of The ApacheSoftware Foundation.</p>]]></bottom>+ <!-- module link generation is completely broken in thejavadoc plugin for a multi-module non-aggregating project -->+ <detectOfflineLinks>false</detectOfflineLinks> + <linksource>true</linksource> + </configuration> + <reportSets> + <reportSet> + <id>non-aggregate</id> + <reports> + <report>javadoc</report> + </reports> + </reportSet> + </reportSets> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>findbugs-maven-plugin</artifactId> + <version>${findbugs.plugin.version}</version> + <configuration> + <fork>true</fork> + <jvmArgs>-Duser.language=en</jvmArgs> + <threshold>Normal</threshold> + <effort>Default</effort> + <excludeFilterFile>${log4jParentDir}/findbugs-exclude-filter.xml</excludeFilterFile>+ </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jxr-plugin</artifactId> + <version>${jxr.plugin.version}</version> + <reportSets> + <reportSet> + <id>non-aggregate</id> + <reports> + <report>jxr</report> + </reports> + </reportSet> + <reportSet> + <id>aggregate</id> + <reports> + <report>aggregate</report> + </reports> + </reportSet> + </reportSets> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-pmd-plugin</artifactId> + <version>${pmd.plugin.version}</version> + <configuration> + <targetJdk>${maven.compiler.target}</targetJdk> + </configuration> + </plugin> + </plugins> + </reporting> +</project> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/639f093b/log4j-jdbc-dbcp2/src/main/java/org/apache/logging/ log4j/core/appender/db/jdbc/PoolingDriverConnectionSource.java----------------------------------------------------------------------diff --git a/log4j-jdbc-dbcp2/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/PoolingDriverConnectionSource.java b/log4j-jdbc-dbcp2/src/main/java/org/apache/logging/log4j/ core/appender/db/jdbc/PoolingDriverConnectionSource.javanew file mode 100644 index 0000000..80adbb3 --- /dev/null +++ b/log4j-jdbc-dbcp2/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/PoolingDriverConnectionSource.java@@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributedwith+ * this work for additional information regarding copyrightownership.+ * The ASF licenses this file to You under the Apache license,Version2.0+ * (the "License"); you may not use this file except in compliancewith+ * 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 orimplied.+ * See the license for the specific language governing permissionsand+ * limitations under the license. + */ +package org.apache.logging.log4j.core.appender.db.jdbc; + +import java.sql.DriverManager; +import java.sql.SQLException; + +import org.apache.commons.dbcp2.ConnectionFactory; +import org.apache.commons.dbcp2.DriverManagerConnectionFactory; +import org.apache.commons.dbcp2.PoolableConnection; +import org.apache.commons.dbcp2.PoolableConnectionFactory; +import org.apache.commons.dbcp2.PoolingDriver; +import org.apache.commons.pool2.ObjectPool; +import org.apache.commons.pool2.impl.GenericObjectPool; +import org.apache.logging.log4j.core.Core; +import org.apache.logging.log4j.core.config.Property; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;+ +/** + * A {@link ConnectionSource} that uses a JDBC connection string, auser name, and a password to call+ * {@link DriverManager#getConnection(String, String, String)}. Theconnections are served from an+ * <a href="http://commons.apache.org/proper/commons-dbcp/">ApacheCommons DBCP</a> pooling driver.+ */ +@Plugin(name = "PoolingDriver", category = Core.CATEGORY_NAME,elementType = "connectionSource", printObject = true)+public final class PoolingDriverConnectionSource extendsDriverManagerConnectionSource {+ + /** + * Builds PoolingDriverConnectionSource instances. + * + * @param <B> + * This builder type or a subclass. + */ + public static class Builder<B extends Builder<B>> + extends DriverManagerConnectionSource.Builder<B,PoolingDriverConnectionSource> {+ + public static final String DEFAULT_POOL_NAME = "example"; + private String poolName = DEFAULT_POOL_NAME; + + @Override + public PoolingDriverConnectionSource build() { + try { + return new PoolingDriverConnectionSource(getDriverClassName(),getConnectionString(), getUserName(),+ getPassword(), getProperties(), poolName); + } catch (final SQLException e) { + getLogger().error("Exception constructing {} for {}",PoolingDriverConnectionSource.class,+ getConnectionString(), e); + return null; + } + } + + public B setPoolName(final String poolName) { + this.poolName = poolName; + return asBuilder(); + } + } + + public static final String URL_PREFIX ="jdbc:apache:commons:dbcp:";+ + // This method is not named newBuilder() to make the compilerhappy.+ @PluginBuilderFactory + public static <B extends Builder<B>> BnewPoolingDriverConnectionSourceBuilder() {+ return new Builder<B>().asBuilder(); + } + + private final String poolingDriverClassName ="org.apache.commons.dbcp2.PoolingDriver";+ + private final String poolName; + + public PoolingDriverConnectionSource(final StringdriverClassName, final String connectionString,+ final char[] userName, final char[] password, finalProperty[] properties, final String poolName)+ throws SQLException { + super(driverClassName, connectionString, URL_PREFIX +poolName, userName, password, properties);+ this.poolName = poolName; + setupDriver(connectionString); + } + + @Override + public String getActualConnectionString() { + // TODO Auto-generated method stub + return super.getActualConnectionString(); + } + + private PoolingDriver getPoolingDriver() throws SQLException { + final PoolingDriver driver = (PoolingDriver)DriverManager.getDriver(URL_PREFIX);+ if (driver == null) { + getLogger().error("No JDBC driver for {}", URL_PREFIX); + } + return driver; + } + + private void setupDriver(final String connectionString) throwsSQLException {+ // + // First, we'll create a ConnectionFactory that the + // pool will use to create Connections. + // We'll use the DriverManagerConnectionFactory, + // using the connect string passed in the command line + // arguments. + // + final ConnectionFactory connectionFactory = newDriverManagerConnectionFactory(connectionString, null);+ + // + // Next, we'll create the PoolableConnectionFactory, whichwraps+ // the "real" Connections created by the ConnectionFactorywith+ // the classes that implement the pooling functionality. + // + final PoolableConnectionFactory poolableConnectionFactory =new PoolableConnectionFactory(connectionFactory,+ null); + + // + // Now we'll need a ObjectPool that serves as the + // actual pool of connections. + // + // We'll use a GenericObjectPool instance, although + // any ObjectPool implementation will suffice. + // + @SuppressWarnings("resource") + // This GenericObjectPool will be closed on shutown + final ObjectPool<PoolableConnection> connectionPool = newGenericObjectPool<>(poolableConnectionFactory);+ + // Set the factory's pool property to the owning pool + poolableConnectionFactory.setPool(connectionPool); + + loadDriver(poolingDriverClassName); + final PoolingDriver driver = getPoolingDriver(); + if (driver != null) { + driver.registerPool(poolName, connectionPool); + } + // + // Now we can just use the connect string"jdbc:apache:commons:dbcp:example"+ // to access our pool of Connections. + // + } + + public void shutdownDriver() throws SQLException { + final PoolingDriver driver = getPoolingDriver(); + if (driver != null) { + driver.closePool(poolName); + } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/639f093b/log4j-jdbc-dbcp2/src/site/manual/index.md----------------------------------------------------------------------diff --git a/log4j-jdbc-dbcp2/src/site/manual/index.mdb/log4j-jdbc-dbcp2/src/site/manual/index.mdnew file mode 100644 index 0000000..b7fb5a5 --- /dev/null +++ b/log4j-jdbc-dbcp2/src/site/manual/index.md @@ -0,0 +1,35 @@ +<!-- vim: set syn=markdown : --> +<!-- + Licensed to the Apache Software Foundation (ASF) under one ormore+ contributor license agreements. See the NOTICE file distributedwith+ this work for additional information regarding copyrightownership.+ The ASF licenses this file to You under the Apache License,Version 2.0+ (the "License"); you may not use this file except in compliancewith+ 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 orimplied.+ See the License for the specific language governing permissionsand+ limitations under the License. +--> + +# Log4j 2 JDBC Connection Source with Apache Commons DBCP 2 + +This module adds a connection source for JDBC Appenders. ThePoolingDriverConnectionSource+provides connection pooling through Apache Commons DBCP 2. + +## Requirements + +This module was introduced in Log4j 2.11.0 and requires ApacheCommonsDBCP 2 to provide+connection pooling. + +Some features may require optional +[dependencies](../runtime-dependencies.html). These dependencies arespecified in the+documentation for those features. + +Some Log4j features require external dependencies. +See the [Dependency Tree](dependencies.html#Dependency_Tree) +for the exact list of JAR files needed for these features. http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/639f093b/log4j-jdbc-dbcp2/src/site/site.xml----------------------------------------------------------------------diff --git a/log4j-jdbc-dbcp2/src/site/site.xmlb/log4j-jdbc-dbcp2/src/site/site.xmlnew file mode 100644 index 0000000..6d4cddc --- /dev/null +++ b/log4j-jdbc-dbcp2/src/site/site.xml @@ -0,0 +1,52 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributedwith+ this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version2.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 orimplied.+ See the License for the specific language governing permissions and + limitations under the License. + +--> +<project name="Log4j Core" + xmlns="http://maven.apache.org/DECORATION/1.4.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0http://maven.apache.org/xsd/decoration-1.4.0.xsd">+ <body> + <links> + <item name="Apache" href="http://www.apache.org/" /> + <item name="Logging Services" href="http://logging.apache.org/"/>+ <item name="Log4j" href="../index.html"/> + </links> + + <!-- Component-specific reports --> + <menu ref="reports"/> + + <!-- Overall Project Info --> + <menu name="Log4j Project Information" img="icon-info-sign"> + <item name="Dependencies" href="../dependencies.html" /> + <item name="Dependency Convergence" href="../dependency-convergence.html"/>+ <item name="Dependency Management" href="../dependency-management.html"/>+ <item name="Project Team" href="../team-list.html" /> + <item name="Mailing Lists" href="../mail-lists.html" /> + <item name="Issue Tracking" href="../issue-tracking.html" /> + <item name="Project License" href="../license.html" /> + <item name="Source Repository" href="../source-repository.html"/>+ <item name="Project Summary" href="../project-summary.html" /> + </menu> + + <menu name="Log4j Project Reports" img="icon-cog"> + <item name="Changes Report" href="../changes-report.html" /> + <item name="JIRA Report" href="../jira-report.html" /> + <item name="Surefire Report" href="../surefire-report.html" /> + <item name="RAT Report" href="../rat-report.html" /> + </menu> + </body> +</project> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/639f093b/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/ log4j/core/appender/db/jdbc/PoolingDriverConnectionSourceTest.java----------------------------------------------------------------------diff --git a/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/PoolingDriverConnectionSourceTest.java b/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/log4j/ core/appender/db/jdbc/PoolingDriverConnectionSourceTest.javanew file mode 100644 index 0000000..2b7b886 --- /dev/null +++ b/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/PoolingDriverConnectionSourceTest.java@@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributedwith+ * this work for additional information regarding copyrightownership.+ * The ASF licenses this file to You under the Apache license,Version2.0+ * (the "License"); you may not use this file except in compliancewith+ * 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 orimplied.+ * See the license for the specific language governing permissionsand+ * limitations under the license. + */ + +package org.apache.logging.log4j.core.appender.db.jdbc; + +import java.sql.Connection; +import java.sql.SQLException; + +import org.apache.logging.log4j.core.config.Property; +import org.junit.Assert; +import org.junit.Test; + +public class PoolingDriverConnectionSourceTest { + + @Test + public void testH2Properties() throws SQLException { + final Property[] properties = new Property[] { + // @formatter:off + Property.createProperty("username",JdbcH2TestHelper.USER_NAME),+ Property.createProperty("password",JdbcH2TestHelper.PASSWORD),+ // @formatter:on + }; + // @formatter:off + final PoolingDriverConnectionSource source =PoolingDriverConnectionSource.newPoolingDriverConnectionSourceBuilder()+ .setConnectionString(JdbcH2TestHelper.CONNECTION_STRING) + .setProperties(properties) + .build(); + // @formatter:on + try (Connection conn = source.getConnection()) { + Assert.assertFalse(conn.isClosed()); + } + } + + @Test + public void testH2PropertiesAndPoolName() throws SQLException { + final Property[] properties = new Property[] { + // @formatter:off + Property.createProperty("username",JdbcH2TestHelper.USER_NAME),+ Property.createProperty("password",JdbcH2TestHelper.PASSWORD),+ // @formatter:on + }; + // @formatter:off + final PoolingDriverConnectionSource source =PoolingDriverConnectionSource.newPoolingDriverConnectionSourceBuilder()+ .setConnectionString(JdbcH2TestHelper.CONNECTION_STRING) + .setProperties(properties) + .setPoolName("MyPoolName") + .build(); + // @formatter:on + try (Connection conn = source.getConnection()) { + Assert.assertFalse(conn.isClosed()); + } + } + + @Test + public void testH2UserAndPassword() throws SQLException { + // @formatter:off + final PoolingDriverConnectionSource source =PoolingDriverConnectionSource.newPoolingDriverConnectionSourceBuilder()+ .setConnectionString(JdbcH2TestHelper.CONNECTION_STRING) + .setUserName(JdbcH2TestHelper.USER_NAME.toCharArray()) + .setPassword(JdbcH2TestHelper.PASSWORD.toCharArray()) + .build(); + // @formatter:on + try (Connection conn = source.getConnection()) { + Assert.assertFalse(conn.isClosed()); + } + } + + @Test + public void testH2UserPasswordAndPoolName() throws SQLException{+ // @formatter:off + final PoolingDriverConnectionSource source =PoolingDriverConnectionSource.newPoolingDriverConnectionSourceBuilder()+ .setConnectionString(JdbcH2TestHelper.CONNECTION_STRING) + .setUserName(JdbcH2TestHelper.USER_NAME.toCharArray()) + .setPassword(JdbcH2TestHelper.PASSWORD.toCharArray()) + .setPoolName("MyPoolName") + .build(); + // @formatter:on + try (Connection conn = source.getConnection()) { + Assert.assertFalse(conn.isClosed()); + } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/639f093b/pom.xml----------------------------------------------------------------------diff --git a/pom.xml b/pom.xml index 31195f2..f1027f2 100644 --- a/pom.xml +++ b/pom.xml @@ -1320,6 +1320,7 @@ <module>log4j-jmx-gui</module> <module>log4j-samples</module> <module>log4j-bom</module> + <module>log4j-jdbc-dbcp2</module> <module>log4j-couchdb</module> <module>log4j-mongodb</module> <module>log4j-cassandra</module> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/639f093b/src/changes/changes.xml----------------------------------------------------------------------diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 3ca94e4..6398bb0 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -104,6 +104,9 @@ <action issue="LOG4J2-2198" dev="ggregory" type="update"> Update MongoDB dependencies from classic to modern. </action> + <action issue="LOG4J2-2186" dev="ggregory" type="add"> + Add a JDBC ConnectionSource that provides pooling throughApache Commons DBCP 2.+ </action> </release> <release version="2.10.0" date="2017-11-18" description="GA Release2.10.0"><action issue="LOG4J2-2120" dev="mikes" type="add" due-to="CarterDouglas Kozak ">http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/639f093b/src/site/xdoc/manual/appenders.xml----------------------------------------------------------------------diff --git a/src/site/xdoc/manual/appenders.xmlb/src/site/xdoc/manual/appenders.xmlindex c62a284..4f106df 100644 --- a/src/site/xdoc/manual/appenders.xml +++ b/src/site/xdoc/manual/appenders.xml @@ -1070,9 +1070,10 @@ CREATE TABLE logs ( <p>When configuring the JDBCAppender, you must specify a<code>ConnectionSource</code> implementation fromwhich the Appender gets JDBC connections. You must useexactly one of the following nested elements:</p><ul> - <li><a href="#JDBCDataSource"><code><DataSource></code></a></li>- <li><a href="#JDBCConnectionFactory"><code><ConnectionFactory></code></a></li>- <li><a href="#JDBCDriverManager"><code><DriverManager></code></a></li>+ <li><a href="#JDBCDataSource"><code><DataSource></code></a>:Uses JNDI.</li>+ <li><a href="#JDBCConnectionFactory"><code><ConnectionFactory></code></a>: Points to a class-methodpairto provide JDBC connections.</li>+ <li><a href="#JDBCDriverManager"><code><DriverManager></code></a>: A quick and dirty way to get off the ground, no connection pooling.</li>+ <li><a href="#JDBCPoolingDriver"><code><PoolingDriver></code></a>: Uses Apache Commons DBCP to provide connection pooling.</li></ul> <a name="JDBCDataSource"/> <table> @@ -1149,6 +1150,27 @@ CREATE TABLE logs ( <td>A list of properties. You cannot specify bothproperties and a user name or password.</td></tr> </table> + <a name="JDBCPoolingDriver"/> + <table> + <caption align="top">PoolingDriver Parameters (ApacheCommons DBCP)</caption>+ <tr> + <th>Parameter Name</th> + <th>Type</th> + <th>Description</th> + </tr> + <tr> + <td>DriverManager parameters</td> + <td>DriverManager parameters</td> + <td>This connection source inherits all parameter fromthe DriverManager connection source.</td>+ </tr> + <tr> + <td>poolName</td> + <td>String</td> + <td>The pool name used to pool JDBC Connections.Defaults to <code>example</code>. You can use the JDBC+ connection string prefix <code>jdbc:apache:commons:dbcp:</code>followed by the pool name if you want+ to use a pooled connection elsewhere. For example:<code>jdbc:apache:commons:dbcp:example</code>.</td>+ </tr> + </table> <p>When configuring the JDBCAppender, use the nested<code><Column></code> elements to specify whichcolumns in the table should be written to and how to writeto them. The JDBCAppender uses this informationto formulate a <code>PreparedStatement</code> to insertrecords without SQL injection vulnerability.</p>