“Tomcat”目录存档

Tomcat遇到”Error listenerStart”或”Error filterStart”问题且无详细日志时的log配置.

2007年12月4日,星期二

昨天部署web应用到Tomcat之后,无法成功启动,并且控制台没有详细的错误信息,
顶多就两行提示信息,例如:
严重: Error listenerStart
严重: Context [/lizongbo] startup failed due to previous errors

或者

严重: Error filterStart
org..catalina.core.StandardContext start
严重: Context startup failed due to previous errors

查找logs目录下的信息,除了这两句话,也没别的辅助内容.
给查错带来了困难,在这种情况下,是因为Tomcat自身的默认日志没有将一些错误信息输出到控制台或文件,
这个时候则需要配置Tomcat自身的log,启用详细的调试日志.

在Tomcat 5.5和Tomcat 6.0中的配置基本一样,只是相关文件放的目录有所不同.

首先需要准备的文件为:

1..jar , 下载地址 : http://www.apache.org/dist/logging/log4j/1.2.15/apache-log4j-1.2.15.zip
2. 5.5所需的 commons-logging.jar,下载地址: http://www.apache.org/dist/commons/logging/binaries/commons-logging-1.1.zip

3.log4j配置文件:
log4j.properties
配置内容为:

log4j.rootLogger=ERROR,R

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p]%t-%c-%m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/lizongbo.log
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%p]%t-%c-%m%n

log4j.logger.org.apache.catalina=INFO,R,CONSOLE

#日志级别不能太低,如果配置为debug的话,输出的日志信息太多,导致tomcat启动非常的慢.

4.Tomcat 6.0所需的juli替换文件:

http://www.apache.org/dist/tomcat/tomcat-6/v6.0.14/bin/extras/tomcat-juli-adapters.jar

http://www.apache.org/dist/tomcat/tomcat-6/v6.0.14/bin/extras/tomcat-juli.jar

在Tomcat6.0中,

将tomcat-juli-adapters.jar,log4j-1.2.15.jar,log4j.properties复制到D:\Java\ApacheTomcat6.0.14\lib下面.

将tomcat-juli.jar复制到D:\Java\apache-tomcat-6.0.14\bin\下面.

然后启动tomcat,就可以在D:\Java\apache-tomcat-6.0.14\logs下看到lizongbo.log了.

在 Tomcat5.5中,

将commons-logging-1.1.jar,log4j-1.2.15.jar,复制到D:\Java\apache-tomcat-5.5.25\common\lib下面.
将log4j.properties复制到D:\Java\apache-tomcat-5.5.25\common\classes下面.

然后启动tomcat,就可以在D:\Java\apache-tomcat-5.5.25\logs下看到lizongbo.log了.

在这个时候,再通过日志文件来分析,则会发现出现这种错误的情况可能有:
(以下是我遇到的出错情况,大多是些低级错误)
1.webapps要用到的classe文件根本没有复制到WEB-INF/classes目录下面
(java.lang.NoClassDefFoundError,而这个信息可能默认没输出到控制台,尤其是用了spring的,昨天就是这个粗心的低级错误)
2.要用到lib文件没有复制完,缺少lib
3.lib下的同一个库的jar文件存在多个不同版本,引起版本冲突.
4.lib下的jar与tomcat版本不相对应(我遇到的问题是web应用在Tomcat5.5上运行正常,换到Tomcat6.0上就出错,
例如一个用了struts的webapp在Tomcat 6上报下面的错误
“Parse Fatal Error at line 17 column 6: The processing instruction
target matching “[xX][mM][lL]” is not allowed” )

愿意看英文的可以参考官方网站说明:

http://tomcat.apache.org/tomcat-6.0-doc/logging.html

http://tomcat.apache.org/tomcat-5.5-doc/logging.html

Tags: , ,

Netbeans IDE 6.0正式发布了

2007年12月4日,星期二

  IDE 6.0正式发布,安装程序都在:

http://dlc.sun.com.edgesuite.net/netbeans/6.0/final/bundles/

解压版的安装程序在:

http://dlc.sun.com.edgesuite.net/netbeans/6.0/final/zip/

我下载的是javaee版:

http://dlc.sun.com.edgesuite.net/netbeans/6.0/final/bundles/netbeans-6.0-javaee-windows.exe

集成了 GlassFish v2和Apache 6.0.14,安装的时候可以选择不安装GlassFish v2和Apache 6.0.14,在启动netbeans之后再配置GlassFish v2和Apache 6.0.14指向已经安装好的目录,节约一点硬盘空间.

:

http://download.java.net/javaee5/v2.1/promoted/WINNT/glassfish-installer-v2.1-b10-windows.jar

http://download.java.net/javaee5/v2.1/promoted/source/glassfish-v2.1-b10-src.zip

6.0.14:

http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.14/bin/apache-tomcat-6.0.14.zip

http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.14/src/apache-tomcat-6.0.14-src.zip

打包了netbeans 6.0的 1.6.03:

