<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>lizongbo at 618119.com &#187; Web Server</title>
	<atom:link href="http://618119.com/category/webserver/feed" rel="self" type="application/rss+xml" />
	<link>http://618119.com</link>
	<description>工作,生活,java,apache,tomcat,Resin,mina,Hessian,Openfire,XMPP,RPC,Ubuntu</description>
	<lastBuildDate>Wed, 14 Apr 2010 13:15:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>调整resin的resin.conf优化access-log输出日志</title>
		<link>http://618119.com/archives/2009/02/18/135.html</link>
		<comments>http://618119.com/archives/2009/02/18/135.html#comments</comments>
		<pubDate>Tue, 17 Feb 2009 16:25:55 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Resin]]></category>
		<category><![CDATA[log]]></category>

		<guid isPermaLink="false">http://618119.com/?p=135</guid>
		<description><![CDATA[目前服务器上resin.conf的日志配置一般是：
      《stdout -log path=&#8221;log/stdout.log&#8221; timestamp=&#8221;[%Y-%m-%d %H:%M:%S] &#8221; rollover-size=&#8221;200mb&#8221; /》
      《stderr -log path=&#8221;log/stderr.log&#8221; timestamp=&#8221;[%Y-%m-%d %H:%M:%S] &#8221; rollover-size=&#8221;200mb&#8221; /》
      《access -log path=&#8221;logs/access.log&#8221; rollover-period=&#8221;1D&#8221; rollover-size=&#8221;200mb&#8221;/》
在这种情况下，日志始终是先输出到logs/access.log这样的固定文件里，待文件大小满200M的时候，resin先锁住所有写日志操作，将文件的内容复制到文件名带时间戳的文件里，再清空当前日志文件的内容。
这种情况下，既多增加了磁盘io操作，也因为锁机制导致线程容易满，以至resin被webapp监控重启。
以前出现该问题的时候，只简单的通过关闭access-log绕了过去，而最近web网站的resin也出现了重启，
由于web是lvs负载均衡，因此不能通过关闭accesslog来解决问题。
经过查看resin的源代码分析，结合现在业务的实际情况，可以通过调整日志的配置为按时间周期切割来解决问题。
通过分析和实验，将resin的配置调整后大致为：
      《stdout -log path-format=&#8221;log/stdout.log.%Y%m%d&#8221; timestamp=&#8221;[%Y-%m-%d %H:%M:%S] &#8221; rollover-period=&#8221;1D&#8221; /》
      [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2009/02/18/135.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jsper编译遇到&#8221;SEVERE: Invalid PUBLIC ID&#8221;的解决办法</title>
		<link>http://618119.com/archives/2008/12/29/110.html</link>
		<comments>http://618119.com/archives/2008/12/29/110.html#comments</comments>
		<pubDate>Mon, 29 Dec 2008 05:36:25 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[dtd]]></category>
		<category><![CDATA[jasper]]></category>
		<category><![CDATA[预编译]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2008/12/29/110.html</guid>
		<description><![CDATA[用到了自定义标签，且tld声明为：

&#60;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243; ?&#62;
&#60;!DOCTYPE  taglib
PUBLIC &#8220;-//Sun Microsystems, Inc.//
DTD JSP Tag  Library 1.1//EN&#8221;
&#8220;http://java.sun.com/j2ee/dtds/
web-jsptaglibrary_1_1.dtd&#8221;&#62;


结果使用tomcat预编译时出错，出错信息：

jspc:
[jasper] Dec 16, 2008 8:24:41 PM  org.apache.jasper.xmlparser.MyEntityResolver resolveEntity
[jasper]  SEVERE: Invalid PUBLIC ID: -//Sun Microsystems, Inc.// DTD JSP Tag Library  1.1//EN

BUILD FAILED
/usr/local/build_file/build_webapp.xml:121:  org.apache.jasper.JasperException: Unable to initialize TldLocationsCache: XML  parsing error on file /WEB-INF/tlds/lizongbo.tld

Total time: 6 seconds

经查tomcat的jsper代码，找到org.apache.jasper.xmlparser.ParserUtils

发现对没有缓存的dtd采取的是访问url进行下载方式检查，
已经缓存的dtd在org.apache.jasper.Constants 中有定义

public static [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2008/12/29/110.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>配置独立运行的jsp预编译ant脚本</title>
		<link>http://618119.com/archives/2008/05/08/86.html</link>
		<comments>http://618119.com/archives/2008/05/08/86.html#comments</comments>
		<pubDate>Thu, 08 May 2008 12:23:22 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[JAVA IDE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Resin]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[javac]]></category>
		<category><![CDATA[jspc]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2008/05/08/86.html</guid>
		<description><![CDATA[配置resin开启预编译jsp，在启动时，resin会自动编译jsp，出错信息在 stdout.log中。
[code]
&#60;web-app id="/lizongbo" document-directory="webapps/lizongbo"&#62;
&#60;listener&#62;
&#60;listener-class&#62;com.caucho.jsp.JspPrecompileListener&#60;/listener-class&#62;
&#60;init&#62;
&#60;extension&#62;jsp&#60;/extension&#62;
&#60;extension&#62;jspx&#60;/extension&#62;
&#60;extension&#62;xtp&#60;/extension&#62;
&#60;/init&#62;
&#60;/listener&#62;
&#60;/web-app&#62;
[/code]
在开发过程，经常将页面传到resin上，才发现页面编译失败，浪费了不少时间，因此需要一个在本地预编译进行检查的操作。
resin 3.1以前的版本提供命令行方式进行jsp预编译。
完整的命令例子如下
%JAVA_HOME%\bin\java.exe -classpath %JAVA_HOME%\lib\tools.jar;D:\Java\resin-3.0.19\lib\aopalliance.jar;D:\Java\resin-3.0.19\lib\ejb-20.jar;D:\Java\resin-3.0.19\lib\ejb-30.jar;D:\Java\resin-3.0.19\lib\j2eedeploy.jar;D:\Java\resin-3.0.19\lib\jca-15.jar;D:\Java\resin-3.0.19\lib\jms-11.jar;D:\Java\resin-3.0.19\lib\jmx-12.jar;D:\Java\resin-3.0.19\lib\jsdk-24.jar;D:\Java\resin-3.0.19\lib\jstl-11.jar;D:\Java\resin-3.0.19\lib\jta-101.jar;D:\Java\resin-3.0.19\lib\portlet-10.jar;D:\Java\resin-3.0.19\lib\quercus.jar;D:\Java\resin-3.0.19\lib\resin-jdk15.jar;D:\Java\resin-3.0.19\lib\resin.jar;D:\Java\resin-3.0.19\lib\resinboot.jar;D:\Java\resin-3.0.19\lib\script-10.jar;D:\Java\resin-3.0.19\lib\webutil.jar;D:\Java\resin-3.0.19\plugins\resin-ant.jar com.caucho.jsp.JspCompiler -app-dir  E:\lizongbo\workspace\webapp E:\lizongbo\workspace\webapp
使用起来很不方便。(注意classpath里特意加了%JAVA_HOME%\lib\tools.jar,否则会报错,
出错信息如下：
Exception in thread &#8220;main&#8221; com.caucho.java.JavaCompileException: Resin can&#8217;t loa
d com.sun.tools.javac.Main.  Usually this means that the JDK tools.jar is missin
g from the classpath, possibly because of using a JRE instead of the JDK.  You c
an either add tools.jar to the classpath or change the compiler to an [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2008/05/08/86.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Tomcat 6.0.14中安装配置awstats</title>
		<link>http://618119.com/archives/2007/12/07/41.html</link>
		<comments>http://618119.com/archives/2007/12/07/41.html#comments</comments>
		<pubDate>Fri, 07 Dec 2007 10:30:54 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[618119.com]]></category>
		<category><![CDATA[Apache Tomcat]]></category>
		<category><![CDATA[awstats]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2007/12/07/41.html</guid>
		<description><![CDATA[在Tomcat 6.0.x中配置awstats
需要下载的文件有:
perl : http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.msi
来源： http://www.activestate.com/store/activeperl/download/
http://update.cz88.net/soft/qqwry.rar
http://awstats.sourceforge.net/files/awstats-6.8.tar.gz
geoip插件相关:
http://www.maxmind.com/download/geoip/api/pureperl/Geo-IP-PurePerl-1.18.tar.gz
http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
http://www.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
安装过程可参考
参考: http://blog.zhangjianfeng.com/article/317
PurePerl.pm的安装可参考:
http://topic.csdn.net/u/20070323/11/903dd121-10d8-42d2-b4eb-a6cb60a22e8a.html
其它配置可参考:
http://www.chedong.com/blog/archives/000410.html
http://blogger.org.cn/blog/more.asp?name=chenjiejacky&#38;id=20464
安装perl之后,确认环境变量里PATH有perl的bin目录
Path=E:\oracle\product\10.2.0\client_1\bin;D:\Perl\bin;
D:\Java\jdk1.6.0_03\bin;E:\oracle\product\10.2.0\db_1\bin;
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Program Files\Microsoft SQL Server\80\Tools\BINN
1.为了控制查看awstats的权限,我在
E:\apache-tomcat-6.0.14\conf\tomcat-users.xml的内容配置为:
&#60;?xml version=&#8217;1.0&#8242; encoding=&#8217;utf-8&#8242;?&#62;
&#60;tomcat-users&#62;
&#60;role rolename=&#8221;awstats&#8221;/&#62;
&#60;user username=&#8221;awstats&#8221; password=&#8221;awstats&#8221; roles=&#8221;awstats&#8221;/&#62;
&#60;/tomcat-users&#62;
2.由于权限限制
E:\apache-tomcat-6.0.14\webapps\awstats\META-INF\context.xml,内容为:
&#60;!&#8211; tomcat 6.0 need privileged is true for CGIServlet &#8211;&#62;
&#60;Context  reloadable=&#8221;true&#8221; privileged=&#8221;true&#8221; &#62;
&#60;/Context&#62;
否则启动的时候会出下面的错误信息:
[ERROR]main-org.apache.catalina.startup.HostConfig-Error deploying web application directory awstats
java.lang.SecurityException: Servlet of class org.apache.catalina.servlets.CGIServlet is privileged and cannot be loaded by this web application
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1134)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4045)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4351)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2007/12/07/41.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给wordpress加上记录Combined格式日志的功能</title>
		<link>http://618119.com/archives/2007/12/06/40.html</link>
		<comments>http://618119.com/archives/2007/12/06/40.html#comments</comments>
		<pubDate>Thu, 06 Dec 2007 10:23:55 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[618119.com]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2007/12/06/40.html</guid>
		<description><![CDATA[由于我是合租的web主机,因此开通的ftp里没权限看到站点的access.log,
由于wordpress是通过.htaccess中配置的urlrewrite将http请求重定向到index.php 这个入口,
因此只要在index.php里加上记录日志的操作,基本上大部分请求都可以记录下来,
查了下资料,没看见现成的代码,于是对照着 Combined各式的日志,
自己写了一段代码来实现这个功能.
代码如下:
[code]
&#60;?php
/* Short and sweet */
define('WP_USE_THEMES', true);
/**
为我的wordpress增加记录web日志的功能
author: lizongbo
site: http://618119.com
*/
$webaccesslog="webaccess".gmdate("Y-m-d").".log";
$accesslog=$_SERVER['REMOTE_ADDR']." - - ".gmdate("[d/M/Y:H:i:s +0800] ");
$accesslog=$accesslog."\"".$_SERVER["REQUEST_METHOD"]." ".$_SERVER["REQUEST_URI"]." ";
$accesslog=$accesslog.$_SERVER["SERVER_PROTOCOL"]."\"";
$accesslog=$accesslog." 200 2007 \"";
if(!empty($_SERVER["HTTP_REFERER"])){
$accesslog=$accesslog.$_SERVER["HTTP_REFERER"];
}else{
$accesslog=$accesslog."-";
}
$accesslog=$accesslog."\" \"".$_SERVER["HTTP_USER_AGENT"]."\""."\r\n";
$webaccess=fopen($webaccesslog,"a");
fwrite($webaccess,$accesslog);
/*下面的写法 io 操作太多,被废弃了
fwrite($webaccess,$_SERVER['REMOTE_ADDR']);
fwrite($webaccess," - - ");
fwrite($webaccess,gmdate ("[d/M/Y:H:i:s +0800] "));//不知道怎么加时区,于是写死了
fwrite($webaccess,"\"");
fwrite($webaccess,$_SERVER["REQUEST_METHOD"]);
fwrite($webaccess," ");
fwrite($webaccess,$_SERVER["REQUEST_URI"]);
fwrite($webaccess," ");
fwrite($webaccess,$_SERVER["SERVER_PROTOCOL"]);
fwrite($webaccess,"\"");
fwrite($webaccess," 200 2007 \"");//强行写死了状态码和内容长度
if(!empty($_SERVER["HTTP_REFERER"])){
fwrite($webaccess,$_SERVER["HTTP_REFERER"]);
}else{
fwrite($webaccess,"-");
}
fwrite($webaccess,"\" \"");
fwrite($webaccess,$_SERVER["HTTP_USER_AGENT"]);
fwrite($webaccess,"\"");
fwrite($webaccess,"\r\n");
*/
fclose($webaccess);
require('./wp-blog-header.php');
?&#62;
[/code]
这样,记录下来的日志就可以通过ftp下载到本地,然后再用 awstats 进行分析了.

	Tags: 618119.com, Apache, log, php, Wordpress

	Related posts
	
	迁移blog到homezz的新服务器 (0)
	调整resin的resin.conf优化access-log输出日志 (0)
	用rawurldecode和iconv解决php的编码问题 (0)
	用JDBC连接Oracle 10g RAC遇到的问题 (1)
	服务器从jdk1.6.0升级到1.6.0_12的过程记录 (0)


]]></description>
		<wfw:commentRss>http://618119.com/archives/2007/12/06/40.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat遇到&#8221;Error listenerStart&#8221;或&#8221;Error filterStart&#8221;问题且无详细日志时的log配置.</title>
		<link>http://618119.com/archives/2007/12/04/37.html</link>
		<comments>http://618119.com/archives/2007/12/04/37.html#comments</comments>
		<pubDate>Tue, 04 Dec 2007 07:44:35 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Apache Tomcat]]></category>
		<category><![CDATA[log4j]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2007/12/04/37.html</guid>
		<description><![CDATA[昨天部署web应用到Tomcat之后,无法成功启动,并且控制台没有详细的错误信息,
顶多就两行提示信息,例如:
严重: Error listenerStart
严重: Context [/lizongbo] startup failed due to previous errors
或者
严重: Error filterStart
org.apache.catalina.core.StandardContext start
严重: Context startup failed due to previous errors
查找logs目录下的信息,除了这两句话,也没别的辅助内容.
给查错带来了困难,在这种情况下,是因为Tomcat自身的默认日志没有将一些错误信息输出到控制台或文件,
这个时候则需要配置Tomcat自身的log,启用详细的调试日志.
在Tomcat 5.5和Tomcat 6.0中的配置基本一样,只是相关文件放的目录有所不同.
首先需要准备的文件为:
1.log4j.jar , 下载地址 : http://www.apache.org/dist/logging/log4j/1.2.15/apache-log4j-1.2.15.zip
2.Tomcat 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上报下面的错误
&#8220;Parse   Fatal   Error   at   line   17   column   6: [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2007/12/04/37.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Netbeans IDE 6.0正式发布了</title>
		<link>http://618119.com/archives/2007/12/04/36.html</link>
		<comments>http://618119.com/archives/2007/12/04/36.html#comments</comments>
		<pubDate>Tue, 04 Dec 2007 01:02:19 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[JAVA IDE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Apache Tomcat]]></category>
		<category><![CDATA[GlassFish v2]]></category>
		<category><![CDATA[java ide]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2007/12/04/36.html</guid>
		<description><![CDATA[ Netbeans 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 Tomcat 6.0.14,安装的时候可以选择不安装GlassFish v2和Apache Tomcat 6.0.14,在启动netbeans之后再配置GlassFish v2和Apache Tomcat 6.0.14指向已经安装好的目录,节约一点硬盘空间.
GlassFish v2:
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
Apache Tomcat6.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的 JDK1.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: Apache Tomcat, GlassFish v2, java ide, JDK, netbeans

	Related posts
	
	服务器从jdk1.6.0升级到1.6.0_12的过程记录 (0)
	基于Axis的WebService测试,开发,部署 (0)
	在Tomcat 6.0.14中安装配置awstats (0)
	又遇到一个jdk1.6的bug (0)
	使用Eclipse的几点注意事项 (0)


]]></description>
		<wfw:commentRss>http://618119.com/archives/2007/12/04/36.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>对tomcat cluster集群配置中session复制用法的一个误解</title>
		<link>http://618119.com/archives/2007/11/13/26.html</link>
		<comments>http://618119.com/archives/2007/11/13/26.html#comments</comments>
		<pubDate>Tue, 13 Nov 2007 00:34:48 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[distributable]]></category>
		<category><![CDATA[JGroups]]></category>
		<category><![CDATA[jvmRoute]]></category>
		<category><![CDATA[loadbalancer]]></category>
		<category><![CDATA[mod_jk]]></category>
		<category><![CDATA[session复制]]></category>
		<category><![CDATA[Tribes]]></category>
		<category><![CDATA[负载均衡]]></category>
		<category><![CDATA[集群]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2007/11/13/26.html</guid>
		<description><![CDATA[一直以来，我误解认为启动了n个tomcat，则Session需要同步复制到n个Tomcat中存在，因此在启动了6个以上的Tomcat，性能会大大下降。
而实际情况下，采取Apache 加Tomcat进行负载均衡集群的时候，是可以不用将Session复制到所有的节点里，
比如有六个Tomcat实例
Tomcat1,Tomcat2,Tomcat3,Tomcat4,Tomcat5,Tomcat6
是可以配置成 三组互相复制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=&#8221;15080&#8243;, jvmRoute=&#8221;tomcat1&#8243;,
&#60;Membership className=&#8221;org.apache.catalina.tribes.membership.McastService&#8221;
address=&#8221;228.0.0.5&#8243;
port=&#8221;45564&#8243;
frequency=&#8221;500&#8243;
dropTime=&#8221;3000&#8243;/&#62;
Tomcat2. port=&#8221;16080&#8243;, jvmRoute=&#8221;tomcat2&#8243;,
&#60;Membership className=&#8221;org.apache.catalina.tribes.membership.McastService&#8221;
address=&#8221;228.0.0.5&#8243;
port=&#8221;45564&#8243;
frequency=&#8221;500&#8243;
dropTime=&#8221;3000&#8243;/&#62;
Tomcat3. port=&#8221;17080&#8243;, jvmRoute=&#8221;tomcat3&#8243;,
&#60;Membership className=&#8221;org.apache.catalina.tribes.membership.McastService&#8221;
address=&#8221;228.0.0.6&#8243;
port=&#8221;45564&#8243;
frequency=&#8221;500&#8243;
dropTime=&#8221;3000&#8243;/&#62;
Tomcat4. port=&#8221;18080&#8243;, jvmRoute=&#8221;tomcat4&#8243;,
&#60;Membership className=&#8221;org.apache.catalina.tribes.membership.McastService&#8221;
address=&#8221;228.0.0.6&#8243;
port=&#8221;45564&#8243;
frequency=&#8221;500&#8243;
dropTime=&#8221;3000&#8243;/&#62;
Tomcat5. port=&#8221;19080&#8243;, jvmRoute=&#8221;tomcat5&#8243;,
&#60;Membership className=&#8221;org.apache.catalina.tribes.membership.McastService&#8221;
address=&#8221;228.0.0.7&#8243;
port=&#8221;45564&#8243;
frequency=&#8221;500&#8243;
dropTime=&#8221;3000&#8243;/&#62;
Tomcat6. port=&#8221;20080&#8243;, jvmRoute=&#8221;tomcat6&#8243;,
&#60;Membership className=&#8221;org.apache.catalina.tribes.membership.McastService&#8221;
address=&#8221;228.0.0.7&#8243;
port=&#8221;45564&#8243;
frequency=&#8221;500&#8243;
dropTime=&#8221;3000&#8243;/&#62;
所有的Tomcat webapp的web.xml加上&#60;distributable /&#62;
(例如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: Apache, Cluster, distributable, JGroups, jvmRoute, loadbalancer, mod_jk, session复制, Tomcat, Tribes, 负载均衡, 集群

	Related posts
	
	配置独立运行的jsp预编译ant脚本 (0)
	给wordpress加上记录Combined格式日志的功能 (0)
	开张了。 (0)
	在Tomcat 6.0.14中安装配置awstats (0)
	在Apache Tomcat上安装Wordpress 2.3 (0)


]]></description>
		<wfw:commentRss>http://618119.com/archives/2007/11/13/26.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache整合Tomcat的vhosts及mod_jk配置</title>
		<link>http://618119.com/archives/2007/10/26/17.html</link>
		<comments>http://618119.com/archives/2007/10/26/17.html#comments</comments>
		<pubDate>Fri, 26 Oct 2007 06:28:16 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[ajp13]]></category>
		<category><![CDATA[mod_jk]]></category>
		<category><![CDATA[vhost]]></category>

		<guid isPermaLink="false">http://618119.com/archives/2007/10/26/17.html</guid>
		<description><![CDATA[httpd-vhosts.conf的配置例子如下：
#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn&#8217;t need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# &#60;URL: http://httpd.apache.org/docs/2.2/vhosts/ &#62;
# [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2007/10/26/17.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
