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 Mon, 22 Jan 2018 22:20:19 GMT
On Mon, Jan 22, 2018 at 3:14 PM, Ralph Goers <ralph.goers@dslextreme.com>
wrote:

> I started to read it but it is too long.  To be honest I would love it if
> I could just run the release from Jenkins. Unfortunately, that would
> require someone’s code signing key which would be a bit problematic to
> install on a shared server. In addition, I am a bit paranoid about making
> sure the build is going to work before starting it. We have lots of cases
> where the build works on our machines and fails in Jenkins, or vice versa.
> And the Jenkins build seems to fail 50% of them time anyway.
>

What used to make the Jenkins build fail a lot was the log4j-osgi module
tests. I fixed that last week. Jenkins still does randomly fail
uploading/downloading files though. Nothing we can do about that one.

The code signing stuff is a non-starter, you can't just put your key up
there.

Gary


> Ralph
>
> > On Jan 22, 2018, at 1:54 PM, Matt Sicker <boards@gmail.com> wrote:
> >
> > I read this blog post recently about build tools and found it
> interesting: <
> > http://www.lihaoyi.com/post/BuildToolsasPureFunctionalPrograms.html>.
> > Perhaps we can lift some ideas from here to find some build optimizations
> > we may have missed (e.g., caching settings).
> >
> > On 22 January 2018 at 14:40, Gary Gregory <garydgregory@gmail.com>
> wrote:
> >
> >> On Mon, Jan 22, 2018 at 12:26 PM, Matt Sicker <boards@gmail.com> wrote:
> >>
> >>> I still haven't seen a nice way to integrate multiple Maven-generated
> >>> websites as it is. If we broke into multiple repositories, we'd have to
> >>> basically rewrite the website infrastructure as well (which I've been
> >>> thinking about for a while anyways). As a result, either direction we
> >> take
> >>> (monorepo or multirepo) will require build optimizations (and not just
> >>> involving unit tests).
> >>>
> >>> Based on wall time, what Remko is proposing makes the most sense. If we
> >> can
> >>> reduce the wall time of running tests significantly, then we'll solve a
> >>> majority of the problem.
> >>>
> >>> If you wonder how much worse it could get, though, take a look at
> Camel.
> >>> They have literally dozens of modules with a full build taking hours.
> If
> >>> each component was released separately, they'd probably never get
> updated
> >>> considering how many components are about very specific libraries that
> >> not
> >>> many people would know how to verify or test. We have something similar
> >>> here as we add more esoteric appenders, logger adapters, and language
> >>> bindings.
> >>>
> >>> As a follow up, if there is a way to reduce the full build and release
> >> time
> >>> by switching to a different build tool (e.g., Gradle, Bazel, Ant/Ivy,
> or
> >>> even something else in the JVM ecosystem not specific to Java), that
> may
> >>> also be worth investigating. I don't think it'll be necessary, but it's
> >>> something worth considering later on.
> >>>
> >>
> >> Yeah, this business of running the tests three times is wacky (test,
> >> jacoco, and site?) Surely, once the tests pass once to build the site
> for
> >> example, the other mvn invocations could use -DskipTests?
> >>
> >> The code coverage is a different story. Maybe there is a way to run
> Jacoco
> >> and have the test results saved and reused by the site build for the
> code
> >> coverage report. Basically, this would skip the "test" goal/phase.
> >>
> >> Arg,
> >> Gary
> >>
> >>
> >>> On 21 January 2018 at 00:18, Remko Popma <remko.popma@gmail.com>
> wrote:
> >>>
> >>>> This looks promising:
> >>>> http://maven.apache.org/surefire/maven-surefire-
> >>>> plugin/examples/fork-options-and-parallel-execution.html
> >>>> (especially the @NotThreadSafe annotation, potentially in combination
> >>> with
> >>>> JUnit Suits)
> >>>>
> >>>>
> >>>> On Sun, Jan 21, 2018 at 13:12 Remko Popma <remko.popma@gmail.com>
> >> wrote:
> >>>>
> >>>>> Mikael, Ralph,
> >>>>>
> >>>>> Have you really thought through the implications of having a separate
> >>>>> repository for each module? The overhead is very large!
> >>>>>
> >>>>> It would mean:
> >>>>> * a separate website for each repo (our current Log4j2 website only
> >>> knows
> >>>>> about the modules in the logging-log4j project).
> >>>>> * a separate release and release vote would need to be performed *for
> >>>> each
> >>>>> repo*. This process is so heavy that we only do it once a month for
> >>>> Log4j2.
> >>>>> Imagine doing this 10 times when we have 10 modules each in separate
> >>>> repos.
> >>>>> * synchronizing with the main Log4j project becomes checking and
> >>> updating
> >>>>> 10 projects instead of one.
> >>>>>
> >>>>> All of these concerns already hold for a single log4j-plugins
> >> project,
> >>>>> they just multiply for each additional repo.
> >>>>>
> >>>>> All,
> >>>>>
> >>>>> Gary does have a point when he says we don’t have a clear plan for
> >>>>> managing the log4j-plugins repo. Who is going to check that the
> >> plugins
> >>>>> still compile after a Log4j2 release? Are we going to release a new
> >>>> plugins
> >>>>> version for each Log4j2 release? If not, when _will_ we release new
> >>>>> log4j-plugins versions?
> >>>>>
> >>>>> Given our terrible track record for the log4j-tools project since we
> >>>>> moved TcpServer etc. into that repo (nobody showing interest to do
> >> the
> >>>>> work to release it), I agree these are valid concerns.
> >>>>>
> >>>>> On the other hand, I also completely agree with Ralph that the build
> >>>> takes
> >>>>> much too long. Something needs to be done and Ralph is clearly
> >>> signalling
> >>>>> he won't have this problem ignored any longer.
> >>>>>
> >>>>> I'm not sure that moving things out of the main repo is the only
> >>> solution
> >>>>> to make the build faster. If it really is the *only* solution, then
> >>> fine.
> >>>>> But be mindful we are trading one problem for a set of new ones, and,
> >>>> just
> >>>>> like we can't ignore the slow build problem, we also cannot ignore
> >> the
> >>>> new
> >>>>> problems introduced by this solution (keeping the new repo(s) in
> >> sync,
> >>>>> building new web sites and linking them into the main site, release
> >>>> timing
> >>>>> etc).
> >>>>>
> >>>>> PROPOSAL:
> >>>>> I think all of us should take responsibility for speeding up the
> >> build
> >>>> and
> >>>>> make it our first priority.
> >>>>> If you want to add anything to the main project, *first reduce the
> >>> build
> >>>>> duration*. First find an existing test and speed it up. Only then add
> >>> new
> >>>>> stuff, keeping the total build time to the same or less than it was
> >>>>> before.  Building core and running its tests used to take 8 minutes.
> >>> Now
> >>>> it
> >>>>> takes 19:10 (`mvn clean package` on the whole project takes 24:22).
> >>>>>
> >>>>> The core tests clearly are a major bottleneck.
> >>>>>
> >>>>> Speeding up the core tests is something we can all work on. Can we
> >>> split
> >>>>> the tests into a set that can be run multi-threaded in parallel
> >>>> (fastest),
> >>>>> a different set that does not require forking (fast) and a third set
> >>> that
> >>>>> requires forking for every test (slowest)?
> >>>>>
> >>>>> On the other hand, if we want to move things out of the main repo we
> >>> need
> >>>>> a plan for the new repo(s). There is a one-time work of setting up
> >> web
> >>>>> sites and integrating them with the main site, but on an ongoing
> >> basis
> >>> we
> >>>>> need some way to verify that a change in log4j-core did not break any
> >>>>> plugins, and agree to do a plugins release if it did break something.
> >>>>>
> >>>>> Remko
> >>>>>
> >>>>>
> >>>>> On Sun, Jan 21, 2018 at 2:27 Ralph Goers <ralph.goers@dslextreme.com
> >>>
> >>>>> wrote:
> >>>>>
> >>>>>> I am fine with doing that but we would still want a way to get to
> >> all
> >>>> the
> >>>>>> plugin sites from the log4j web site. Maven does that and maintains
> >> a
> >>>> list
> >>>>>> at https://maven.apache.org/plugins/ <https://maven.apache.org/
> >>> plugins/
> >>>>> .
> >>>>>> I think the easiest way to manage a page like that would to have it
> >>> be a
> >>>>>> separate page in the CMS that the log4j site links to.
> >>>>>>
> >>>>>> Ralph
> >>>>>>
> >>>>>>> On Jan 20, 2018, at 8:29 AM, Mikael Ståldal <mikes@apache.org>
> >>> wrote:
> >>>>>>>
> >>>>>>> As I wrote recently, I don't think that having a kitchen-sink
> >>> plugins
> >>>>>> repository is a good way to solve this. Eventually that repository
> >>> will
> >>>> get
> >>>>>> too big.
> >>>>>>>
> >>>>>>> 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.
> >>>>>>>> Ralph
> >>>>>>>>> On Jan 18, 2018, at 10:24 PM, Gary Gregory <
> >>> garydgregory@gmail.com>
> >>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>> On Thu, Jan 18, 2018 at 10:20 PM, Ralph Goers <
> >>>>>> ralph.goers@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"?
> >> ;-)
> >>>>>>>>>
> >>>>>>>>> Gary
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>> Ralph
> >>>>>>>>>>
> >>>>>>>>>>> On Jan 18, 2018, at 10:15 PM, Gary Gregory <
> >>>> garydgregory@gmail.com>
> >>>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>> On Thu, Jan 18, 2018 at 9:43 PM, Ralph Goers <
> >>>>>> ralph.goers@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.
> >>>>>>>>>> I
> >>>>>>>>>>> must have not run the clean goal or some-such.
> >>>>>>>>>>>
> >>>>>>>>>>> Gary
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>> Ralph
> >>>>>>>>>>>>
> >>>>>>>>>>>>> On 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.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 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/
> >>>>>>>>>>>> 639f093b
> >>>>>>>>>>>>>> Diff:
> >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/
> >>>>>>>>>>>> 639f093b
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> 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/
> >>>>>>>>>>>> 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 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%</
> >>>>>>>>>>>> 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
> >>> &#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/
> >>>>>>>>>>>> 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.java
> >>>>>>>>>>>>>> new 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
> >>>>>> 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.
> >>>>>>>>>>>> PluginBuilderFactory;
> >>>>>>>>>>>>>> +
> >>>>>>>>>>>>>> +/**
> >>>>>>>>>>>>>> + * 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/
> >>>>>>>>>>>> 639f093b/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/
> >>>>>>>>>>>> 639f093b/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/
> >>>>>>>>>>>> 639f093b/log4j-jdbc-dbcp2/src/test/java/org/apache/logging/
> >>>>>>>>>>>> log4j/core/appender/db/jdbc/PoolingDriverConnectionSourceT
> >>>> est.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.java
> >>>>>>>>>>>>>> new 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
> >>>>>> 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.newPoolingDriverConnectionSour
> >>> ceBuilder()
> >>>>>>>>>>>>>> +
> >>>>>> .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.newPoolingDriverConnectionSour
> >>> ceBuilder()
> >>>>>>>>>>>>>> +
> >>>>>> .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.newPoolingDriverConnectionSour
> >>> ceBuilder()
> >>>>>>>>>>>>>> +
> >>>>>> .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.newPoolingDriverConnectionSour
> >>> ceBuilder()
> >>>>>>>>>>>>>> +
> >>>>>> .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
> >>>>>> 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/
> >>>>>>>>>>>> 639f093b/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"><
> >>>>>>>>>>>> code>&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"><
> >>>>>>>>>>>> code>&lt;DriverManager&gt;</code></a>: A quick and dirty way
> >>> to
> >>>>>> get off
> >>>>>>>>>>>> the ground, no connection pooling.</li>
> >>>>>>>>>>>>>> +            <li><a href="#JDBCPoolingDriver"><
> >>>>>>>>>>>> code>&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>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Matt Sicker <boards@gmail.com>
> >>>
> >>
> >
> >
> >
> > --
> > Matt Sicker <boards@gmail.com>
>
>
>

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