<?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>五四陈科学院-坚信科学，分享技术 &#187; java</title>
	<atom:link href="http://www.54chen.com/category/java-ee/feed" rel="self" type="application/rss+xml" />
	<link>http://www.54chen.com</link>
	<description>PHP、JAVA、缓存、架构、经验、分享</description>
	<lastBuildDate>Sat, 11 Feb 2012 17:09:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>maven库nexus拖不到jar包小记</title>
		<link>http://www.54chen.com/_linux_/maven-nexus-jar-note.html</link>
		<comments>http://www.54chen.com/_linux_/maven-nexus-jar-note.html#comments</comments>
		<pubDate>Mon, 30 Jan 2012 13:41:42 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[nexus]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/maven-nexus-jar-note.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>使用maven，nexus是个不错的选择。 最常见的问题： 1.SNAPSHOT拿不到最新的包。 2.明明在maven central库里搜索到的包，却提示Missing。 3.plugin提示Missing。 1.SNAPSHOT拿不到最新的包。 这个问题往往得nexus+hudson造成的。因为daily build导致与日俱增的jar包堆积在一个文件夹下，文件数目过多，导致在取最新的包时超时了。 解决办法： 浏览器打开nexus， login->scheduled tasks->add，添加一个定时清理目录的计划任务即可。最后一个选项“remove if released”需要慎重，平时开发可能不是特别正规的时候可能会snapshot和release都需要。 2.明明在maven central库里搜索到的包，却提示Missing。 网上大多数说法都是index失败了，个人经验实际不然(当然不排除你的问题就是index失败)。 当nexus.log里没有任何异常时，请注意以下内容： 在central搜索时，如果只有pom没有jar，那说明这个依赖的项目可能有多个依赖，一定要加上pom，默认是jar。 3.plugin提示Missing。 通常原因是：nexus设置的搜索顺序有问题。 login->Public Repositories -> configuration 左边的是正在使用的定义好的仓库组，右边是可以使用的，正确的顺序应该是先在Release找，然后Snapshots，然后3rd party，最后才去外网下（这时nexus才拖下来新的jar/pom）。<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://maven.apache.org/images/maventxt_logo_200.gif" alt="maven,nexus" /><br />
使用maven，nexus是个不错的选择。<br />
<strong>最常见的问题：</strong></p>
<blockquote><p>1.SNAPSHOT拿不到最新的包。<br />
2.明明在maven central库里搜索到的包，却提示Missing。<br />
3.plugin提示Missing。
</p></blockquote>
<p><strong>1.SNAPSHOT拿不到最新的包。</strong><br />
这个问题往往得nexus+hudson造成的。因为daily build导致与日俱增的jar包堆积在一个文件夹下，文件数目过多，导致在取最新的包时超时了。<br />
解决办法：<br />
浏览器打开nexus， login->scheduled tasks->add，添加一个定时清理目录的计划任务即可。最后一个选项“remove if released”需要慎重，平时开发可能不是特别正规的时候可能会snapshot和release都需要。</p>
<p><strong>2.明明在maven central库里搜索到的包，却提示Missing。</strong><br />
网上大多数说法都是index失败了，个人经验实际不然(当然不排除你的问题就是index失败)。<br />
当nexus.log里没有任何异常时，请注意以下内容：<br />
在central搜索时，如果只有pom没有jar，那说明这个依赖的项目可能有多个依赖，一定要加上<type>pom</type>，默认是jar。</p>
<p><strong>3.plugin提示Missing。</strong><br />
通常原因是：nexus设置的搜索顺序有问题。<br />
login->Public Repositories -> configuration<br />
左边的是正在使用的定义好的仓库组，右边是可以使用的，正确的顺序应该是先在Release找，然后Snapshots，然后3rd party，最后才去外网下（这时nexus才拖下来新的jar/pom）。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/maven-nexus-jar-note.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>年终攻击hashDos-哈希表多碰撞实现拒绝服务-破解办法</title>
		<link>http://www.54chen.com/php-tech/hashdos.html</link>
		<comments>http://www.54chen.com/php-tech/hashdos.html#comments</comments>
		<pubDate>Fri, 30 Dec 2011 09:24:33 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[hashdos]]></category>

		<guid isPermaLink="false">http://www.54chen.com/php-tech/hashdos.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>起因： Wed, 28 Dec 2011 22:28:16 GMT apache tomcat公布了一个安全漏洞。 http://mail-archives.apache.org/mod_mbox/www-announce/201112.mbox/%3C4EFB9800.5010106@apache.org%3E 漏洞原理： 依靠相应语言的hashtable/hashmap实现过程（request多为此结构），当不同的key存入时如果hash值相等则以链表方式连接在前面。此漏洞利用碰撞相同的hash值得到一个长链表，重新get时，map的计算过程会将时间复杂度巨增，原来一个简单的过程将变成一个很费cpu的过程。 影响到的： 最快时间tomcat公布了解决办法。 php进行了升级。 ms也发了公告http://technet.microsoft.com/en-us/security/bulletin/ms11-100。 解决办法： tomcat 临时办法： 默认大小2097152，当maxPostSize=0时，不限制；maxPostSize=20971520时，为20M，改为一个小于10k的值，所有版本可用，会影响用户。 持久办法： 用新的版本，maxParameterCount默认值1000。 nginx 临时办法： 默认的最大请求body大小为8m，修改设置client_max_body_size=10k；此招为各种情况下万金油，会影响用户。 持久办法： 暂无，应该很快会有max_request_count的参数。 php 持久办法： php升级到5.3.9，5.2需要打patch。详细见：http://www.laruence.com/2011/12/30/2440.html 后记 54chen人肉构造打到php，php立马100%，转到java（resin+spring+rose），轻松化解，没有反应。<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><strong>起因：</strong><br />
