logging-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: logging-log4j2 git commit: [LOG4J2-2186] Add a JDBC ConnectionSource that provides pooling through Apache Commons DBCP 2.
Date Fri, 19 Jan 2018 05:22:00 GMT
On Thu, Jan 18, 2018 at 9:28 PM, Ralph Goers <ralph.goers@dslextreme.com>
wrote:

> -1
>
> Please revert and move this to the log4j plugins project.
>

Hello,

I do not see what technical reason this -1 is based on since none have been
given. The new module has one class in it with one test that runs in less
than a second. So I will do nothing tonight. Tomorrow I am taking the day
off and will ponder further.

The log4j plugins project has never been released, has no way to be in sync
with the main project, and I've not heard of a plan or ideas on how to
manage the relationship between the main project and any other side
projects. For my money, the only side project I see are the Scala projects
and their versioning are confusing to me. YMMV.

Gary


>
> Ralph
>
> > On Jan 18, 2018, at 8:54 PM, ggregory@apache.org wrote:
> >
> > Repository: logging-log4j2
> > Updated Branches:
> >  refs/heads/master bb6fcd09e -> 639f093b8
> >
> >
> > [LOG4J2-2186] Add a JDBC ConnectionSource that provides pooling through
> > Apache 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
> /639f093b
> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6
> 39f093b
> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6
> 39f093b
> >
> > Branch: refs/heads/master
> > Commit: 639f093b8103df2c2eda8d62fd12d7619d98ac04
> > Parents: bb6fcd0
> > Author: Gary Gregory <garydgregory@gmail.com>
> > Authored: Thu Jan 18 20:54:47 2018 -0700
> > Committer: Gary Gregory <garydgregory@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/6
> 39f093b/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 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. -->
> > +
> > +<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.0
> http://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 Commons
> DBCP 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%</issueLinkT
> emplate>
> > +          <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-suppressi
> ons.xml</suppressionsLocation>
> > +          <enableRulesSummary>false</enableRulesSummary>
> > +          <propertyExpansion>basedir=${basedir}</propertyExpansion>
> > +          <propertyExpansion>licensedir=${log4jParentDir}/checkstyle-h
> eader.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 &#169;
> {inceptionYear}-{currentYear} {organizationName}. All Rights Reserved.<br />
> > +            Apache Logging, Apache Log4j, Log4j, Apache, the Apache
> feather logo, the Apache Logging project logo,
> > +            and the Apache Log4j logo are trademarks of The Apache
> Software Foundation.</p>]]></bottom>
> > +          <!-- module link generation is completely broken in the
> javadoc 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/6
> 39f093b/log4j-jdbc-dbcp2/src/main/java/org/apache/logging/lo
> g4j/core/appender/db/jdbc/PoolingDriverConnectionSource.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-jdbc-dbcp2/src/main/java/org/apache/logging/log4j/co
> re/appender/db/jdbc/PoolingDriverConnectionSource.java
> b/log4j-jdbc-dbcp2/src/main/java/org/apache/logging/log4j/co
> re/appender/db/jdbc/PoolingDriverConnectionSource.java
> > new file mode 100644
> > index 0000000..80adbb3
> > --- /dev/null
> > +++ b/log4j-jdbc-dbcp2/src/main/java/org/apache/logging/log4j/co
> re/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 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.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.PluginBuilderFa
> ctory;
> > +
> > +/**
> > + * A {@link ConnectionSource} that uses a JDBC connection string, a
> user name, and a password to call
> > + * {@link DriverManager#getConnection(String, String, String)}. The
> connections are served from an
> > + * <a href="http://commons.apache.org/proper/commons-dbcp/">Apache
> Commons DBCP</a> pooling driver.
> > + */
> > +@Plugin(name = "PoolingDriver", category = Core.CATEGORY_NAME,
> elementType = "connectionSource", printObject = true)
> > +public final class PoolingDriverConnectionSource extends
> DriverManagerConnectionSource {
> > +
> > +    /**
> > +     * 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 compiler happy.
> > +    @PluginBuilderFactory
> > +    public static <B extends Builder<B>> B
> newPoolingDriverConnectionSourceBuilder() {
> > +        return new Builder<B>().asBuilder();
> > +    }
> > +
> > +    private final String poolingDriverClassName =
> "org.apache.commons.dbcp2.PoolingDriver";
> > +
> > +    private final String poolName;
> > +
> > +    public PoolingDriverConnectionSource(final String driverClassName,
> final String connectionString,
> > +            final char[] userName, final char[] password, final
> Property[] 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) throws
> SQLException {
> > +        //
> > +        // 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 = new
> DriverManagerConnectionFactory(connectionString, null);
> > +
> > +        //
> > +        // Next, we'll create the PoolableConnectionFactory, which wraps
> > +        // the "real" Connections created by the ConnectionFactory with
> > +        // 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 = new
> GenericObjectPool<>(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/6
> 39f093b/log4j-jdbc-dbcp2/src/site/manual/index.md
> > ----------------------------------------------------------------------
> > diff --git a/log4j-jdbc-dbcp2/src/site/manual/index.md
> b/log4j-jdbc-dbcp2/src/site/manual/index.md
> > new 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 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.
> > +-->
> > +
> > +# Log4j 2 JDBC Connection Source with Apache Commons DBCP 2
> > +
> > +This module adds a connection source for JDBC Appenders. The
> PoolingDriverConnectionSource
> > +provides connection pooling through Apache Commons DBCP 2.
> > +
> > +## Requirements
> > +
> > +This module was introduced in Log4j 2.11.0 and requires Apache Commons
> DBCP 2 to provide
> > +connection pooling.
> > +
> > +Some features may require optional
> > +[dependencies](../runtime-dependencies.html). These dependencies are
> specified 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/6
> 39f093b/log4j-jdbc-dbcp2/src/site/site.xml
> > ----------------------------------------------------------------------
> > diff --git a/log4j-jdbc-dbcp2/src/site/site.xml
> b/log4j-jdbc-dbcp2/src/site/site.xml
> > new 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 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.
> > +
> > +-->
> > +<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.0
> http://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/6
> 39f093b/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/lo
> g4j/core/appender/db/jdbc/PoolingDriverConnectionSourceTest.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/log4j/co
> re/appender/db/jdbc/PoolingDriverConnectionSourceTest.java
> b/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/log4j/co
> re/appender/db/jdbc/PoolingDriverConnectionSourceTest.java
> > new file mode 100644
> > index 0000000..2b7b886
> > --- /dev/null
> > +++ b/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/log4j/co
> re/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 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.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/6
> 39f093b/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/6
> 39f093b/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 through
> Apache Commons DBCP 2.
> > +      </action>
> >     </release>
> >     <release version="2.10.0" date="2017-11-18" description="GA Release
> 2.10.0">
> >       <action issue="LOG4J2-2120" dev="mikes" type="add" due-to="Carter
> Douglas Kozak ">
> >
> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6
> 39f093b/src/site/xdoc/manual/appenders.xml
> > ----------------------------------------------------------------------
> > diff --git a/src/site/xdoc/manual/appenders.xml
> b/src/site/xdoc/manual/appenders.xml
> > index 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 from
> >             which the Appender gets JDBC connections. You must use
> exactly one of the following nested elements:</p>
> >           <ul>
> > -            <li><a href="#JDBCDataSource"><code>&
> lt;DataSource&gt;</code></a></li>
> > -            <li><a href="#JDBCConnectionFactory">
> <code>&lt;ConnectionFactory&gt;</code></a></li>
> > -            <li><a href="#JDBCDriverManager"><cod
> e>&lt;DriverManager&gt;</code></a></li>
> > +            <li><a href="#JDBCDataSource"><code>&lt;DataSource&gt;</code></a>:
> Uses JNDI.</li>
> > +            <li><a href="#JDBCConnectionFactory">
> <code>&lt;ConnectionFactory&gt;</code></a>: Points to a class-method
pair
> to provide JDBC connections.</li>
> > +            <li><a href="#JDBCDriverManager"><cod
> e>&lt;DriverManager&gt;</code></a>: A quick and dirty way to get
off the
> ground, no connection pooling.</li>
> > +            <li><a href="#JDBCPoolingDriver"><cod
> e>&lt;PoolingDriver&gt;</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 both
> properties and a user name or password.</td>
> >             </tr>
> >           </table>
> > +          <a name="JDBCPoolingDriver"/>
> > +          <table>
> > +            <caption align="top">PoolingDriver Parameters (Apache
> Commons 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 from
> the 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>&lt;Column&gt;</code> elements to specify which
> >             columns in the table should be written to and how to write
> to them. The JDBCAppender uses this information
> >             to formulate a <code>PreparedStatement</code> to insert
> records without SQL injection vulnerability.</p>
> >
> >
>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message