Java log4j与使用c3p0的JNDI

Java log4j与使用c3p0的JNDI,java,jdbc,jndi,c3p0,log4j2,Java,Jdbc,Jndi,C3p0,Log4j2,我在使用c3p0时遇到log4j的问题 我的log4j2.xml文件: <?xml version="1.0" encoding="UTF-8"?> <Configuration status="error"> <Appenders> <JDBC name="databaseAppender" tableName="ACCESS_LOGS"> <DataSource jndiName="java

我在使用c3p0时遇到log4j的问题

我的log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">
    <Appenders>
        <JDBC name="databaseAppender" tableName="ACCESS_LOGS">
            <DataSource jndiName="java:/comp/env/jdbc/dbUR" />
            <Column name="USER_DESC" pattern="%user" />
            <Column name="DATED"  isEventTimestamp="true" />
            <Column name="LOGGER" pattern="%logger" />
            <Column name="AUTH_LEVEL" pattern="%level" />            
            <Column name="REASON" pattern="%message" />            
        </JDBC>
    </Appenders>
    <Loggers>
        <Root level="warn">
            <AppenderRef ref="databaseAppender"/>
        </Root>
    </Loggers>
</Configuration>
我得到以下错误:

2015-02-25 12:09:49.624:WARN:oejs.ServletHandler:qtp857668665-16: 
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.isClosed()Z
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:393) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:393)
    at ...
可能是什么问题?有什么想法吗

以下是maven依赖项及其log4j和c3p0版本:

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.0.2</version>
        </dependency>

解决了将log4j2降级为2.0的问题。但为什么这不适用于2.0.2版?当c3p0初始化时,它会在INFO上记录一条横幅,其中包括c3p0版本,然后才转储配置信息。请检查那个横幅。不管您的依赖项是什么,看起来您的应用程序在其类路径中找到了一个较旧版本的c3p0,信息:初始化c3p0-0.9.5该错误表明JDBC 4中没有添加Statement.isClosed方法,这意味着c3p0本身不支持JDBC 4,或者您使用的JDBC驱动程序是JDBC3驱动程序,而不是JDBC4或4.1、4.2。您使用的是哪种JDBC驱动程序?因此,使用javap-c对新下载的0.9.5JAR进行验证表明,定义了NewProxyPreparedStatement的isClosed方法。在您的世界中的某个地方,一定有一个较旧版本的库,您看到的行为是0.9.5之前版本的预期行为,该版本不支持较新的JDBC4方法。如果您看到的是0.9.5横幅,则可能存在一个问题,即一些类加载器加载了旧版本,而0.9.5也加载了。我会尝试在环境中搜索旧版本。
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.0.2</version>
        </dependency>