Wed, 28 Dec 2011 22:28:16 GMT apache tomcat公布了一个安全漏洞。</p>
<p>http://mail-archives.apache.org/mod_mbox/www-announce/201112.mbox/%3C4EFB9800.5010106@apache.org%3E</p>
<p><strong>漏洞原理：</strong><br />
依靠相应语言的hashtable/hashmap实现过程（request多为此结构），当不同的key存入时如果hash值相等则以链表方式连接在前面。此漏洞利用碰撞相同的hash值得到一个长链表，重新get时，map的计算过程会将时间复杂度巨增，原来一个简单的过程将变成一个很费cpu的过程。</p>
<p><strong>影响到的：</strong><br />
最快时间tomcat公布了解决办法。<br />
php进行了升级。<br />
ms也发了公告http://technet.microsoft.com/en-us/security/bulletin/ms11-100。</p>
<p><strong>解决办法：</strong><br />
<strong>tomcat</strong><br />
<strong>临时办法：</strong><br />
默认大小2097152，当maxPostSize=0时，不限制；maxPostSize=20971520时，为20M，改为一个小于10k的值，<strong>所有版本可用</strong>，会影响用户。<br />
<strong>持久办法：</strong><br />
用新的版本，maxParameterCount默认值1000。<br />
<strong>nginx</strong><br />
<strong>临时办法：</strong><br />
默认的最大请求body大小为8m，修改设置client_max_body_size=10k；此招为各种情况下万金油，会影响用户。<br />
<strong>持久办法：</strong><br />
暂无，应该很快会有max_request_count的参数。<br />
<strong>php</strong><br />
<strong>持久办法：</strong><br />
php升级到5.3.9，5.2需要打patch。详细见：http://www.laruence.com/2011/12/30/2440.html</p>
<p><strong>后记</strong><br />
54chen人肉构造打到php，php立马100%，转到java（resin+spring+rose），轻松化解，没有反应。</p>
<p><img src="http://img05.taobaocdn.com/bao/uploaded/i5/T1.RRAXjVDXXX7OsE8_070026.jpg" alt="hashDos,important" /></p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/php-tech/hashdos.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>maven插件编写实例</title>
		<link>http://www.54chen.com/java-ee/maven-plugin.html</link>
		<comments>http://www.54chen.com/java-ee/maven-plugin.html#comments</comments>
		<pubDate>Wed, 14 Dec 2011 12:33:39 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/maven-plugin.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>概况 实现一个自定义的类，必须要继承自 org.apache.maven.plugin.AbstractMojo，同时实现execute方法。 maven使用了在注释中写代码，BT的写法，所以注释里的@goal @parameter都是有含义的。 实例 mvn&#160;hello:gogo&#160;&#160; 这样的一个命令，到代码里，应该是如下过程 进入 hello被叫做plugin的prefix，maven会去寻找以hello开头的插件。 在插件的pom里必须定义其名字为hello开头的，例如： &#60;artifactId&#62;hello-maven-plugin&#60;/artifactId&#62;&#160;&#160; goal目标 hello后面的gogo叫做goal，目标，则以注释中写代码的方式来完成： /**&#160; *@goal&#160;gogo&#160; **/&#160;&#160; HelloMojo&#160;extends&#160;AbstractMojo&#160;&#160; 需要的依赖 &#60;dependency&#62;&#160;&#160; &#160;&#60;groupId&#62;org.apache.maven&#60;/groupId&#62;&#160;&#160; &#160;&#60;artifactId&#62;maven-plugin-api&#60;/artifactId&#62;&#160;&#160; &#160;&#60;version&#62;3.0.3&#60;/version&#62;&#160;&#160; &#60;/dependency&#62;&#160;&#160; 必需的选项 &#60;packaging&#62;maven-plugin&#60;/packaging&#62;&#160;&#160; 必需要是maven-plugin才能成功。 参数 如果要传什么参数给插件，应该是 /**&#160; *&#160;if&#160;false&#160;all&#160;compression&#160;is&#160;off&#160;(default&#160;is&#160;true)&#160; *&#160; *&#160;@parameter&#160;expression="${hello.enabled}"&#160;default-value="true"&#160; */&#160;&#160; private&#160;Boolean&#160;enabled=true;&#160;&#160; 使用时项目定义 然后在使用的项目里，需要定义的有 &#60;plugin&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;groupId&#62;com.chen&#60;/groupId&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;artifactId&#62;demo-maven-plugin&#60;/artifactId&#62;&#160;&#160; &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://maven.apache.org/images/maventxt_logo_200.gif" alt="apache maven" /></p>
