﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-西津渡日志 软件架构 ，垂直搜索, 敏捷项目,ecommerce-随笔分类-J2EE Technich</title><link>http://www.blogjava.net/stephen80/category/5942.html</link><description>软件架构,敏捷项目,垂直搜索,ecommerce,电子商务</description><language>zh-cn</language><lastBuildDate>Wed, 26 Sep 2007 06:43:01 GMT</lastBuildDate><pubDate>Wed, 26 Sep 2007 06:43:01 GMT</pubDate><ttl>60</ttl><item><title>几个性能的注意点</title><link>http://www.blogjava.net/stephen80/archive/2007/09/26/148247.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Wed, 26 Sep 2007 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/26/148247.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/148247.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/26/148247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/148247.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/148247.html</trackback:ping><description><![CDATA[<br />
http://www.xker.com/edu/dev/104/0652109570034579.html<br />
<br />
<span class="style1">
<h3><font color="#ff0000">十二、不要在循环中调用synchronized(</font>同步)方法 </h3>
<br />
方法的同步需要消耗相当大的资料，在一个循环中调用它绝对不是一个好主意。<br />
<br />
例子：<br />
import java.util.Vector;<br />
public class SYN {<br />
&nbsp;&nbsp;&nbsp;&nbsp;public synchronized void method (Object o) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;private void test () {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; vector.size(); i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method (vector.elementAt(i));&nbsp;&nbsp;&nbsp;&nbsp;// violation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;private Vector vector = new Vector (5, 5);<br />
}<br />
<br />
更正：<br />
不要在循环体中调用同步方法，如果必须同步的话，推荐以下方式：<br />
import java.util.Vector;<br />
public class SYN {<br />
&nbsp;&nbsp;&nbsp;&nbsp;public void method (Object o) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
private void test () {<br />
&nbsp;&nbsp;&nbsp;&nbsp;synchronized{//在一个同步块中执行非同步方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; vector.size(); i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method (vector.elementAt(i));&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;private Vector vector = new Vector (5, 5);<br />
}<br />
<br />
<br />
</span><span class="style1">
<h3><font color="#ff0000">十三、将try/catch</font>块移出循环</h3>
<br />
把try/catch块放入循环体内，会极大的影响性能，如果编译JIT被关闭或者你所使用的是一个不带JIT的JVM，性能会将下降21%之多!<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
例子：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
import java.io.FileInputStream;<br />
public class TRY {<br />
&nbsp;&nbsp;&nbsp;&nbsp;void method (FileInputStream fis) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; size; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// violation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sum += fis.read();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (Exception e) {}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;private int _sum;<br />
}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
更正：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
将try/catch块移出循环&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;void method (FileInputStream fis) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; size; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sum += fis.read();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (Exception e) {}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
参考资料：<br />
Peter Haggar: "Practical Java - Programming Language Guide".<br />
Addison Wesley, 2000, pp.81 &#8211; 83<br />
<br />
<br />
</span><span class="style1">
<h3><font color="#ff0000">十九、不要在循环体中实例化变量</font></h3>
<br />
在循环体中实例化临时变量将会增加内存消耗<br />
<br />
例子：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
import java.util.Vector;<br />
public class LOOP {<br />
&nbsp;&nbsp;&nbsp;&nbsp;void method (Vector v) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i=0;i &lt; v.size();i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object o = new Object();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o = v.elementAt(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
更正：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
在循环体外定义变量，并反复使用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
import java.util.Vector;<br />
public class LOOP {<br />
&nbsp;&nbsp;&nbsp;&nbsp;void method (Vector v) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object o;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i=0;i&lt;v.size();i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o = v.elementAt(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span class="style1">
<h3><font color="#ff0000">二十一、尽可能的使用栈变量</font></h3>
<br />
如果一个变量需要经常访问，那么你就需要考虑这个变量的作用域了。static? local?还是实例变量？访问静态变量和实例变量将会比访问局部变量多耗费2-3个时钟周期。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
例子：<br />
public class USV {<br />
&nbsp;&nbsp;&nbsp;&nbsp;void getSum (int[] values) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i=0; i &lt; value.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sum += value[i];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// violation.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;void getSum2 (int[] values) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i=0; i &lt; value.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_staticSum += value[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;private int _sum;<br />
&nbsp;&nbsp;&nbsp;&nbsp;private static int _staticSum;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
更正：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
如果可能，请使用局部变量作为你经常访问的变量。<br />
你可以按下面的方法来修改getSum()方法：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
void getSum (int[] values) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;int sum = _sum;&nbsp;&nbsp;// temporary local variable.<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (int i=0; i &lt; value.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum += value[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;_sum = sum;<br />
}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
参考资料：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
Peter Haggar: "Practical Java - Programming Language Guide".<br />
Addison Wesley, 2000, pp.122 &#8211; 125<br />
<br />
</span><span class="style1"><br />
<br />
</span>
<img src ="http://www.blogjava.net/stephen80/aggbug/148247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-26 10:59 <a href="http://www.blogjava.net/stephen80/archive/2007/09/26/148247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大量字符串操作中的性能问题</title><link>http://www.blogjava.net/stephen80/archive/2007/09/26/148224.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Wed, 26 Sep 2007 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/26/148224.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/148224.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/26/148224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/148224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/148224.html</trackback:ping><description><![CDATA[http://www.javafan.net/menu/jczs/200701/20070108185247.html<br />
<br />
1). 简单的认为 .append() 效率好于 "+" 是错误的！<br />
&nbsp;&nbsp;&nbsp; 2). 不要使用 new 创建 String<br />
&nbsp;&nbsp;&nbsp; 3). 注意 .intern() 的使用<br />
&nbsp;&nbsp;&nbsp; 4). 在编译期能够确定字符串值的情况下，使用"+"效率最高<br />
&nbsp;&nbsp;&nbsp; 5). 避免使用 "+=" 来构造字符串<br />
&nbsp;&nbsp;&nbsp; 6). 在声明StringBuffer对象的时候，指定合适的capacity，不要使用默认值(18)<br />
&nbsp;&nbsp;&nbsp; 7). 注意以下二者的区别不一样<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - String s = "a" + "b";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - String s = "a";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s += "b";<br />
<br />
<strong>关键点</strong><br />
1.&nbsp;无论何时只要可能的话使用字符串字面量来常见字符串而不是使用new关键字来创建字符串。<br />
2.&nbsp;无论何时当你要使用new关键字来创建很多内容重复的字符串的话，请使用String.intern()方法。<br />
3.&nbsp;+操作符会为字符串连接提供最佳的性能――当字符串是在编译期决定的时候。<br />
4.&nbsp;如果字符串在运行期决定，使用一个合适的初期容量值初始化的StringBuffer会为字符串连接提供最佳的性能。<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/148224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-26 10:14 <a href="http://www.blogjava.net/stephen80/archive/2007/09/26/148224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重归简约</title><link>http://www.blogjava.net/stephen80/archive/2007/09/14/145158.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 14 Sep 2007 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/14/145158.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/145158.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/14/145158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/145158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/145158.html</trackback:ping><description><![CDATA[经过一段时间的折腾。一堆东西能避免使用就避免使用。<br />
<br />
<br />
castor, dwr, acegi, 几乎扔掉。<br />
<br />
spring ，hibernate 也只用在适当的场合。<br />
<br />
struts2 ,也只用在适当的场合。<br />
<br />
<br />
一些偷懒的技术，尽量避免。<br />
opensession in view.<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/145158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-14 15:52 <a href="http://www.blogjava.net/stephen80/archive/2007/09/14/145158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重新评估 solr</title><link>http://www.blogjava.net/stephen80/archive/2007/09/07/143491.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 07 Sep 2007 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/07/143491.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/143491.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/07/143491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/143491.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/143491.html</trackback:ping><description><![CDATA[<h3 class="boxed">一直困扰于 indexSearcher 的重新 new ,query filter 的cache 没了。</h3>
重读solr ，发现非常好。也许我应该考虑用 solr 了。<br />
<br />
<h3 class="boxed"><br />
</h3>
<h3 class="boxed">Caching</h3>
<ul>
    <li>Configurable Query Result, Filter, and Document cache instances</li>
    <li>Pluggable Cache implementations</li>
    <li>Cache warming in background
    <ul>
        <li>
        When a new searcher is opened, configurable searches are run against it
        in order to warm it up to avoid slow first hits. During warming, the
        current searcher handles live requests. </li>
    </ul>
    </li>
    <li>Autowarming in background
    <ul>
        <li>The
        most recently accessed items in the caches of the current searcher are
        re-populated in the new searcher, enabing high cache hit rates across
        index/searcher changes.</li>
    </ul>
    </li>
    <li>Fast/small filter implementation</li>
    <li>User level caching with autowarming support</li>