http://sunmicro.vo.llnwd.net/c1/netbeans/6.0/final/bundles/jdk/jdk6-u3-netbeans-6.0-javase-windows.exe

打算 以后将主要使用netbeans进行java开发了.

Tags: , , , ,

对tomcat cluster集群配置中session复制用法的一个误解

2007年11月13日,星期二

一直以来,我误解认为启动了n个tomcat,则Session需要同步复制到n个Tomcat中存在,因此在启动了6个以上的Tomcat,性能会大大下降。

而实际情况下,采取Apache 加Tomcat进行负载均衡集群的时候,是可以不用将Session复制到所有的节点里,

比如有六个Tomcat实例

1,2,3,4,5,6

是可以配置成 三组互相复制Session的群组,
比如Tomcat1和Tomcat2互相同步Session,
比如Tomcat3和Tomcat4互相同步Session,
比如Tomcat5和Tomcat6互相同步Session.

再在Apache的mod_jk模块里,对每个worker配置上redirect和activation属性。

将Tomcat1,Tomcat3,Tomcat5做为对外正常提供服务器的Tomcat,

Tomcat2,Tomcat4,Tomcat6作为分别对应的灾难恢复的备份Tomcat.

即比如Tomcat1当机之后,Apache会自动将发给Tomcat1的请求转发到Tomcat2上,
而Tomcat2因为同步了Tomcat1的Session信息,因此从用户的角度,是感觉不出任何差异的。

单纯的Tomcat测试如下:

Tomcat配置:

Tomcat1. port=”15080″, jvmRoute=”tomcat1″,
<Membership className=”org.apache.catalina.tribes.membership.McastService”
address=”228.0.0.5″
port=”45564″
frequency=”500″
dropTime=”3000″/>

Tomcat2. port=”16080″, jvmRoute=”tomcat2″,
<Membership className=”org.apache.catalina.tribes.membership.McastService”
address=”228.0.0.5″
port=”45564″
frequency=”500″
dropTime=”3000″/>

Tomcat3. port=”17080″, jvmRoute=”tomcat3″,
<Membership className=”org.apache.catalina.tribes.membership.McastService”
address=”228.0.0.6″
port=”45564″
frequency=”500″
dropTime=”3000″/>

Tomcat4. port=”18080″, jvmRoute=”tomcat4″,
<Membership className=”org.apache.catalina.tribes.membership.McastService”
address=”228.0.0.6″
port=”45564″
frequency=”500″
dropTime=”3000″/>

Tomcat5. port=”19080″, jvmRoute=”tomcat5″,
<Membership className=”org.apache.catalina.tribes.membership.McastService”
address=”228.0.0.7″
port=”45564″
frequency=”500″
dropTime=”3000″/>

Tomcat6. port=”20080″, jvmRoute=”tomcat6″,
<Membership className=”org.apache.catalina.tribes.membership.McastService”
address=”228.0.0.7″
port=”45564″
frequency=”500″
dropTime=”3000″/>

所有的Tomcat webapp的web.xml加上< />

(例如D:\Java\Tomcat2\webapps\examples\WEB-INF\web.xml ,)

测试页面为:

第一组:

http://localhost:15080/examples/servlets/servlet/SessionExample

http://localhost:16080/examples/servlets/servlet/SessionExample

第二组:

http://localhost:17080/examples/servlets/servlet/SessionExample

http://localhost:18080/examples/servlets/servlet/SessionExample

第三组:

http://localhost:19080/examples/servlets/servlet/SessionExample

http://localhost:20080/examples/servlets/servlet/SessionExample

在每一组中,打开其中任何一个链接,然后设置属性值,
都可以在访问另外一个链接的时候得到。对应的sessionid的后缀会变成对应Tomcat的jvmRoute.
(以上测试的tomcat均在同一台服务器上)

接下来再配置Apache的mod_jk.

workers.properties的内容节选如下:

(重点是redirect和activation两个属性)

worker.tomcat1.port=15009
worker.tomcat1.host=127.0.0.1
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat1.redirect=tomcat2

worker.tomcat2.port=16009
worker.tomcat2.host=10.108.20.126
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat2.redirect=tomcat1
worker.tomcat2.activation=disabled

详细参考:

http://tomcat.apache.org/connectors-doc/generic_howto/loadbalancers.html

备注:Tomcat6已经没有使用JGroups来实现集群复制,

而是使用Apache Tribes 来实现该效果的。
Apache Tribes的介绍在:

http://tomcat.apache.org/tomcat-6.0-doc/tribes/introduction.html

为了简便配置,因此只使用一份Tomcat,使用不同的cofig来启动,配置好的文件在:

http://618119.com/docs/Tomcat/TomcatCluster.zip

下载解压到Tomcat(例如D:\Java\apache-tomcat-6.0.14)目录里,运行对应的bat文件即可:
start15080.bat
start16080.bat
start17080.bat
start18080.bat
start19080.bat
start20080.bat

Tags: , , , , , , , , , , ,