Java log4j与使用c3p0的JNDI
我在使用c3p0时遇到log4j的问题 我的log4j2.xml文件: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
<?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>