<p><strong>概况</strong><br />
实现一个自定义的类，必须要继承自 org.apache.maven.plugin.AbstractMojo，同时实现execute方法。<br />
maven使用了在注释中写代码，BT的写法，所以注释里的@goal @parameter都是有含义的。</p>
<p><strong>实例</strong></p>
<div class="chen-hl">
<ol class="dp-j" start="1">
<li class="alt"><span><span>mvn&nbsp;hello:gogo&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>这样的一个命令，到代码里，应该是如下过程</p>
<p><strong>进入</strong><br />
hello被叫做plugin的prefix，maven会去寻找以hello开头的插件。<br />
在插件的pom里必须定义其名字为hello开头的，例如：</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>hello-maven-plugin</span><span class="tag">&lt;/</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>goal目标</strong><br />
hello后面的gogo叫做goal，目标，则以注释中写代码的方式来完成：</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
<li class=""><span><span class="comment">*@goal&nbsp;gogo</span>&nbsp;</span></li>
<li class="alt"><span><span class="comment">**/</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>HelloMojo&nbsp;<span class="keyword">extends</span><span>&nbsp;AbstractMojo&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>需要的依赖</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">dependency</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;<span class="tag">&lt;</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>org.apache.maven</span><span class="tag">&lt;/</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;<span class="tag">&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>maven-plugin-api</span><span class="tag">&lt;/</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;<span class="tag">&lt;</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>3.0.3</span><span class="tag">&lt;/</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">dependency</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>必需的选项</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">packaging</span><span class="tag">&gt;</span><span>maven-plugin</span><span class="tag">&lt;/</span><span class="tag-name">packaging</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>必需要是maven-plugin才能成功。</p>
<p><strong>参数</strong><br />
如果要传什么参数给插件，应该是</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
<li class=""><span><span class="comment">*&nbsp;if&nbsp;false&nbsp;all&nbsp;compression&nbsp;is&nbsp;off&nbsp;(default&nbsp;is&nbsp;true)</span>&nbsp;</span></li>
<li class="alt"><span><span class="comment">*</span>&nbsp;</span></li>
<li class=""><span><span class="comment">*&nbsp;@parameter&nbsp;expression="${hello.enabled}"&nbsp;default-value="true"</span>&nbsp;</span></li>
<li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span><span class="keyword">private</span><span>&nbsp;Boolean&nbsp;enabled=</span><span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>使用时项目定义</strong><br />
然后在使用的项目里，需要定义的有</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">plugin</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>com.chen</span><span class="tag">&lt;/</span><span class="tag-name">groupId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>demo-maven-plugin</span><span class="tag">&lt;/</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>1.0</span><span class="tag">&lt;/</span><span class="tag-name">version</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">configuration</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">goalPrefix</span><span class="tag">&gt;</span><span>hello</span><span class="tag">&lt;/</span><span class="tag-name">goalPrefix</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">enabled</span><span class="tag">&gt;</span><span>false</span><span class="tag">&lt;/</span><span class="tag-name">enabled</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">configuration</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">plugin</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>然后执行上述命令时自然可以执行HelloMojo的execute方法。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/maven-plugin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>神器monit监控报警设置手记</title>
		<link>http://www.54chen.com/_linux_/monit-notes.html</link>
		<comments>http://www.54chen.com/_linux_/monit-notes.html#comments</comments>
		<pubDate>Thu, 24 Nov 2011 10:43:15 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/monit-notes.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>系统监控工具monit是一款功能非常丰富的进程、文件、目录和设备的监测软件，用于Unix平台。它可以自动修复那些已经停止运作的程序，特使适合处理那些由于多种原因导致的软件错误。 安装 centos: yum install monit ubuntu: apt-get install monit 使用 配置文件在/etc/monit.conf 配置发邮件的smtp服务器 set mailserver 111.111.111.111 USERNAME "xxx@xiaomi.com" PASSWORD "54chen54chen" 配置服务检测的周期 set daemon 30 30秒检查一次 配置报警邮件格式 set mail-format { from: ALERT subject: $SERVICE $EVENT at $DATE message: Monit $ACTION $SERVICE &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://img.taobaocdn.com/imgextra/i1/13078490/T28C9aXblXXXXXXXXX_!!13078490.png" alt="monit" /></p>
<p>系统监控工具monit是一款功能非常丰富的进程、文件、目录和设备的监测软件，用于Unix平台。它可以自动修复那些已经停止运作的程序，特使适合处理那些由于多种原因导致的软件错误。 </p>
<p><strong>安装</strong><br />
centos:</p>
<blockquote><p>yum install monit</p></blockquote>
<p>ubuntu:</p>
<blockquote><p>apt-get install monit</p></blockquote>
<p><strong>使用</strong><br />
配置文件在/etc/monit.conf</p>
<p><strong>配置发邮件的smtp服务器</strong></p>
<blockquote><p>set mailserver 111.111.111.111 USERNAME "xxx@xiaomi.com" PASSWORD "54chen54chen"</p></blockquote>
<p><strong>配置服务检测的周期</strong></p>
<blockquote><p>set daemon 30<br />
30秒检查一次</p></blockquote>
<p><strong>配置报警邮件格式</strong></p>
<blockquote><p>set mail-format {<br />
      from: ALERT<alert@xiaomi.com><br />
   subject: $SERVICE $EVENT at $DATE<br />
   message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.<br />
}</p></blockquote>
<p><strong>配置收报警的人</strong></p>
<blockquote><p>set alert 54chen@xiaomi.com with reminder on 3 cycles ；出问题时最多连续报3次</p></blockquote>
<p><strong>配置监控对象</strong></p>
<blockquote><p>check host webim-91 with address 192.168.1.2<br />
  if failed host www.miliao.com port 80 proto http and request "/test.html"  for 2 times within 2 cycles  then alert</p></blockquote>
<p><strong>其他</strong><br />
可以监控的类型有： CHECK PROCESS FILE  FIFO DEVICE DIRECTORY HOST SYSTEM  </p>
<p><strong>帮助</strong></p>
<blockquote><p>man monit</p></blockquote>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/monit-notes.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>thrift快速入门实例</title>
		<link>http://www.54chen.com/_linux_/thrift-quick-start.html</link>
		<comments>http://www.54chen.com/_linux_/thrift-quick-start.html#comments</comments>
		<pubDate>Fri, 18 Nov 2011 05:30:22 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[thrift]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/thrift-quick-start.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>Thrift是Facebook的核心框架之一，使不同的开发语言开发的系统可以通过该框架实现彼此的通信，类似于webservice，但是Thrift提供了近乎变态的效率和开发的方便性，是webservice所不能比拟的。给分布式开发带来了极大的方便。但是这柄利器也有一些不完美。 安装thrift 1、./configure --with-boost=/usr/include 2、make 3、make install 定义接口文件 vim&#160;chen.thrift&#160;&#160; &#160;&#160; #!/usr/local/bin/thrift&#160;--gen&#160;java&#160;&#160; namespace&#160;java&#160;com.chen&#160;&#160; service&#160;Hello{&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;i32&#160;hello()&#160;&#160; }&#160;&#160; 生成代码 thrift&#160;--gen&#160;java&#160;chen.thrift&#160;&#160;&#160; 要使用1.6的jdk 实现server代码： /**&#160; &#160;*&#160;@author&#160;54chen(陈臻)&#160;[chenzhen@xiaomi.com&#160;czhttp@gmail.com]&#160; &#160;*&#160;@since&#160;2011-6-24&#160;下午08:11:15&#160; &#160;*/&#160;&#160; package&#160;com.chen;&#160;&#160; &#160;&#160; import&#160;org.apache.thrift.TException;&#160;&#160; &#160;&#160; public&#160;class&#160;HelloImpl&#160;implements&#160;Hello.Iface&#160;{&#160;&#160; &#160;&#160; &#160;&#160;&#160;&#160;public&#160;void&#160;HelloImpl()&#160;{&#160;&#160; &#160;&#160;&#160;&#160;}&#160;&#160; &#160;&#160;&#160;&#160;public&#160;int&#160;hello()&#160;throws&#160;TException&#160;{&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println("hello&#160;54chen");&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;0;&#160;&#160; &#160;&#160;&#160;&#160;}&#160;&#160; &#160;&#160; }&#160;&#160; 通过下面的代码启动server TServerSocket&#160;serverTransport&#160;=&#160;new&#160;TServerSocket(7911);&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;Hello.Processor&#160;processor&#160;=&#160;new&#160;Hello.Processor(new&#160;HelloImpl());&#160;&#160; &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://img04.taobaocdn.com/imgextra/i4/T1gzmqXXdpXXcwYVo0_034121.jpg" alt="facebook thrift" /><br />
Thrift是Facebook的核心框架之一，使不同的开发语言开发的系统可以通过该框架实现彼此的通信，类似于webservice，但是Thrift提供了近乎变态的效率和开发的方便性，是webservice所不能比拟的。给分布式开发带来了极大的方便。但是这柄利器也有一些不完美。 </p>
<p><strong>安装thrift</strong></p>
<blockquote><p>1、./configure --with-boost=/usr/include<br />
2、make<br />
3、make install</p></blockquote>
<p><strong>定义接口文件</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-rb" start="1">
<li class="alt"><span><span>vim&nbsp;chen.thrift&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;</span></li>
<li class="alt"><span><span class="comment">#!/usr/local/bin/thrift&nbsp;--gen&nbsp;java</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>namespace&nbsp;java&nbsp;com.chen&nbsp;&nbsp;</span></li>
<li class="alt"><span>service&nbsp;Hello{&nbsp;&nbsp;</span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i32&nbsp;hello()&nbsp;&nbsp;</span></li>
<li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><strong>生成代码</strong></p>
<div class="chen-hl">
<ol class="dp-perl" start="1">
<li class="alt"><span><span>thrift&nbsp;--gen&nbsp;java&nbsp;chen.thrift&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>要使用1.6的jdk<br />
<strong><br />
实现server代码：</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
<li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;54chen(陈臻)&nbsp;[chenzhen@xiaomi.com&nbsp;czhttp@gmail.com]</span>&nbsp;</span></li>
<li class="alt"><span><span class="comment">&nbsp;*&nbsp;@since&nbsp;2011-6-24&nbsp;下午08:11:15</span>&nbsp;</span></li>
<li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.chen;&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;</span></li>
<li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.apache.thrift.TException;&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;</span></li>
<li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HelloImpl&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Hello.Iface&nbsp;{&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;HelloImpl()&nbsp;{&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;hello()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;TException&nbsp;{&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"hello&nbsp;54chen"</span><span>);&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="number">0</span><span>;&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;</span></li>
<li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><strong>通过下面的代码启动server</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span>TServerSocket&nbsp;serverTransport&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;TServerSocket(</span><span class="number">7911</span><span>);&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello.Processor&nbsp;processor&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Hello.Processor(</span><span class="keyword">new</span><span>&nbsp;HelloImpl());&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Factory&nbsp;protFactory&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;TBinaryProtocol.Factory(</span><span class="keyword">true</span><span>,&nbsp;</span><span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TServer&nbsp;server&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;TThreadPoolServer(processor,&nbsp;serverTransport,&nbsp;protFactory);&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"Starting&nbsp;server&nbsp;on&nbsp;port&nbsp;7911&nbsp;..."</span><span>);&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.serve();&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><strong>通过下面代码启动client</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span>TTransport&nbsp;transport&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;TSocket(</span><span class="string">"localhost"</span><span>,&nbsp;</span><span class="number">7911</span><span>);&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TProtocol&nbsp;protocol&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;TBinaryProtocol(transport);&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello.Client&nbsp;client&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Hello.Client(protocol);&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport.open();&nbsp;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"Client&nbsp;calls&nbsp;hello()"</span><span>);&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.hello();&nbsp;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport.close();&nbsp;&nbsp;</span></li>
</ol>
</div>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/thrift-quick-start.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>quercus记录：php使用连接池访问数据库</title>
		<link>http://www.54chen.com/php-tech/quercus-php-connect-pool.html</link>
		<comments>http://www.54chen.com/php-tech/quercus-php-connect-pool.html#comments</comments>
		<pubDate>Fri, 04 Nov 2011 02:29:30 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[quercus]]></category>

		<guid isPermaLink="false">http://www.54chen.com/php-tech/quercus-php-connect-pool.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>上周记录了如何用quercus建立混合型项目。 http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html 这里来说说与数据库的访问，使用jndi得到连接池的好处。 JNDI (Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口，JNDI提供统一的客户端API，通过不同的访问提供者接口JNDI SPI的实现，由管理者将JNDI API映射为特定的命名服务和目录系统，使得Java应用程序可以和这些命名服务和目录服务之间进行交互。 正题 在quercus中可以随意使用mysql_connect与mysql_pconnect两个方法来连接数据库。 当在web.xml定义得有database相关的消息时，mysql_connect与mysql_pconnect都会自动忽略里面的参数设置，直接使用web.xml的定义。 添加jndi设置： vim WEB-INF/web.xml &#60;?xml&#160;version="1.0"&#160;encoding="utf-8"?&#62;&#160;&#160; &#60;web-app&#160;&#160;xmlns="http://caucho.com/ns/resin"&#62;&#160;&#160; &#160;&#160;&#60;description&#62;truth&#160;application&#60;/description&#62;&#160;&#160; &#160;&#160;&#60;database&#160;jndi-name="jdbc/mysql"&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;driver&#160;type="com.mysql.jdbc.Driver"&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#60;url&#62;jdbc:mysql://192.168.1.5:3306/truth?useUnicode=true&#38;amp;characterEncoding=utf-8&#60;/url&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#60;user&#62;你的用户名&#60;/user&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#60;password&#62;你的密码&#60;/password&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#60;init-param&#160;useUnicode="true"/&#62;&#160;&#60;!--实践证明这个是不管用的，因为quercus写土了，全用的latin1字符集，后面再说--&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;/driver&#62;&#160;&#160; &#160;&#160;&#60;/database&#62;&#160;&#160; 使用的是resin4，需要继续在web.xml的servlet段里增加： &#60;init-param&#62;&#160;&#160; &#160;&#160;&#60;param-name&#62;database&#60;/param-name&#62;&#160;&#160; &#160;&#160;&#60;param-value&#62;jdbc/mysql&#60;/param-value&#62;&#160;&#160; &#60;/init-param&#62;&#160;&#160; 这里注意，param-value与上面的jndi-name对应，mysql_connnect函数在web.xml里有这个init-param的定义的时候，将使用对应的jndi的设置。由此可得到连接池的好处。 上面的例子只使用了jdbc的基础驱动，如果向下面的配置，自然就得到了pool: 例子1: &#60;database&#62;&#160;&#160; &#160;&#160;&#60;jndi-name&#62;jdbc/mysql&#60;/jndi-name&#62;&#160;&#160; &#160;&#160;&#60;driver&#62;&#160;&#60;type&#62;com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource&#60;/type&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;url&#62;jdbc:mysql://localhost:3306/dbname&#60;/url&#62;&#160;&#160; &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://www.caucho.com/wp-content/themes/caucho/images/caucho-logo.png" alt="java php quercus" /><br />
上周记录了如何用quercus建立混合型项目。<br />
<a href="http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html">http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html</a><br />
这里来说说与数据库的访问，使用jndi得到连接池的好处。</p>
<p><strong>JNDI</strong><br />
(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口，JNDI提供统一的客户端API，通过不同的访问提供者接口JNDI SPI的实现，由管理者将JNDI API映射为特定的命名服务和目录系统，使得Java应用程序可以和这些命名服务和目录服务之间进行交互。</p>
<p><strong>正题</strong><br />
在quercus中可以随意使用mysql_connect与mysql_pconnect两个方法来连接数据库。<br />
当在web.xml定义得有database相关的消息时，mysql_connect与mysql_pconnect都会自动忽略里面的参数设置，直接使用web.xml的定义。</p>
<p><strong>添加jndi设置：</strong><br />
vim WEB-INF/web.xml</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"utf-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span><span class="tag">&lt;</span><span class="tag-name">web-app</span><span>&nbsp;&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://caucho.com/ns/resin"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">description</span><span class="tag">&gt;</span><span>truth&nbsp;application</span><span class="tag">&lt;/</span><span class="tag-name">description</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">database</span><span>&nbsp;</span><span class="attribute">jndi-name</span><span>=</span><span class="attribute-value">"jdbc/mysql"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">driver</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"com.mysql.jdbc.Driver"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url</span><span class="tag">&gt;</span><span>jdbc:mysql://192.168.1.5:3306/truth?</span><span class="attribute">useUnicode</span><span>=</span><span class="attribute-value">true</span><span>&amp;amp;</span><span class="attribute">characterEncoding</span><span>=</span><span class="attribute-value">utf</span><span>-8</span><span class="tag">&lt;/</span><span class="tag-name">url</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">user</span><span class="tag">&gt;</span><span>你的用户名</span><span class="tag">&lt;/</span><span class="tag-name">user</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">password</span><span class="tag">&gt;</span><span>你的密码</span><span class="tag">&lt;/</span><span class="tag-name">password</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">init-param</span><span>&nbsp;</span><span class="attribute">useUnicode</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">/&gt;</span><span>&nbsp;</span><span class="comments">&lt;!--实践证明这个是不管用的，因为quercus写土了，全用的latin1字符集，后面再说--&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">driver</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">database</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>使用的是resin4，需要继续在web.xml的servlet段里增加：</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>database</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>jdbc/mysql</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span><span class="tag">&lt;/</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>这里注意，param-value与上面的jndi-name对应，mysql_connnect函数在web.xml里有这个init-param的定义的时候，将使用对应的jndi的设置。由此可得到连接池的好处。</p>
<p>上面的例子只使用了jdbc的基础驱动，如果向下面的配置，自然就得到了pool:<br />
<strong>例子1:</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">database</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">jndi-name</span><span class="tag">&gt;</span><span>jdbc/mysql</span><span class="tag">&lt;/</span><span class="tag-name">jndi-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">driver</span><span class="tag">&gt;</span><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">type</span><span class="tag">&gt;</span><span>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</span><span class="tag">&lt;/</span><span class="tag-name">type</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url</span><span class="tag">&gt;</span><span>jdbc:mysql://localhost:3306/dbname</span><span class="tag">&lt;/</span><span class="tag-name">url</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">user</span><span class="tag">&gt;</span><span>username</span><span class="tag">&lt;/</span><span class="tag-name">user</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">password</span><span class="tag">&gt;</span><span>password</span><span class="tag">&lt;/</span><span class="tag-name">password</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">init-param</span><span>&nbsp;</span><span class="attribute">useUnicode</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">driver</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">database</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><strong>例子2:</strong></p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">database</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">jndi-name</span><span class="tag">&gt;</span><span>jdbc/mysql</span><span class="tag">&lt;/</span><span class="tag-name">jndi-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">driver</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"org.gjt.mm.mysql.Driver"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url</span><span class="tag">&gt;</span><span>jdbc:mysql://localhost:3306/test</span><span class="tag">&lt;/</span><span class="tag-name">url</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">user</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">user</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">password</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">password</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">driver</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">prepared-statement-cache-size</span><span class="tag">&gt;</span><span>8</span><span class="tag">&lt;/</span><span class="tag-name">prepared-statement-cache-size</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">max-connections</span><span class="tag">&gt;</span><span>20</span><span class="tag">&lt;/</span><span class="tag-name">max-connections</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">max-idle-time</span><span class="tag">&gt;</span><span>30s</span><span class="tag">&lt;/</span><span class="tag-name">max-idle-time</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">database</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>这些简单的配置，都可以让php轻松跑在连接池上。<br />
<strong>问题所在：</strong><br />
quercus写土了，没有在用户设置为unicode的时候来解析用户的输入，到处是hard code的latin1。（本来在GAE里使用这东西的人挺多的，可惜吧，AGE被盾了，然后quercus反馈latin1问题的人也不多，唉。）</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span>com.caucho.quercus.lib.db.JdbcConnectionResource:&nbsp;</span><span class="number">94</span><span>&nbsp;&nbsp;</span><span class="number">348</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>com.caucho.quercus.lib.db.Mysqli:<span class="number">229</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>上面三处修改为utf8即可。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/php-tech/quercus-php-connect-pool.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>quercus记录：php和java的混合型项目建立手记</title>
		<link>http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html</link>
		<comments>http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html#comments</comments>
		<pubDate>Tue, 25 Oct 2011 13:30:55 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[quercus]]></category>

		<guid isPermaLink="false">http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>创业公司参与项目的人口众多、背景不一，目前市场上的主流方向为php与java，很多时候java工程师恨铁不成钢，php工程师也无可奈何。于是便有了此文，讲述如何使用quercus创建php java混合型项目。 quercus是什么？ quercus是Caucho公司针对php语言的java实现，100%完成了php5的解析。是resin内建支持的功能。同时，因为使用了resin，使得php可以很容易得到连接池、分布式session、负载均衡等功能。使用resin的php项目可以更加安全，不存在很多fastcgi的问题。 性能如何？ 官方：用mediawiki与drupal来做实验，要比mod_php快4倍。 有一个编译选项，在resin专业版里支持，可以把php转成java class，得到更高性能。 新建一个java项目混合php项目 web.xml是关键，里面声明了*.php文件的访问都以com.caucho.quercus.servlet.QuercusServlet来执行。 &#60;?xml&#160;version="1.0"&#160;encoding="UTF-8"?&#62;&#160;&#160; &#60;web-app&#160;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&#160;&#160; &#160;&#160;&#160;&#160;xmlns="http://java.sun.com/xml/ns/javaee"&#160;xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&#160;&#160; &#160;&#160;&#160;&#160;xsi:schemaLocation="http://java.sun.com/xml/ns/javaee&#160;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&#160;&#160; &#160;&#160;&#160;&#160;id="WebApp_ID"&#160;version="2.5"&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;display-name&#62;testquercus&#60;/display-name&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;welcome-file-list&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;welcome-file&#62;index.html&#60;/welcome-file&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;welcome-file&#62;index.php&#60;/welcome-file&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;/welcome-file-list&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;servlet&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;servlet-name&#62;Quercus&#160;Servlet&#60;/servlet-name&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;servlet-class&#62;com.caucho.quercus.servlet.QuercusServlet&#60;/servlet-class&#62;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#60;/servlet&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;servlet-mapping&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;servlet-name&#62;Quercus&#160;Servlet&#60;/servlet-name&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;url-pattern&#62;*.php&#60;/url-pattern&#62;&#160;&#160; &#160;&#160;&#160;&#160;&#60;/servlet-mapping&#62;&#160;&#160;&#160; &#60;/web-app&#62;&#160;&#160; 所有的php文件放在webapp下，所有的java文件还放到java目录里。 如何混合java到php中? 在java目录新建类Test54Chen，生成后位置： WEB-INF/classes/com/chen/FrameWork.class /**&#160; &#160;*&#160;@author&#160;54chen(陈臻)&#160;[chenzhen@xiaomi.com&#160;czhttp@gmail.com]&#160; &#160;*&#160;@since&#160;2011-10-25&#160;下午08:40:49&#160; &#160;*/&#160;&#160; package&#160;com.chen;&#160;&#160; &#160;&#160; public&#160;class&#160;FrameWork&#160;{&#160;&#160; &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>创业公司参与项目的人口众多、背景不一，目前市场上的主流方向为php与java，很多时候java工程师恨铁不成钢，php工程师也无可奈何。于是便有了此文，讲述如何使用quercus创建php java混合型项目。</p>
<p><strong>quercus是什么？</strong><br />
quercus是Caucho公司针对php语言的java实现，100%完成了php5的解析。是resin内建支持的功能。同时，因为使用了resin，使得php可以很容易得到连接池、分布式session、负载均衡等功能。使用resin的php项目可以更加安全，不存在很多fastcgi的问题。</p>
<p><strong>性能如何？</strong><br />
官方：用mediawiki与drupal来做实验，要比mod_php快<strong>4</strong>倍。<br />
有一个编译选项，在resin专业版里支持，可以把php转成java class，得到更高性能。</p>
<p><strong>新建一个java项目混合php项目</strong><br />
web.xml是关键，里面声明了*.php文件的访问都以com.caucho.quercus.servlet.QuercusServlet来执行。</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-xml" start="1">
<li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span><span class="tag">&lt;</span><span class="tag-name">web-app</span><span>&nbsp;</span><span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">"http://www.w3.org/2001/XMLSchema-instance"</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://java.sun.com/xml/ns/javaee"</span><span>&nbsp;</span><span class="attribute">xmlns:web</span><span>=</span><span class="attribute-value">"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xsi:schemaLocation</span><span>=</span><span class="attribute-value">"http://java.sun.com/xml/ns/javaee&nbsp;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">id</span><span>=</span><span class="attribute-value">"WebApp_ID"</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"2.5"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>testquercus</span><span class="tag">&lt;/</span><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">welcome-file-list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>index.html</span><span class="tag">&lt;/</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>index.php</span><span class="tag">&lt;/</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">welcome-file-list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>Quercus&nbsp;Servlet</span><span class="tag">&lt;/</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>com.caucho.quercus.servlet.QuercusServlet</span><span class="tag">&lt;/</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>Quercus&nbsp;Servlet</span><span class="tag">&lt;/</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>*.php</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
<li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">web-app</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>所有的php文件放在webapp下，所有的java文件还放到java目录里。</p>
<p>如何混合java到php中?<br />
在java目录新建类Test54Chen，生成后位置：<br />
WEB-INF/classes/com/chen/FrameWork.class</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-j" start="1">
<li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
<li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;54chen(陈臻)&nbsp;[chenzhen@xiaomi.com&nbsp;czhttp@gmail.com]</span>&nbsp;</span></li>
<li class="alt"><span><span class="comment">&nbsp;*&nbsp;@since&nbsp;2011-10-25&nbsp;下午08:40:49</span>&nbsp;</span></li>
<li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
<li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.chen;&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;</span></li>
<li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;FrameWork&nbsp;{&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;go(String&nbsp;who)&nbsp;{&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;who&nbsp;+&nbsp;</span><span class="string">"&nbsp;gogogo!"</span><span>;&nbsp;&nbsp;</span></span></li>
<li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
<li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>在webapp新建php文件：<br />
test.php</p>
<div class="chen-hl">
<div class="bar"></div>
<ol class="dp-c" start="1">
<li class="alt"><span><span>&lt;?php&nbsp;&nbsp;</span></span></li>
<li class=""><span>import&nbsp;com.chen.FrameWork;&nbsp;&nbsp;</span></li>
<li class="alt"><span><span class="vars">$f</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;FrameWork();&nbsp;&nbsp;</span></span></li>
<li class=""><span>var_dump(<span class="vars">$f</span><span>-&gt;go(</span><span class="string">"ohohoh"</span><span>));&nbsp;&nbsp;</span></span></li>
<li class="alt"><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>配置到resin中：<br />
目标文件夹指到webapp。</p>
<p>访问：test.php</p>
<p>截图：<br />
1.整个项目的情况<br />
<img src="http://img04.taobaocdn.com/imgextra/i4/T1dG1wXjBcXXa0Lrvb_092913.jpg" alt="quercus" /><br />
2.访问的结果<br />
<img src="http://img01.taobaocdn.com/imgextra/i1/T115OvXmaaXXXqGHYb_092949.jpg" alt="quercus php java" /><br />
下一记：如何利用java做连接池提供给php使用。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>用supervisord管理杂乱的服务</title>
		<link>http://www.54chen.com/java-ee/supervisord-manage-service.html</link>
		<comments>http://www.54chen.com/java-ee/supervisord-manage-service.html#comments</comments>
		<pubDate>Wed, 21 Sep 2011 06:57:24 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[架构研究]]></category>
		<category><![CDATA[supervisord]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/supervisord-manage-service.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>Supervisord是用Python实现的一款非常实用的进程管理工具，在批量服务化管理时特别有效。 环境 centos python2.4 安装 wget http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0a10.tar.gz#md5=99c6fbd45bade87301296b7a597fb68e tar zxvf supervisor-3.0a10.tar.gz cd supervisor-3.0a10 python setup.py install 如果上述遇到问题，请按如下操作。 依赖setuptools安装 wget http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg#md5=bd639f9b0eac4c42497034dec2ec0c2b sh setuptools-0.6c11-py2.4.egg 产生基础配置文件 echo_supervisord_conf > /etc/supervisord.conf 配置 [inet_http_server]前面的分号去掉; 定义port=192.168.1.1:8888 启动 supervisord -c /etc/supervisord.conf 查看 浏览器打开 http://192.168.1.1:8888 深入配置 [program:service] command=sh /opt/soft/service/run.sh ; &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://supervisord.org/_static/logo_hi.gif" alt="supervisord" /></p>
<p>Supervisord是用Python实现的一款非常实用的进程管理工具，在批量服务化管理时特别有效。</p>
<p><strong>环境</strong></p>
<p>centos<br />
python2.4</p>
<p><strong>安装 </strong></p>
<p>wget http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0a10.tar.gz#md5=99c6fbd45bade87301296b7a597fb68e</p>
<p>tar zxvf supervisor-3.0a10.tar.gz<br />
cd supervisor-3.0a10<br />
python setup.py install<br />
如果上述遇到问题，请按如下操作。</p>
<p><strong>依赖setuptools安装</strong></p>
<p>wget http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg#md5=bd639f9b0eac4c42497034dec2ec0c2b<br />
sh setuptools-0.6c11-py2.4.egg</p>
<p><strong>产生基础配置文件</strong></p>
<p>echo_supervisord_conf > /etc/supervisord.conf</p>
<p><strong>配置</strong></p>
<p>[inet_http_server]前面的分号去掉;<br />
定义port=192.168.1.1:8888</p>
<p><strong>启动</strong></p>
<p>supervisord -c /etc/supervisord.conf</p>
<p><strong>查看</strong></p>
<p>浏览器打开 http://192.168.1.1:8888<br />
<strong><br />
深入配置</strong></p>
<blockquote><p>[program:service]<br />
command=sh /opt/soft/service/run.sh  ; the program (relative uses PATH, can take args)<br />
process_name=%(program_name)s ; process_name expr (default %(program_name)s)<br />
numprocs=1                    ; number of processes copies to start (def 1)<br />
directory=/opt/soft/service/                ; directory to cwd to before exec (def no cwd)<br />
autostart=true                ; start at supervisord start (default: true)<br />
autorestart=true              ; retstart at unexpected quit (default: true)<br />
stopsignal=QUIT               ; signal used to kill process (default TERM)<br />
stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)</p></blockquote>
<p>以上配置了一个shell脚本的启动和stop过程。<br />
一般java程序都喜欢在一个shell脚本内初始化classpath，再执行java main。<br />
直接在shell中run java会出现stop失败的情况，在启动前添加 exec即可。</p>
<blockquote><p>#!/bin/sh<br />
export CLASSPATH=.<br />
for jarpath in `ls library/*.jar`<br />
do<br />
    CLASSPATH=$CLASSPATH:$jarpath<br />
done<br />
export CLASSPATH=$CLASSPATH<br />
exec java com.chen.main;
</p></blockquote>
<p><strong><br />
帮助</strong></p>
<blockquote><p>supervisord，初始启动Supervisord，启动、管理配置中设置的进程。<br />
supervisorctl stop programxxx，停止某一个进程(programxxx)，programxxx为[program:chatdemon]里配置的值，这个示例就是chatdemon。<br />
supervisorctl start programxxx，启动某个进程<br />
supervisorctl restart programxxx，重启某个进程<br />
supervisorctl stop all，停止全部进程，注：start、restart、stop都不会载入最新的配置文件。<br />
supervisorctl reload，载入最新的配置文件，并按新的配置启动、管理所有进程。<br />
supervisorctl  reread，当一个服务由自动启动修改为手动启动时执行一下就ok</p></blockquote>
<p><strong>如何添加进程不启动所有的服务进程</strong></p>
<blockquote><p>1）修改/etc/supervisord.conf<br />
2）supervisorctl  reread<br />
3）supervisorctl  add xxservice
</p></blockquote>
<p><strong>如何删除进程不启动所有的服务进程</strong></p>
<blockquote><p>1）修改/etc/supervisord.conf<br />
2）supervisorctl  reread<br />
3）supervisorctl  update
</p></blockquote>
<p>http://smarden.org/runit/runscripts.html 一些可参考的启动配置</p>
<p><strong>supervisord开机自启动</strong><br />
chkconfig --add supervisord #加为服务<br />
运行ntsysv，选中supervisord启动系统时跟着启动。<br />
[/etc/rc.d/init.d/supervisord]</p>
<blockquote><p>#!/bin/sh<br />
#<br />
# /etc/rc.d/init.d/supervisord<br />
#<br />
# Supervisor is a client/server system that<br />
# allows its users to monitor and control a<br />
# number of processes on UNIX-like operating<br />
# systems.<br />
#<br />
# chkconfig: - 64 36<br />
# description: Supervisor Server<br />
# processname: supervisord</p>
<p># Source init functions<br />
. /etc/rc.d/init.d/functions</p>
<p>prog="supervisord"</p>
<p>prefix="/usr/"<br />
exec_prefix="${prefix}"<br />
prog_bin="${exec_prefix}/bin/supervisord"<br />
PIDFILE="/var/run/$prog.pid"</p>
<p>start()<br />
{<br />
        echo -n $"Starting $prog: "<br />
        daemon $prog_bin --pidfile $PIDFILE<br />
        [ -f $PIDFILE ] &#038;&#038; success $"$prog startup" || failure $"$prog startup"<br />
        echo<br />
}</p>
<p>stop()<br />
{<br />
        echo -n $"Shutting down $prog: "<br />
        [ -f $PIDFILE ] &#038;&#038; killproc $prog || success $"$prog shutdown"<br />
        echo<br />
}</p>
<p>case "$1" in</p>
<p>  start)<br />
    start<br />
  ;;</p>
<p>  stop)<br />
    stop<br />
  ;;</p>
<p>  status)<br />
        status $prog<br />
  ;;</p>