</ul>
9-26<br />
&nbsp; 今天，我发现，我可以用不同的方式实现cache ，也许在我的情况下比solr 的方式更好。<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/143491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-07 17:18 <a href="http://www.blogjava.net/stephen80/archive/2007/09/07/143491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于j2ee 性能的一个课题</title><link>http://www.blogjava.net/stephen80/archive/2007/09/06/143275.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Thu, 06 Sep 2007 12:55:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/06/143275.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/143275.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/06/143275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/143275.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/143275.html</trackback:ping><description><![CDATA[在一台 8G ，2 dual core cpu 的2u ， struts2+spring+hibernate .<br />
开源软件，用什么样的 proxy, cache, web container 达到最好的性能。<br />
<br />
瓶颈在于：<br />
&nbsp;tomcat 只能用到2g ram<br />
<br />
经过研究，<br />
xmx 在windows 2003,jdk1.5.06 ,1999M. <br />
所以如果是一台单纯的web container server 就不要搞8G了， 1U 的4G ok.<br />
<br />
需要用到那么高的性能场景，只能是两台1U做 banlance.<br />
<br />
再次研究<br />
用 session stick ，balance 2 个　tomcat ,应该可以达到较好的性能。<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/143275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-06 20:55 <a href="http://www.blogjava.net/stephen80/archive/2007/09/06/143275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c3p0 ,hibernate 配置，spring</title><link>http://www.blogjava.net/stephen80/archive/2007/09/06/143150.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Thu, 06 Sep 2007 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/06/143150.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/143150.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/06/143150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/143150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/143150.html</trackback:ping><description><![CDATA[http://www.mchange.com/projects/c3p0/#configuration_properties<br />
<br />
<br />
spring+hibernate<br />
&nbsp;&nbsp;&nbsp; <br />
连接池<br />
<br />
&lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"&gt;<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="driverClass" value="com.mysql.jdbc.Driver"/&gt;<br />
&lt;property name="jdbcUrl" value="jdbc:mysql://localhost:3306/openfire"/&gt;<br />
&lt;property name="user" value="root"/&gt;<br />
&lt;property name="password" value="password"/&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&lt;/beans&gt;<br />
<br />
tomcat jndi:<br />
<br />
&lt;Resource auth="Container"
description="DB Connection"
driverClass="com.mysql.jdbc.Driver"
maxPoolSize="4"
minPoolSize="2"
acquireIncrement="1"
name="jdbc/TestDB"
user="test"
password="ready2go"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:mysql://localhost:3306/test?autoReconnect=true" /&gt;<br />
<br />
<br />
<br />
<br />
<br />
<br />
建议：c3p0.propertyies<br />
<br />
c3p0.acquireIncrement=5&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
c3p0.idleConnectionTestPeriod=1800&nbsp;&nbsp;&nbsp; <br />
c3p0.initialPoolSize=5&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
c3p0.maxIdleTime=1000<br />
c3p0.maxPoolSize=20&nbsp;&nbsp;&nbsp; <br />
c3p0.maxStatements=100&nbsp;&nbsp;&nbsp; <br />
c3p0.minPoolSize=5<br />
<br />
<br />
just hibernate:<br />
hibernate.connection.provider_class＝org.hibernate.connection.C3P0ConnectionProvider <br />
<br />
<br />
调优：在我的环境下<br />
maxpoolSize 30, 1822 ， 15， 1655 。 可能和测试过程有关。<br />
maxStatement 加上， 3600。严重影响性能。<br />
<br />
扩大 xms xmx 512 ,957<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/143150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-06 13:16 <a href="http://www.blogjava.net/stephen80/archive/2007/09/06/143150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tree ，hibernate,  db hierarchical </title><link>http://www.blogjava.net/stephen80/archive/2007/09/05/142887.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Wed, 05 Sep 2007 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/05/142887.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/142887.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/05/142887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/142887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/142887.html</trackback:ping><description><![CDATA[tree 结构很常见，当persist 到数据库中。<br />
<br />
有些操作，在db 中更好。<br />
<br />
1。取得所有的叶子节点。<br />
<br />
SELECT Name FROM Projects p
WHERE NOT EXISTS(
SELECT * FROM Projects
WHERE Parent=p.VertexId)<br />
<br />
2。multilevel operation ，用数据库的辅助表， 用triger 。<br />
<pre>CREATE TABLE ProjectPaths(<br />
<br />
VertexId INTEGER,<br />
<br />
Depth INTEGER,<br />
<br />
Path VARCHAR(300) 。<br />
<br />
<br />
<br />
)</pre>
3. 用 hibernate 时，如果 stack over flow,考虑用 stack 代替recursive algrithm<br />
<br />
<pre><strong>public</strong> <strong>void</strong> <span class="color2040A0">traverseDepthFirst</span><span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">AST</span> <span class="color2040A0">ast</span> <span class="color4444FF"><strong>)</strong></span><br />
<span class="color4444FF"><strong>{</strong></span><br />
<span class="color444444">//  Root AST node cannot be null or</span><br />
<span class="color444444">//  traversal of its subtree is impossible.</span><br />
<strong>if</strong> <span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">ast</span> <span class="color4444FF">=</span><span class="color4444FF">=</span> <strong>null</strong> <span class="color4444FF"><strong>)</strong></span><br />
<span class="color4444FF"><strong>{</strong></span><br />
<strong>throw</strong> <strong>new</strong> <span class="color2040A0">IllegalArgumentException</span><span class="color4444FF"><strong>(</strong></span><br />
<span class="color008000">"node to traverse cannot be null!"</span> <span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<span class="color4444FF"><strong>}</strong></span><br />
<span class="color444444">//  Map to hold parents of each</span><br />
<span class="color444444">//  AST node.  Unfortunately the AST</span><br />
<span class="color444444">//  interface does not provide a method</span><br />
<span class="color444444">//  for finding the parent of a node, so</span><br />
<span class="color444444">//  we use the Map to save them.</span><br />
<br />
<span class="color2040A0">Map</span> <span class="color2040A0">parentNodes</span> <span class="color4444FF">=</span> <strong>new</strong> <span class="color2040A0">HashMap</span><span class="color4444FF"><strong>(</strong></span><span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<span class="color444444">//  Start tree traversal with first child</span><br />
<span class="color444444">//  of the specified root AST node.</span><br />
<br />
<span class="color2040A0">AST</span> <span class="color2040A0">currentNode</span> <span class="color4444FF">=</span> <span class="color2040A0">ast</span>.<span class="color2040A0">getFirstChild</span><span class="color4444FF"><strong>(</strong></span><span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<span class="color444444">//  Remember parent of first child.</span><br />
<br />
<span class="color2040A0">parentNodes</span>.<span class="color2040A0">put</span><span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">currentNode</span> , <span class="color2040A0">ast</span> <span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<span class="color444444">//  Iterate through nodes, simulating</span><br />
<span class="color444444">//  recursive tree traversal, and add them</span><br />
<span class="color444444">//  to queue in proper order for later</span><br />
<span class="color444444">//  linear traversal.  This "flattens" the</span><br />
<span class="color444444">//  into a linear list of nodes which can</span><br />
<span class="color444444">//  be visited non-recursively.</span><br />
<br />
<strong>while</strong> <span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">currentNode</span> <span class="color4444FF">!</span><span class="color4444FF">=</span> <strong>null</strong> <span class="color4444FF"><strong>)</strong></span><br />
<span class="color4444FF"><strong>{</strong></span><br />
<span class="color444444">//  Visit the current node.</span><br />
<br />
<span class="color2040A0">strategy</span>.<span class="color2040A0">visit</span><span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">currentNode</span> <span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<span class="color444444">//  Move down to current node's first child</span><br />
<span class="color444444">//  if it exists.</span><br />
<br />
<span class="color2040A0">AST</span> <span class="color2040A0">childNode</span>   <span class="color4444FF">=</span> <span class="color2040A0">currentNode</span>.<span class="color2040A0">getFirstChild</span><span class="color4444FF"><strong>(</strong></span><span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<span class="color444444">//  If the child is not null, make it</span><br />
<span class="color444444">//  the current node.</span><br />
<br />
<strong>if</strong> <span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">childNode</span> <span class="color4444FF">!</span><span class="color4444FF">=</span> <strong>null</strong> <span class="color4444FF"><strong>)</strong></span><br />
<span class="color4444FF"><strong>{</strong></span><br />
<span class="color444444">//  Remember parent of the child.</span><br />
<br />
<span class="color2040A0">parentNodes</span>.<span class="color2040A0">put</span><span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">childNode</span> , <span class="color2040A0">currentNode</span> <span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<span class="color444444">//  Make child the current node.</span><br />
<br />
<span class="color2040A0">currentNode</span> <span class="color4444FF">=</span> <span class="color2040A0">childNode</span><span class="color4444FF">;</span><br />
<br />
<strong>continue</strong><span class="color4444FF">;</span><br />
<span class="color4444FF"><strong>}</strong></span><br />
<br />
<strong>while</strong> <span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">currentNode</span> <span class="color4444FF">!</span><span class="color4444FF">=</span> <strong>null</strong> <span class="color4444FF"><strong>)</strong></span><br />
<span class="color4444FF"><strong>{</strong></span><br />
<span class="color444444">//  Move to next sibling if any.</span><br />
<br />
<span class="color2040A0">AST</span> <span class="color2040A0">siblingNode</span> <span class="color4444FF">=</span> <span class="color2040A0">currentNode</span>.<span class="color2040A0">getNextSibling</span><span class="color4444FF"><strong>(</strong></span><span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<strong>if</strong> <span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">siblingNode</span> <span class="color4444FF">!</span><span class="color4444FF">=</span> <strong>null</strong> <span class="color4444FF"><strong>)</strong></span><br />
<span class="color4444FF"><strong>{</strong></span><br />
<span class="color444444">//  Get current node's parent.</span><br />
<span class="color444444">//  This is also the parent of the</span><br />
<span class="color444444">//  sibling node.</span><br />
<br />
<span class="color2040A0">AST</span> <span class="color2040A0">parentNode</span>  <span class="color4444FF">=</span> <span class="color4444FF"><strong>(</strong></span><span class="color2040A0">AST</span><span class="color4444FF"><strong>)</strong></span><span class="color2040A0">parentNodes</span>.<span class="color2040A0">get</span><span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">currentNode</span> <span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<span class="color444444">//  Remember parent of sibling.</span><br />
<br />
<span class="color2040A0">parentNodes</span>.<span class="color2040A0">put</span><span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">siblingNode</span> , <span class="color2040A0">parentNode</span> <span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<span class="color444444">//  Make sibling the current node.</span><br />
<br />
<span class="color2040A0">currentNode</span>     <span class="color4444FF">=</span> <span class="color2040A0">siblingNode</span><span class="color4444FF">;</span><br />
<br />
<strong>break</strong><span class="color4444FF">;</span><br />
<span class="color4444FF"><strong>}</strong></span><br />
<span class="color444444">//  Move up to parent if no sibling.</span><br />
<span class="color444444">//  If parent is root node, we're done.</span><br />
<br />
<span class="color2040A0">currentNode</span> <span class="color4444FF">=</span> <span class="color4444FF"><strong>(</strong></span><span class="color2040A0">AST</span><span class="color4444FF"><strong>)</strong></span><span class="color2040A0">parentNodes</span>.<span class="color2040A0">get</span><span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">currentNode</span> <span class="color4444FF"><strong>)</strong></span><span class="color4444FF">;</span><br />
<br />
<strong>if</strong> <span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">currentNode</span>.<span class="color2040A0">equals</span><span class="color4444FF"><strong>(</strong></span> <span class="color2040A0">ast</span> <span class="color4444FF"><strong>)</strong></span> <span class="color4444FF"><strong>)</strong></span><br />
<span class="color4444FF"><strong>{</strong></span><br />
<span class="color2040A0">currentNode</span> <span class="color4444FF">=</span> <strong>null</strong><span class="color4444FF">;</span><br />
<span class="color4444FF"><strong>}</strong></span><br />
<span class="color4444FF"><strong>}</strong></span><br />
<span class="color4444FF"><strong>}<br />
<br />
</strong></span></pre>
<br />
<br />
<br />
参考:<br />
<br />
http://wordhoard.northwestern.edu/userman/hibernatechanges.html<br />
<br />
《Tansact Sql cookbook.》<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/142887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-05 14:18 <a href="http://www.blogjava.net/stephen80/archive/2007/09/05/142887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate 的几个注意点</title><link>http://www.blogjava.net/stephen80/archive/2007/09/05/142860.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Wed, 05 Sep 2007 04:11:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/05/142860.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/142860.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/05/142860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/142860.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/142860.html</trackback:ping><description><![CDATA[一、one-many ，需要一个有序的list. 建议影射方式 ：<br />
<br />
private List _items; <br />
<br />
&lt;bag<br />
name="items"<br />
inverse="true"&nbsp;&nbsp; //尽量使用双向关联<br />
order-by="DATE_TIME"<br />
cascade="all"&gt;<br />
&lt;key column="BLOG_ID"/&gt;<br />
&lt;one-to-many class="BlogItem"/&gt;<br />
&lt;/bag&gt;<br />
<br />
<br />
many-to-many ,建议用 set<br />
<br />
<br />
<br />
二、one-to-one 适用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过主键进行关联<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 相当于把大表拆分为多个小表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 例如把大字段单独拆分出来，以提高数据库操作的性能<br />
<br />
三、composite element ,必须依赖的导航关系<br />
<br />
&nbsp;&lt;list name="lineItems" table="line_items"&gt;<br />
&lt;key column="order_id"/&gt;<br />
&lt;list-index column="line_number"/&gt;<br />
&lt;composite-element class="LineItem"&gt;<br />
&lt;property name="quantity"/&gt;<br />
&lt;many-to-one name="product" column="product_id"/&gt;<br />
&lt;/composite-element&gt;<br />
&lt;/list&gt;<br />
<br />
四、 one-one formula , 很复杂，有点不明白<br />
<br />
&nbsp;&lt;class name="Person"&gt;<br />
&lt;id name="name"/&gt;<br />
&lt;one-to-one name="address"<br />
cascade="all"&gt;<br />
&lt;formula&gt;name&lt;/formula&gt;<br />
&lt;formula&gt;'HOME'&lt;/formula&gt;<br />
&lt;/one-to-one&gt;<br />
&lt;one-to-one name="mailingAddress"<br />
cascade="all"&gt;<br />
&lt;formula&gt;name&lt;/formula&gt;<br />
&lt;formula&gt;'MAILING'&lt;/formula&gt;<br />
&lt;/one-to-one&gt;<br />
&lt;/class&gt;<br />
&lt;class name="Address" batch-size="2"<br />
check="addressType in ('MAILING', 'HOME', 'BUSINESS')"&gt;<br />
&lt;composite-id&gt;<br />
&lt;key-many-to-one name="person"<br />
column="personName"/&gt;<br />
&lt;key-property name="type"<br />
column="addressType"/&gt;<br />
&lt;/composite-id&gt;<br />
&lt;property name="street" type="text"/&gt;<br />
&lt;property name="state"/&gt;<br />
&lt;property name="zip"/&gt;<br />
&lt;/class&gt;<br />
<br />
<br />
五、继承关系， per subclass table ，no discriminator ,joined-subclass<br />
<br />
<br />
<br />
<br />
六、tree<br />
拷贝： http://www.thogau.net/tutorials/tree/tutorial02-01.jsp <br />
<br />
<br />
package net.thogau.website.model;<br />
<br />
import java.io.Serializable;<br />
import java.util.ArrayList;<br />
import java.util.List;<br />
<br />
import org.apache.commons.lang.builder.EqualsBuilder;<br />
import org.apache.commons.lang.builder.HashCodeBuilder;<br />
import org.apache.commons.lang.builder.ToStringBuilder;<br />
import org.apache.commons.lang.builder.ToStringStyle;<br />
<br />
/**<br />
&nbsp;* This class implements a persisted tree node.<br />
&nbsp;* <br />
&nbsp;* @author &lt;a href="mailto:thogau@thogau.net"&gt;thogau&lt;/a&gt;<br />
&nbsp;* <br />
&nbsp;* @struts.form include-all="false" extends="BaseForm"<br />
&nbsp;* @hibernate.class table="node"<br />
&nbsp;*/<br />
public class Node extends BaseObject implements Serializable {<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // mapped to primary key in node table<br />
&nbsp;&nbsp;&nbsp; protected Long id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected String name;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected Node parent = null;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected List children = new ArrayList();<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.id column="id" generator-class="native" unsaved-value="null"<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @struts.form-field<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public Long getId() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return id;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setId(Long id) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.id = id;<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Returns the node name.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return String<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.property column="name" not-null="true" unique="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @struts.form-field<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @struts.validator type="required"<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public String getName() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name;<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void setName(String name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name = name;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Returns the node's children.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return List<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.list cascade="all-delete-orphan" inverse="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.collection-one-to-many class="net.thogau.website.model.Node"<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.collection-index column="position"<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.collection-key column="parent_id"<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @struts.form-field<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public List getChildren() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return children;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void setChildren(List children) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.children = children;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Returns the position of the node in the children list (if it has parent).<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return int<br />
&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.property column="position"<br />
&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public int getPosition() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return parent.getChildren().indexOf(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(NullPointerException e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // if it has no parent, position makes no sense<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void setPosition(int position) { /* not used */ }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Returns the node's parent.<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return Node<br />
&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.many-to-one column = "parent_id" class="net.thogau.website.model.Node" cascade = "none"<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @hibernate.column name="parent_id"<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp; public Node getParent() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return parent;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void setParent(Node n) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.parent = n;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @see java.lang.Object#equals(Object)<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public boolean equals(Object object) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(object instanceof Node)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Node rhs = (Node) object;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new EqualsBuilder().append(this.name, rhs.name).append(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.children, rhs.children).append(this.parent, rhs.parent)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .append(this.id, rhs.id).isEquals();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @see java.lang.Object#hashCode()<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public int hashCode() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new HashCodeBuilder(1036586079, -537109207).append(this.name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .append(this.parent.getName()).append(this.id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .toHashCode();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @see java.lang.Object#toString()<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public String toString() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .append("name", this.name).append("parent", this.parent)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .append("id", this.id).append("position", this.getPosition()).toString();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
}<br />
<br />
好像，equal ,hash 是必须的。<br />
<br />
# /** <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 树形遍历 <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 不用递归，用堆栈. <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 这里只是做为例子，本人不建议把业务逻辑封装在Entity层. <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp; public List getVisitResults() {&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List l = new ArrayList();&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stack s = new Stack();&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.push(this);&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (s.empty() == false) {&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cat c = (Cat) s.pop();&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l.add(c);&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List children = c.getChildren();&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (children != null) {&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt;&nbsp; hildren.size(); i++)&nbsp;&nbsp; {&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cat cat = (Cat) children.get(i);&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.push(cat);&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end for&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end if&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end while&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return l;&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
<br />
<br />
<br />
<br />
<br />
<br />
&nbsp;<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/142860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-05 12:11 <a href="http://www.blogjava.net/stephen80/archive/2007/09/05/142860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>lucene 的index 更新</title><link>http://www.blogjava.net/stephen80/archive/2007/09/04/142612.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Tue, 04 Sep 2007 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/04/142612.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/142612.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/04/142612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/142612.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/142612.html</trackback:ping><description><![CDATA[searcher 新开后，cache 会失效。<br />
所以，重新开 searcher 的频率对于很重的访问量来说，不能太频繁。这样查询肯定有不能同步的问题。<br />
<br />
对于不要求同步的场景来说，够了。<br />
继续研究。<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/142612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-04 14:00 <a href="http://www.blogjava.net/stephen80/archive/2007/09/04/142612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>solr 部署</title><link>http://www.blogjava.net/stephen80/archive/2007/09/04/142611.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Tue, 04 Sep 2007 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/09/04/142611.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/142611.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/09/04/142611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/142611.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/142611.html</trackback:ping><description><![CDATA[在 conf/catalina/localhost/ 建 solr.xml<br />
<br />
jndi solr/home :<br />
<br />
&lt;Context docBase="D:\sourcecode\apache-solr\dist\solr.war" debug="0" crossContext="true" &gt;<br />
&nbsp;&nbsp; &lt;Environment name="solr/home" type="java.lang.String" value="D:\sourcecode\solr-sample\solr" override="true" /&gt;<br />
&lt;/Context&gt;<br />
<br />
solr/home 的结构<br />
conf<br />
data/index<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/142611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-09-04 13:53 <a href="http://www.blogjava.net/stephen80/archive/2007/09/04/142611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 ognl 与 jsp2.1 el 的冲突问题</title><link>http://www.blogjava.net/stephen80/archive/2007/08/29/140988.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Wed, 29 Aug 2007 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/29/140988.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/140988.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/29/140988.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/140988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/140988.html</trackback:ping><description><![CDATA[tomcat6 , jetty6 采用 jsp2.1。 <br>由于 nio 带来的性能提升，tomcat6 不能被忽略。<br><br>办法1：<br><br><a title="http://www.devzuz.org/blogs/bporter/2006/08/05/1154706744655.html" href="http://www.devzuz.org/blogs/bporter/2006/08/05/1154706744655.html">http://www.devzuz.org/blogs/bporter/2006/08/05/1154706744655.html</a><br><br>&lt;ww:select list="#{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}" /&gt;<br><br>改用-------------------------------------------------------------<br>&lt;ww:select list="#@java.util.HashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}" /&gt;<br><br>这样 jsp2.1 el 就不会有问题了。<br><br>办法2： 对于旧的程序，不愿意改了，可以向后兼容<br><a title="http://today.java.net/lpt/a/272#backwards-compatibility" href="http://today.java.net/lpt/a/272#backwards-compatibility">http://today.java.net/lpt/a/272#backwards-compatibility</a><br><br><span></span><span>必须用 Servlet <strong class="highlight">2</strong>.<strong class="highlight">5</strong> XSD.
<br></span><font size="-1">&lt;web-app xmlns="http://java.sun.com/xml/ns/javaee" version="<font color="#cc0033">2.5</font>" xmlns:xsi="http://www.<wbr>w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.<font color="#cc0033">xsd</font>"&gt; </font><span></span><br><br>
<pre><code>&lt;jsp-property-group&gt;<br>  &lt;deferred-syntax-allowed-as-literal&gt;<br>    true<br>  &lt;/deferred-syntax-allowed-as-literal&gt;<br><br><br>&lt;/jsp-property-group&gt;</code></pre>
或者在页面中<br>
<pre><code>&lt;%@page  language="java" deferredSyntaxAllowedAsLiteral="true" %&gt;<br><br>办法3 ：不用 jsp2.1 el<br><br></code>&gt;   &lt;jsp-config&gt;<br>&gt;     &lt;jsp-property-group&gt;<br>&gt;       &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br>&gt;       &lt;el-ignored&gt;true&lt;/el-ignored&gt;<br>&gt;     &lt;/jsp-property-group&gt;<br>&gt;   &lt;/jsp-config&gt;
<br><br><a href="http://www.mail-archive.com/dev@struts.apache.org/msg28920.html" title="http://www.mail-archive.com/dev@struts.apache.org/msg28920.html">http://www.mail-archive.com/dev@struts.apache.org/msg28920.html
</a><br>我现在的疑问<br>在一个页面中采用两个 el 引擎，是否会对性能造成一定影响？<br>较小。<br><br><br><br><br><br><br><br><br><code><br><br><br><br><br></code></pre>
<br><br><br><br>   <img src ="http://www.blogjava.net/stephen80/aggbug/140988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-29 17:00 <a href="http://www.blogjava.net/stephen80/archive/2007/08/29/140988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mod_cache </title><link>http://www.blogjava.net/stephen80/archive/2007/08/27/140067.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Mon, 27 Aug 2007 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/27/140067.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/140067.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/27/140067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/140067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/140067.html</trackback:ping><description><![CDATA[LoadModule cache_module modules/mod_cache.so<br>LoadModule disk_cache_module modules/mod_disk_cache.so<br>LoadModule mem_cache_module modules/mod_mem_cache.so<br><br>&lt;IfModule mod_cache.c&gt;<br>&nbsp;&nbsp;&nbsp; &lt;IfModule mod_mem_cache.c&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CacheEnable mem /images<br>&nbsp;&nbsp;&nbsp; CacheEnable mem /styles<br>&nbsp;&nbsp;&nbsp; CacheEnable mem /scripts<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheSize 10240<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheMaxObjectCount 100<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheMinObjectSize 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCacheMaxObjectSize 2048<br>&nbsp;&nbsp;&nbsp; &lt;/IfModule&gt;<br>&nbsp;&nbsp; <br>&lt;/IfModule&gt;<br><br><img src ="http://www.blogjava.net/stephen80/aggbug/140067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-27 17:44 <a href="http://www.blogjava.net/stephen80/archive/2007/08/27/140067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apach mod_http_proxy ,mod_rewrite 一起工作</title><link>http://www.blogjava.net/stephen80/archive/2007/08/27/140029.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Mon, 27 Aug 2007 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/27/140029.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/140029.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/27/140029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/140029.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/140029.html</trackback:ping><description><![CDATA[LoadModule proxy_http_module modules/mod_proxy_http.so<br />
<br />
&lt;VirtualHost *:80&gt;<br />
&nbsp; <br />
<br />
RewriteLogLevel 3 <br />
RewriteLog "f:/temp/logs/lelerewrite.log"<br />
RewriteEngine&nbsp;&nbsp;&nbsp; on<br />
RewriteRule&nbsp;&nbsp;&nbsp; ^(.*)\.html$&nbsp;&nbsp;&nbsp; http://www.lele.com/ [P]<br />
<br />
&nbsp;ProxyPass /images !<br />
ProxyPass /styles !<br />
ProxyPass /scripts !<br />
&nbsp;&nbsp; <br />
&nbsp;<br />
&nbsp; ProxyPass / http://localhost:8082/<br />
&nbsp;ProxyPassReverse / http://localhost:8082/ <br />
&nbsp;ServerName www.lele.com:8082<br />
<br />
<br />
&nbsp;CustomLog logs/lele_access.log common<br />
<br />
DocumentRoot "D:/apachedocroot/www.lele.com/"<br />
<br />
&nbsp;<br />
<br />
&lt;Directory /&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br />
&nbsp;&nbsp;&nbsp; AllowOverride None<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; Order allow,deny<br />
&nbsp;&nbsp;&nbsp; Allow from all<br />
<br />
<br />
&lt;/Directory&gt;<br />
<br />
<br />
&lt;/VirtualHost&gt;<br />
<br />
一 、tomcat 中要配置：&lt;connector ,proxy ,&gt; .否则返回有问题。<br />
二、 mod_proxy_ajp 在 apr 情况下性能应该比 mod_http_proxy 好。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/140029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-27 16:48 <a href="http://www.blogjava.net/stephen80/archive/2007/08/27/140029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache access log，关闭缺省</title><link>http://www.blogjava.net/stephen80/archive/2007/08/27/139995.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Mon, 27 Aug 2007 08:13:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/27/139995.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/139995.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/27/139995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/139995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/139995.html</trackback:ping><description><![CDATA[关闭 缺省主机的 log<br>&nbsp;#customLog logs/access.log common<br><br>在 virtualhost 中加<br>&nbsp; CustomLog logs/lele_access.log common<br><br><img src ="http://www.blogjava.net/stephen80/aggbug/139995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-27 16:13 <a href="http://www.blogjava.net/stephen80/archive/2007/08/27/139995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache mod_rewrite</title><link>http://www.blogjava.net/stephen80/archive/2007/08/27/139910.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Mon, 27 Aug 2007 06:19:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/27/139910.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/139910.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/27/139910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/139910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/139910.html</trackback:ping><description><![CDATA[LoadModule mod_rewrite<br><br>在 &lt;virtualHost&gt; 中<br><br>RewriteLogLevel 3 <br>RewriteLog "f:/temp/logs/sosorewrite.log"<br>RewriteEngine&nbsp;&nbsp;&nbsp; on<br>RewriteRule&nbsp;&nbsp;&nbsp; ^(.*)\.html$&nbsp;&nbsp;&nbsp; /index.php <br> <img src ="http://www.blogjava.net/stephen80/aggbug/139910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-27 14:19 <a href="http://www.blogjava.net/stephen80/archive/2007/08/27/139910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 apache mod_proxy_ajp 与 tomcat 集成, 很简单的步骤</title><link>http://www.blogjava.net/stephen80/archive/2007/08/27/139846.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Mon, 27 Aug 2007 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/27/139846.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/139846.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/27/139846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/139846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/139846.html</trackback:ping><description><![CDATA[一、修改 http.conf<br />
&nbsp;loadmodule mod_proxy<br />
&nbsp;loadmobule mod_proxy_ajp<br />
&nbsp;<br />
&nbsp;增加 <br />
&nbsp;<code>ProxyRequests Off<br />
<br />
&lt;Proxy *&gt;<br />
<span class="indent">Order
deny,allow<br />
Allow from all<br />
</span>&lt;/Proxy&gt;<br />
</code><br />
<br />
&lt;VirtualHost *:80&gt;<br />
&nbsp; <br />
&nbsp;ProxyPass /images !<br />
ProxyPass /styles !<br />
ProxyPass /scripts !<br />
&nbsp;&nbsp; <br />
&nbsp;ProxyPass / ajp://localhost:8009/<br />
&nbsp;ProxyPassReverse / ajp://localhost:8009/&nbsp;&nbsp; <br />
&nbsp;ServerName www.lele.com:8082<br />
<br />
<br />
&nbsp;CustomLog logs/lele_access.log common<br />
<br />
DocumentRoot "D:/apachedocroot/www.lele.com/"<br />
<br />
&nbsp;<br />
<br />
&lt;Directory /&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br />
&nbsp;&nbsp;&nbsp; AllowOverride None<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; Order allow,deny<br />
&nbsp;&nbsp;&nbsp; Allow from all<br />
<br />
<br />
&lt;/Directory&gt;<br />
<br />
<br />
&lt;/VirtualHost&gt;<br />
<br />
tomcat 不用做修改。<br />
安装 tomcat apr, 性能会比较好。<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/139846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-27 11:59 <a href="http://www.blogjava.net/stephen80/archive/2007/08/27/139846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习配置 apache 虚拟主机</title><link>http://www.blogjava.net/stephen80/archive/2007/08/27/139823.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Mon, 27 Aug 2007 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/27/139823.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/139823.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/27/139823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/139823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/139823.html</trackback:ping><description><![CDATA[一、 在 http.conf 末尾加<br><br>Listen 80<br><br>NameVirtualHost *:80<br><br>&lt;VirtualHost *:80&gt;<br><br>DocumentRoot "D:/apachedocroot/www.soso.com/"<br>ServerName www.soso.com<br><br><br>&lt;Directory /&gt;<br><br>&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br>&nbsp;&nbsp;&nbsp; AllowOverride None<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; Order allow,deny<br>&nbsp;&nbsp;&nbsp; Allow from all<br><br>&lt;/Directory&gt;<br><br><br>&lt;/VirtualHost&gt;<br><br>&lt;VirtualHost *:80&gt;<br><br>DocumentRoot "D:/apachedocroot/static.soso.com/"<br>ServerName static.soso.com<br><br>&lt;Directory /&gt;<br><br>&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br>&nbsp;&nbsp;&nbsp; AllowOverride None<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; Order allow,deny<br>&nbsp;&nbsp;&nbsp; Allow from all<br><br>&lt;/Directory&gt;<br><br>&lt;/VirtualHost&gt; <br><br>二、修改 hosts 文件<br>三、 httpd.ext -S 测试配置<br><br><br><img src ="http://www.blogjava.net/stephen80/aggbug/139823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-27 11:12 <a href="http://www.blogjava.net/stephen80/archive/2007/08/27/139823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>j2ee 员学习 配置 apache2.2.4  php 5.2.3</title><link>http://www.blogjava.net/stephen80/archive/2007/08/24/139174.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 24 Aug 2007 12:46:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/24/139174.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/139174.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/24/139174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/139174.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/139174.html</trackback:ping><description><![CDATA[只是愈多愈好。<br />
<br />
配置 apache2.2.4 ,php 5.2.3.<br />
<br />
1. 解压到 c:\php<br />
2. 拷贝 php.ini-dist 到 c:\windows 为 php.ini <br />
&nbsp;&nbsp;&nbsp; ** 不能用recommend**<br />
3. 拷贝 php5ts.dll 到 c:\windows\system32<br />
<br />
配置：apache ,http.conf<br />
1. LoadModule php5_module "c:/php/php5apache2_2.dll"<br />
&nbsp;&nbsp;&nbsp; ** 对应apache2.2 必须用这个**<br />
2. AddType application/x-httpd-php&nbsp; .php<br />
3. if module dir_modle ,<br />
&nbsp;&nbsp;&nbsp; DirectoryIndex&nbsp; index.php ,index.html<br />
<br />
配置php.ini ,启动 mysql<br />
extension=php_mysql.dll<br />
extension=php_mysqli.dll<br />
<br />
测试<br />
phpinfo.php<br />
<br />
&lt;? echo phpinfo(); ?&gt;<br />
<br />
ok.<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/139174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-24 20:46 <a href="http://www.blogjava.net/stephen80/archive/2007/08/24/139174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mediator 设计模式</title><link>http://www.blogjava.net/stephen80/archive/2007/08/07/134998.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Tue, 07 Aug 2007 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/08/07/134998.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/134998.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/08/07/134998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/134998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/134998.html</trackback:ping><description><![CDATA[这个模式一直没有好好的理解。最近作IM 相关的应用，才明白了。<br>就是两个人之间要沟通，不是直接，而是通过 mediator.<br>也就是 ,不是 <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; user1.sendMessage(user2，"some message");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 而是 <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; user1.getMediator().sendMessage("user2","some message");<br><br>&nbsp;有什么好处呢：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 职责分离：mediator 完成自己该承担的职责。<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mediator 也可以搞这搞那。<br><br>插一段实际代码：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.getChatManager().createChat("thewho@stephenli",new MessageListener() {<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void processMessage(Chat chat, Message message) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(logger.isDebugEnabled())<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; logger.debug("Received message: " + message.toXML());<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }).sendMessage("测试发送!");<br><br><br>下面是junit 一段别人的代码，可以Ｒｕｎ：<br><br>代码看起来很蠢，不能说明使用mediator 的好处。不过意思就是这样啦！（从Ｃ＃　拷的）<br><br><br>import junit.framework.TestCase;<br><br><br>public class MediatorTest extends TestCase {<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; public void testMediator(){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Mediator m = new Mediator();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataProviderColleague c1 = new DataProviderColleague(m);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataConsumerColleague c2 = new DataConsumerColleague();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; m.IntroduceColleagues(c1,c2);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c1.ChangeData();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>}<br><br><br><br>&nbsp;&nbsp;&nbsp; class Mediator <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private DataProviderColleague dataProvider;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private DataConsumerColleague dataConsumer;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dataProvider = c1;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dataConsumer = c2;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void DataChanged()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int i = dataProvider.getIMyData();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataConsumer.NewValue(i);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; class DataConsumerColleague <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void NewValue(int i)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("New value "+ i);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; class DataProviderColleague<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private Mediator mediator;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private int iMyData=0;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private int MyData ;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public DataProviderColleague(Mediator m)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mediator = m;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void ChangeData()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; iMyData = 403;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Inform mediator that I have changed the data<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (mediator != null)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mediator.DataChanged();&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public int getIMyData() {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return iMyData;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void setIMyData(int myData) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; iMyData = myData;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp; <br><br><br><br><br><br><br><br><br><br><br><br><br><br><img src ="http://www.blogjava.net/stephen80/aggbug/134998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-08-07 16:43 <a href="http://www.blogjava.net/stephen80/archive/2007/08/07/134998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐一篇 StAX and WoodStox 的介绍文章，英文</title><link>http://www.blogjava.net/stephen80/archive/2007/07/23/131820.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Mon, 23 Jul 2007 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/07/23/131820.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <a href="http://www.vsj.co.uk/articles/display.asp?id=643"> StAX the odds with Woodstox </a><br><br><br>刚读了，感觉不错。<br><br>Over a decade into XML evolution, however, these parsing technologies are slowly showing their age, requiring bypasses and optimizations to overcome their well-known limitations. StAX, or Streaming API for XML, is the new-age XML parser that offers the best features of the existing models, and at the same time provides high performance and efficient access to the underlyi&nbsp;&nbsp;<a href='http://www.blogjava.net/stephen80/archive/2007/07/23/131820.html'>阅读全文</a><img src ="http://www.blogjava.net/stephen80/aggbug/131820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-07-23 10:36 <a href="http://www.blogjava.net/stephen80/archive/2007/07/23/131820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>规划一下能力提高的步骤</title><link>http://www.blogjava.net/stephen80/archive/2007/07/13/130116.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 13 Jul 2007 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2007/07/13/130116.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/130116.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2007/07/13/130116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/130116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/130116.html</trackback:ping><description><![CDATA[最近一直用已有的知识，再规划一下，最近的学习重点<br>1.rick&nbsp; client 的全面掌握<br>&nbsp; 以前用dwr ，再复习一下&nbsp; . ok ,prototypes . 07-08-01 <br>2.db procedure <br>&nbsp; 以前基本不会。<br>3.ejb3 <br>&nbsp; 高可靠性transaction <br>4. StAX, woodstox<br>&nbsp;&nbsp; 学习一下新的xml 处理技术。 ok.&nbsp; 07-08-01<br>5.REST<br>&nbsp;&nbsp; 新东西，很重要&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ok. 07-08-1<br>6.english<br><br><br><br><br>   <img src ="http://www.blogjava.net/stephen80/aggbug/130116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2007-07-13 16:25 <a href="http://www.blogjava.net/stephen80/archive/2007/07/13/130116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口优于继承，组合优于继承</title><link>http://www.blogjava.net/stephen80/archive/2006/07/21/59410.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 21 Jul 2006 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/07/21/59410.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/59410.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/07/21/59410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/59410.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/59410.html</trackback:ping><description><![CDATA[这两个原则最近有了切肤之痛的感受。<br />看来坚持面向interface 的开发是必须的了。<br />问题在<br />  Abstract class 不能复杂，我想这也是template pattern 时候要注意的。<br />  template 要稳定，不确定的东西不能放在template 中，当然简单的东西容易稳定。<br /> <br /> 否则必然违背 ocp 原则。<br /><img src ="http://www.blogjava.net/stephen80/aggbug/59410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-07-21 14:05 <a href="http://www.blogjava.net/stephen80/archive/2006/07/21/59410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>htmlparser 的装死问题</title><link>http://www.blogjava.net/stephen80/archive/2006/07/21/59408.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 21 Jul 2006 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/07/21/59408.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/59408.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/07/21/59408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/59408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/59408.html</trackback:ping><description><![CDATA[由于httpconnection 并不能总是很好的处理 “System.connectionTimeOut" 问题。<br />htmlParser 会装死。<br />我想只能加一个monitor thread ,不过没有完成。<br /><img src ="http://www.blogjava.net/stephen80/aggbug/59408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-07-21 14:00 <a href="http://www.blogjava.net/stephen80/archive/2006/07/21/59408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>htmlParser 遇到的encoding 问题</title><link>http://www.blogjava.net/stephen80/archive/2006/07/21/59407.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 21 Jul 2006 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/07/21/59407.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/59407.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/07/21/59407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/59407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/59407.html</trackback:ping><description><![CDATA[    html parser 在处理 一些网页的时候，会出现乱码'3f3f' .<br />    问题在于 页面的charset=gb2312 ,而 页面中有gbk 的码 ,比如 'fb9c'.<br />    代码可以验证，<br />        byte[] gbchar = new byte[2];<br />        gbchar[0]=(byte) 0xfb;<br />        gbchar[1]=(byte) 0x9c;<br />        System.out.print(new String(gbchar,"gbk"));<br />        System.out.print(new String(gbchar,"gb2312"));<br /><br />    不过，我并没有解决这个问题。<br /><br /><img src ="http://www.blogjava.net/stephen80/aggbug/59407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-07-21 13:58 <a href="http://www.blogjava.net/stephen80/archive/2006/07/21/59407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webalizer 作点击量统计</title><link>http://www.blogjava.net/stephen80/archive/2006/04/30/44228.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Sun, 30 Apr 2006 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/04/30/44228.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/44228.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/04/30/44228.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/44228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/44228.html</trackback:ping><description><![CDATA[统计结果，可以再用JasperReporter 整理一下，更好的满足业务需要。<br /><img src ="http://www.blogjava.net/stephen80/aggbug/44228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-04-30 16:33 <a href="http://www.blogjava.net/stephen80/archive/2006/04/30/44228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用clickStream 做业务日志</title><link>http://www.blogjava.net/stephen80/archive/2006/04/30/44227.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Sun, 30 Apr 2006 08:31:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/04/30/44227.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/44227.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/04/30/44227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/44227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/44227.html</trackback:ping><description><![CDATA[    这样的设计，避免了业务与日志的耦合。<br /><img src ="http://www.blogjava.net/stephen80/aggbug/44227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-04-30 16:31 <a href="http://www.blogjava.net/stephen80/archive/2006/04/30/44227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DisplayTag 新的外部分页接口，PaginatedList,以及Urlrewrite</title><link>http://www.blogjava.net/stephen80/archive/2006/04/30/44226.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Sun, 30 Apr 2006 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/04/30/44226.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/44226.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/04/30/44226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/44226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/44226.html</trackback:ping><description><![CDATA[    用PaginatedList ,得到干净的URL,?page=1 .再用urlRewrite 一下。很好。<br /> 目前没有解决，用&lt;c:url &gt; 替换DisplayTag 中的一段代码。<br /><img src ="http://www.blogjava.net/stephen80/aggbug/44226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-04-30 16:27 <a href="http://www.blogjava.net/stephen80/archive/2006/04/30/44226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>acegi ，权限管理，SSO</title><link>http://www.blogjava.net/stephen80/archive/2006/04/30/44224.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Sun, 30 Apr 2006 08:23:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/04/30/44224.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/44224.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/04/30/44224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/44224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/44224.html</trackback:ping><description><![CDATA[acegi 用到系统中，解决了权限的问题。<br />没有上SSO，acegi 与CAS 的集成，要配置一下。<br /><img src ="http://www.blogjava.net/stephen80/aggbug/44224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-04-30 16:23 <a href="http://www.blogjava.net/stephen80/archive/2006/04/30/44224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ServletContextAttributeExporter ,比用ContextListen 更好</title><link>http://www.blogjava.net/stephen80/archive/2006/04/30/44216.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Sun, 30 Apr 2006 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/04/30/44216.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/44216.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/04/30/44216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/44216.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/44216.html</trackback:ping><description><![CDATA[&lt;bean class="org.springframework.web.context.support.ServletContextAttributeExporter"&gt;<br />  &lt;property name="attributes"&gt;<br />    &lt;map&gt;<br />      &lt;entry key="myScAttr"&gt;&lt;ref bean="mySpringBeanToExport"/&gt;<br />    &lt;/map&gt;<br />  &lt;/property&gt;<br />&lt;/bean&gt;<img src ="http://www.blogjava.net/stephen80/aggbug/44216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-04-30 15:53 <a href="http://www.blogjava.net/stephen80/archive/2006/04/30/44216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>o/x binding ,castor</title><link>http://www.blogjava.net/stephen80/archive/2006/04/30/44211.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Sun, 30 Apr 2006 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2006/04/30/44211.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/44211.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2006/04/30/44211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/44211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/44211.html</trackback:ping><description><![CDATA[用xml 文件作系统初始化。用CASTOR ，很好。xmlBean 太复杂。今后，JAXB2<br /><img src ="http://www.blogjava.net/stephen80/aggbug/44211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2006-04-30 15:36 <a href="http://www.blogjava.net/stephen80/archive/2006/04/30/44211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>