在项目中使用了tomcat6+proxool+log4j-1.2.15的组合,碰见了以下问题
1.使用了proxool DataSource的 ObjectFactory configuration 配置方式(
http://proxool.sourceforge.net/datasource.html#conf) ,即在server.xml中加如下配置
<context>
<Resource
name="jdbc/mydatasource"
auth="Container"
type="javax.sql.DataSource"
factory="org.logicalcobwebs.proxool.ProxoolDataSource"
proxool.alias="hrs"
user="joe"
password="******"
delegateProperties="foo=bar"
proxool.driver-url="jdbc:oracle:thin:@127.0.0.1:1521:DB"
proxool.driver-class="oracle.jdbc.driver.OracleDriver"/>
</context>
这种配置方式要求把proxool-0.9.0RC3.jar,数据库驱动,commons-logging.jar 放在$CATALINA_HOME/lib目录下,放commons-logging是因为proxool中使用到了。此处出现了第一个问题,按照我的理解,commons-logging 会自动选择使用logging的库,如果找不到log4j应该会使用JDK的Logging API,但是我的实际情况是
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@80fa6f for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) (Caused by org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@80fa6f for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category))
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
at org.springframework.web.context.ContextLoader.<init>(ContextLoader.java:139)
at org.springframework.web.context.ContextLoaderListener.createContextLoader(ContextLoaderListener.java:57)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:48)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3830)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4337)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@80fa6f for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category)
at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:413)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
... 21 more
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Category
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357)
at java.lang.Class.getConstructor0(Class.java:2671)
at java.lang.Class.getConstructor(Class.java:1629)
at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:410)
... 22 more
2008-7-3 12:28:15 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
于是我不得不把log4j-1.2.15也放在了$CATALINA_HOME/lib目录下。
2.于是出现了在webapp的lib目录下是否要包含log4j.jar的问题,
如果不包含,根据tomcat6的classloader规则,大家使用统一个log4j,也就使用相同的log4j配置,无法针对不同的应用做不同的配置。
如果包含,又会出现以下错误
log4j:ERROR A "org.apache.log4j.xml.DOMConfigurator" object is not assignable to a "org.apache.log4j.spi.Configurator" variable.
log4j:ERROR The class "org.apache.log4j.spi.Configurator" was loaded by
log4j:ERROR [org.apache.catalina.loader.StandardClassLoader@110d81b] whereas object of type
log4j:ERROR "org.apache.log4j.xml.DOMConfigurator" was loaded by [WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@110d81b
].
log4j:ERROR Could not instantiate configurator [org.apache.log4j.xml.DOMConfigurator].
请教一下,应该如何部署才能解决这些问题?
问题补充:to lggege: 依赖tomcat很多时候恰恰是避免部署的麻烦,因为tomcat配置只有一次,程序的部署可能会很频繁。
相关推荐
mvc架构,选课系统架构,proxool,log4j,properties文件 里面有 常用 jar 在lib文件夹下 proxool, log4j,common-logs jdbc web.xml 是配置好的 启动tomcat,输入 http://localhost:8080/sscs/Admin.do 即可访问 连接池...
最后,为了增强调试和问题排查能力,应在`$CATALINA_HOME/common/classes/log4j.properties`文件中配置Proxool的日志记录规则。通过设置不同的日志级别(如DEBUG、INFO、WARN等),可以控制日志输出的详细程度,从而...
接着,我们需要修改 OA 的配置文件 log4j.properties 和 proxool.xml。在 log4j.properties 文件中,我们需要修改日志的路径,而在 proxool.xml 文件中,我们需要修改数据库的密码。 启动 OA 现在,我们可以启动 ...
log4j-1.2.9.jar msbase.jar mssqlserver.jar msutil.jar MySQL oracle11 oracle9 proxool-0.8.3.jar servlet-api.jar Sql Driver2000 Sql Driver2005 struts1upload struts2upload struts2必需的包 tomcat-dbcp.jar...
IOIF以EXTJS为前端,以Spring、Struts、Hibernate为后端,整合了Proxool、Log4j、Quartz、Oscache、Castor、Memcached、redis等优秀的开源软件。 支持Tomcat6及Resin3等应用服务器,支持Oracle、MYSQL等数据库。IOIF...
jstl.jar jta.jar jxl.jar log4j-1.2.11.jar log4j-1.2.14.jar mysql-connector-java-3.1.13-bin.jar Oracle10g.jar oscache-2.1.jar persistence.jar poi-2.5.1.jar portlet-api.jar proxool-0.8.3.jar spring-...
通过追踪log发现两者的差别主要集中在DB操作上,相同的数据环境下,相同的SQL文批处理执行的时间大约是Web执行的4倍,而整个处理过程中DB操作占绝大部分时间,以外的逻辑处理时间可以忽略不计,因此可以判斷整个处理...
3. **配置平台日志信息**: 修改`/WEB-INF/classes/Log4j.properties`文件中的日志保存路径(`log4j.appender.LogFile.File`)。 4. **配置数据库连接池信息**: 修改`/WEB-INF/classes/Proxool.properties`文件中的...
- `slf4j-log4j12-1.5.11.jar` - `log4j-1.2.15.jar` **创建 DataSource 示例代码:** ```java // 创建 BoneCPDataSource 实例 BoneCPDataSource ds = new BoneCPDataSource(); ds.setDriverClass(...
在服务端组件方面,IOIF融合了Proxool数据库连接池、Log4j日志管理、Quartz定时任务调度、Oscache缓存机制、Castor数据绑定、Memcached和Redis内存数据库等优秀开源软件。 IOIF框架支持多种应用服务器,如Tomcat6和...
2. **日志框架**:如log4j或其他日志系统,若不适当配置,也可能增加PermGen Space的负担。 3. **ORM框架**:例如Hibernate,尤其是老版本如3.2,在特定环境下(如Tomcat服务器)可能导致PermGen Space迅速膨胀。 4....
Hibernate通过此库提供了一个统一的日志接口,并支持多种日志系统,如Log4j、Java Util Logging等。这样可以在不影响应用的情况下轻松切换日志实现。 #### 9. ant.jar Apache Ant 是一个基于Java的构建工具,主要...
- Log4j,Jakarta Commons Logging:日志记录工具。 15. **缓存框架**: - OSCache,JBoss Cache,Ehcache:提高性能的缓存解决方案。 16. **工作流**: - jBPM:工作流管理系统。 17. **Portal**: - JBoss ...
--启用Proxool连接池--> <property name="proxool.hibernate.sql.log">false</property> <!--Proxool配置--> <property name="proxool.mysql.driver.class">...