<p>  restart)<br />
    stop<br />
    start<br />
  ;;</p>
<p>  *)<br />
    echo "Usage: $0 {start|stop|restart|status}"<br />
  ;;</p>
<p>esac
</p></blockquote>
<p><strong>注意 </strong><br />
不带参数运行supervisord是以daemon方式运行。<br />
把supervisord加入到开机启动项里就可以完成监控进程的功能了。<br />
当supervisord以非daemon方式运行时，杀掉supervisord后，被监控的进程也退出了。<br />
而以daemon方式运行，杀掉supervisord对被监控进程无影响。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/supervisord-manage-service.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>riak源码阅读手记 压力测试</title>
		<link>http://www.54chen.com/_linux_/riak-benchmark.html</link>
		<comments>http://www.54chen.com/_linux_/riak-benchmark.html#comments</comments>
		<pubDate>Thu, 15 Sep 2011 07:54:41 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[架构研究]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[riak]]></category>

		<guid isPermaLink="false">http://www.54chen.com/_linux_/riak-benchmark.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>基础环境： 三个台式机 一次操作： 操作一段购物车数据，先写包括3个货物的数据，然后取出来，再加上三个后存入。 压力结果： 1) 10个线程，无连接池化，每次新连接。PBClient。每次req包括上述一次操作里的一写一读一写三次。 Rate: 122 req/s Rate: 103 req/s Rate: 119 req/s Rate: 110 req/s Rate: 117 req/s Rate: 116 req/s Rate: 121 req/s Rate: 110 req/s Rate: 116 req/s Rate: 111 req/s Rate: 123 req/s &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p><img src="http://wiki.basho.com/images/logo_wiki.png" alt="erlang riak" /></p>
<p><strong>基础环境：</strong><br />
三个台式机</p>
<p><strong>一次操作：</strong><br />
操作一段购物车数据，先写包括3个货物的数据，然后取出来，再加上三个后存入。</p>
<p><strong>压力结果：</strong><br />
1) 10个线程，无连接池化，每次新连接。PBClient。每次req包括上述一次操作里的一写一读一写三次。</p>
<p>Rate: 122 req/s<br />
Rate: 103 req/s<br />
Rate: 119 req/s<br />
Rate: 110 req/s<br />
Rate: 117 req/s<br />
Rate: 116 req/s<br />
Rate: 121 req/s<br />
Rate: 110 req/s<br />
Rate: 116 req/s<br />
Rate: 111 req/s<br />
Rate: 123 req/s<br />
Rate: 122 req/s<br />
Rate: 119 req/s<br />
Rate: 123 req/s<br />
Rate: 110 req/s</p>
<p>三个节点平均load为小于1。</p>
<p>2）50个线程，无连接池化，每次新连接。PBClient。每次req包括上述一次操作里的一写一读一写三次。</p>
<p>Rate: 124 req/s<br />
Rate: 119 req/s<br />
Rate: 124 req/s<br />
Rate: 127 req/s<br />
Rate: 114 req/s<br />
Rate: 103 req/s<br />
Rate: 93 req/s<br />
Rate: 110 req/s<br />
Rate: 120 req/s<br />
Rate: 117 req/s<br />
Rate: 121 req/s<br />
Rate: 119 req/s<br />
Rate: 109 req/s</p>
<p>三个节点平均load为1。接入节点load略高。</p>
<p>3）100个线程，无连接池化，每次新连接。PBClient。每次req包括上述一次操作里的一写一读一写三次。</p>
<p>Rate: 89 req/s<br />
Rate: 109 req/s<br />
Rate: 97 req/s<br />
Rate: 108 req/s<br />
Rate: 105 req/s<br />
Rate: 105 req/s<br />
Rate: 105 req/s<br />
Rate: 106 req/s<br />
Rate: 104 req/s<br />
Rate: 106 req/s<br />
Rate: 103 req/s<br />
Rate: 91 req/s</p>
<p>三个节点平均load为1。接入节点load为大于2。</p>
<p>以上数据为从一个节点打入数据，接入节点负载略高。无池化，在建立连接浪费可能比较多。进行改进，合并发起连接的过程和接入节变成所有节点。</p>
<p>1）三个节点共同接入，最大连接数150，相当于池化连接，150个线程，PBClient。<br />
Rate: 271 req/s<br />
Rate: 275 req/s<br />
Rate: 256 req/s<br />
Rate: 276 req/s<br />
Rate: 287 req/s<br />
Rate: 288 req/s<br />
Rate: 280 req/s<br />
Rate: 293 req/s<br />
Rate: 279 req/s<br />
Rate: 291 req/s<br />
Rate: 254 req/s<br />
Rate: 287 req/s<br />
Rate: 288 req/s<br />
Rate: 283 req/s<br />
Rate: 292 req/s</p>
<p>平均load 1，无明显负载偏移。</p>
<p>2）三个节点共同接入，最大连接数300，相当于池化连接，300个线程，PBClient。<br />
Rate: 273 req/s<br />
Rate: 234 req/s<br />
Rate: 264 req/s<br />
Rate: 264 req/s<br />
Rate: 263 req/s<br />
Rate: 277 req/s<br />
Rate: 253 req/s<br />
Rate: 250 req/s<br />
Rate: 258 req/s<br />
Rate: 218 req/s<br />
Rate: 237 req/s<br />
Rate: 268 req/s<br />
Rate: 232 req/s<br />
Rate: 245 req/s<br />
Rate: 247 req/s</p>
<p>平均load 1.5，无明显负载偏移。</p>
<p>同机器的mysql性能压测结论为：http://www.54chen.com/java-ee/amoeba-benchmark-report.html<br />
可得到比mysql qps高3倍以上（因为riak的压测中每req为2写1读）。</p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/_linux_/riak-benchmark.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>淘宝分布式数据库系统OceanBase观后闲话小记</title>
		<link>http://www.54chen.com/java-ee/taobao-oceanbase-intro.html</link>
		<comments>http://www.54chen.com/java-ee/taobao-oceanbase-intro.html#comments</comments>
		<pubDate>Thu, 01 Sep 2011 02:11:06 +0000</pubDate>
		<dc:creator>54chen</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[架构研究]]></category>
		<category><![CDATA[oceanbase]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/taobao-oceanbase-intro.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>http://code.taobao.org/trac/OceanBase/wiki/intro 讲得还比较细。 数据模型： oceanBase采用类似cassandra的tablet/sstable数据模型实现，简单说就是bigtable的数据模型。 系统目标： 其目标比较明确，是一个强CA类系统，P（分区能力）。目标是强一致性、高可用性，分区能力稍弱。从文档上看，他们并不担心的快速的数据增长量。 去中心化： 见图： RootServer/UpdateServer是一个中心节点，这个有死翘翘的可能性（好吧，他们搞了一主一备）。 支持的操作： 基础的merge/join都可以，一般使用上是够用了。DDL DML的定义基本上是还需要发展的。另外如果开源出来了，广泛项目使用意义上，还需要支持UDF user defined function，实际上把mysql文档实现一遍就ok了。 继续观望，欢迎抛砖。向开源的项目致敬。<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>http://code.taobao.org/trac/OceanBase/wiki/intro</p>
<p>讲得还比较细。</p>
<p><strong>数据模型：</strong><br />
oceanBase采用类似cassandra的tablet/sstable数据模型实现，简单说就是bigtable的数据模型。</p>
<p><strong>系统目标：</strong><br />
其目标比较明确，是一个强CA类系统，P（分区能力）。目标是强一致性、高可用性，分区能力稍弱。从文档上看，他们并不担心的快速的数据增长量。</p>
<p><strong>去中心化：</strong><br />
见图：<br />
<img src="http://code.taobao.org/trac/OceanBase/raw-attachment/wiki/intro/test.JPG" alt="taobao oceanbase" /><br />
RootServer/UpdateServer是一个中心节点，这个有死翘翘的可能性（好吧，他们搞了一主一备）。</p>
<p><strong>支持的操作：</strong><br />
基础的merge/join都可以，一般使用上是够用了。DDL DML的定义基本上是还需要发展的。另外如果开源出来了，广泛项目使用意义上，还需要支持UDF user defined function，实际上把mysql文档实现一遍就ok了。</p>
<p><strong>继续观望，欢迎抛砖。向开源的项目致敬。</strong></p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/taobao-oceanbase-intro.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

