﻿<?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-幸せのちから-随笔分类-java</title><link>http://www.blogjava.net/lucky/category/3091.html</link><description>&lt;B&gt;平凡的世界&lt;/B&gt;&lt;/br&gt;

&lt;font color="blue"&gt;看似平常实崎岖&lt;/br&gt;
成如容易却艰辛&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 28 Aug 2016 07:00:14 GMT</lastBuildDate><pubDate>Sun, 28 Aug 2016 07:00:14 GMT</pubDate><ttl>60</ttl><item><title>设计模式</title><link>http://www.blogjava.net/lucky/archive/2016/08/27/431689.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Sat, 27 Aug 2016 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2016/08/27/431689.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/431689.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2016/08/27/431689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/431689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/431689.html</trackback:ping><description><![CDATA[<div>##设计模式</div><div>###第一部分 六个创建型模式</div><div>####1.简单工厂模式</div><div>定义一个工厂类，根据参数返回不同类的实例</div><div></div><div>####2.工厂模式定义</div><div>定义一个用于创建对象的接口，让子类决定哪一个类实例化。</div><div></div><div>####3.抽象工厂模式定义</div><div>####4.单例模式</div><div>####5.原型模式</div><div>####6.建造者模式</div><div></div><div>###第二部分 七个结构型模式</div><div>####1.适配器模式</div><div>将一个接口转换成客户希望的另一个接口，使接口不兼容的哪些类可以一起工作。</div><div>####2.桥接模式</div><div>如果软件系统中某个类存在两个独立变化的维度，通过该模式可以将这两个维度分离出来，使两者可以独立扩展，让系统更加符合&#8220;单一职责"。</div><div>####3.组合模式</div><div>组合多个对象形成树形结构以表示具有&#8221;整体-部分&#8220;关系的层次结构。</div><div>####4.装饰模式</div><div>####5.外观模式</div><div>####6.享元模式</div><div>当系统中存在大量相同或者相似的对象时，可以通过共享技术实现相同或相似的细粒度对象的复用，从而节约了内存空间，提高了系统性能。</div><div>####7.代理模式</div><div>给某一个对象提供一个代理或占位符，并由代理对象来控制对原对象的访问。</div><div></div><div>###第三部分 十一个行为型模式</div><div>####1.职责链模式</div><div>####2.命令模式</div><div>将一个请求封装为一个对象，从而让我们可用不同的请求对客户进行参数化。对请求排队或者记录请求日志，以及支持可撤销的操作。</div><div>####3.解释器模式</div><div>####4.迭代器模式</div><div>迭代器模式：提供一种方法来访问聚合对象，而不用暴露这个对象的内部表示。</div><div>####5.中介者模式</div><div>####6.备忘录模式</div><div>####7.观察者模式</div><div>####8.状态模式</div><div>####9.策略模式</div><div>####10.模板方法模式</div><div>####11.访问者模式</div><div></div><div></div><img src ="http://www.blogjava.net/lucky/aggbug/431689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2016-08-27 18:21 <a href="http://www.blogjava.net/lucky/archive/2016/08/27/431689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Effective JAVA</title><link>http://www.blogjava.net/lucky/archive/2016/08/26/431682.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Fri, 26 Aug 2016 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2016/08/26/431682.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/431682.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2016/08/26/431682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/431682.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/431682.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>EffectiveJAVA.html</title>
<meta name="generator" content="Haroopad 0.13.1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <br /><h1 id="effective-java"><a name="effective-java" href="#effective-java"></a>Effective JAVA</h1>
<h4 id="第2章-创建销毁对象"><a name="第2章-创建销毁对象" href="#第2章-创建销毁对象"></a>第2章 创建销毁对象</h4>
<h5 id="1.考虑用静态工厂方法代替构造器"><a name="1.考虑用静态工厂方法代替构造器" href="#1.考虑用静态工厂方法代替构造器"></a>1.考虑用静态工厂方法代替构造器</h5>
<p><mark>优点</mark></p>
<pre><code data-origin="
<pre><code>&#183;静态工厂方法有名称
&#183;不用每次都创建新实例
&#183;可以返回远返回类型的任何子类型的对象
&#183;在创建参数化类型实例的时候代码更简洁
</code></pre>
">&#183;静态工厂方法有名称
&#183;不用每次都创建新实例
&#183;可以返回远返回类型的任何子类型的对象
&#183;在创建参数化类型实例的时候代码更简洁
</code></pre>
<p><mark>缺点</mark></p>
<pre><code data-origin="
<pre><code>&#183;不能被子类化
&#183;它们与其他的静态方法实际上没有任何区别
</code></pre>
">&#183;不能被子类化
&#183;它们与其他的静态方法实际上没有任何区别
</code></pre>
<h5 id="2.遇到多个构造器参数时要考虑用构造器"><a name="2.遇到多个构造器参数时要考虑用构造器" href="#2.遇到多个构造器参数时要考虑用构造器"></a>2.遇到多个构造器参数时要考虑用构造器</h5>
<p>如果类的构造器或者静态工厂中具有多个参数，可以考虑使用<mark>Builder</mark>模式</p>
<h5 id="3.用私有构造器或者枚举类型强化singleton属性"><a name="3.用私有构造器或者枚举类型强化singleton属性" href="#3.用私有构造器或者枚举类型强化singleton属性"></a>3.用私有构造器或者枚举类型强化Singleton属性</h5>
<p>编写一个包含单个元素的枚举类型</p>
<pre class="java hljs"><code class="JAVA" data-origin="
<pre><code class=" &quot;java&quot;" ="">public enum Elvis{
INSTANCE;
public void leaveTheBuilding*(){
...}
}
</code></pre>
"&gt;<span class="hljs-keyword">public</span> <span class="hljs-keyword">enum</span> Elvis{
INSTANCE;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> leaveTheBuilding*(){
...}
}

<h5 id="4.通过私有构造器强化不可实例化的能力"><a name="4.通过私有构造器强化不可实例化的能力" href="#4.通过私有构造器强化不可实例化的能力"></a>4.通过私有构造器强化不可实例化的能力</h5>
<p>让不需要实例化的类拥有私有（private）构造器来避免被实例化</p>
<pre class="java hljs"><code class="JAVA" data-origin="
<pre><code class=" &quot;java&quot;" ="">//Noninstantiable utility class
public enum UtilityClass{
private UtilityClass（）{
throw new AssertinError();
}
...
}
</code></pre>
"&gt;<span class="hljs-comment">//Noninstantiable utility class</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">enum</span> UtilityClass{
<span class="hljs-keyword">private</span> UtilityClass（）{
<span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> AssertinError();
}
...
}

<h5 id="5.避免创建不必要的对象"><a name="5.避免创建不必要的对象" href="#5.避免创建不必要的对象"></a>5.避免创建不必要的对象</h5>
<p>使用静态的初始化器（initialize）避免创建重复的Calendar，TimeZone和Date实例</p>
<pre class="java hljs"><code class="JAVA" data-origin="
<pre><code class=" &quot;java&quot;" ="">import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Person {
private Date birthDate;
private static final Date BOOM_START;
private static final Date BOOM_END;
static {
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0);
BOOM_START = gmtCal.getTime();
gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0);
BOOM_END = gmtCal.getTime();
}
public boolean isBabyBoomer() {
return birthDate.compareTo(BOOM_START) &amp;gt;= 0 &amp;amp;&amp;amp; birthDate.compareTo(BOOM_END) &amp;lt;= 0;
}
}
</code></pre>
"&gt;<span class="hljs-keyword">import</span> java.util.Calendar;
<span class="hljs-keyword">import</span> java.util.Date;
<span class="hljs-keyword">import</span> java.util.TimeZone;
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Person</span> </span>{
<span class="hljs-keyword">private</span> Date birthDate;
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> Date BOOM_START;
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> Date BOOM_END;
<span class="hljs-keyword">static</span> {
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone(<span class="hljs-string">"GMT"</span>));
gmtCal.set(<span class="hljs-number">1946</span>, Calendar.JANUARY, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>);
BOOM_START = gmtCal.getTime();
gmtCal.set(<span class="hljs-number">1965</span>, Calendar.JANUARY, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>);
BOOM_END = gmtCal.getTime();
}
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">isBabyBoomer</span><span class="hljs-params">()</span> </span>{
<span class="hljs-keyword">return</span> birthDate.compareTo(BOOM_START) &gt;= <span class="hljs-number">0</span> &amp;&amp; birthDate.compareTo(BOOM_END) &lt;= <span class="hljs-number">0</span>;
}
}

<p>优先使用基本类型而不是装箱基本类型，要当心无意识的自动装箱。</p>
<h5 id="6.消除过期的对象引用"><a name="6.消除过期的对象引用" href="#6.消除过期的对象引用"></a>6.消除过期的对象引用</h5>
<p>一旦对象引用已经过期，只需清空这些引用即可。</p>
<h5 id="7.避免使用终结方法"><a name="7.避免使用终结方法" href="#7.避免使用终结方法"></a>7.避免使用终结方法</h5>
<p>终结方法（finalizer）通常是不可预测的，也是很危险的，一般情况下是不必要的。<br />
不应该依赖终结方法来更新重要的持久状态。<br />
显式终止方法的典型例子：<mark><strong>InputStream,OutputStream,java.sql.Connection的Close</strong></mark></p>
<h4 id="第3章-对于所有对象都通用的方法"><a name="第3章-对于所有对象都通用的方法" href="#第3章-对于所有对象都通用的方法"></a>第3章 对于所有对象都通用的方法</h4>
<h5 id="8.覆盖equals时请遵守通用约定"><a name="8.覆盖equals时请遵守通用约定" href="#8.覆盖equals时请遵守通用约定"></a>8.覆盖equals时请遵守通用约定</h5>
<pre><code data-origin="
<pre><code>&#183;类的每个实例本质上都是唯一的
&#183;不关心类是否提供了&#8220;逻辑相等&#8221;
&#183;超类已经覆盖了equals，从超类继承过来的行为对于子类也是合适的
&#183;类是私有的或是包级私有的，应该覆盖父类的equals方法保证永远不会被调用
</code></pre>
">&#183;类的每个实例本质上都是唯一的
&#183;不关心类是否提供了&#8220;逻辑相等&#8221;
&#183;超类已经覆盖了equals，从超类继承过来的行为对于子类也是合适的
&#183;类是私有的或是包级私有的，应该覆盖父类的equals方法保证永远不会被调用
</code></pre>
<h5 id="9.覆盖equals时总要覆盖hashcode"><a name="9.覆盖equals时总要覆盖hashcode" href="#9.覆盖equals时总要覆盖hashcode"></a>9.覆盖equals时总要覆盖hashCode</h5>
<h5 id="10.始终要覆盖tostring"><a name="10.始终要覆盖tostring" href="#10.始终要覆盖tostring"></a>10.始终要覆盖toString</h5>
<h5 id="11.谨慎地覆盖clone"><a name="11.谨慎地覆盖clone" href="#11.谨慎地覆盖clone"></a>11.谨慎地覆盖clone</h5>
<h5 id="12.考虑实现comparable接口"><a name="12.考虑实现comparable接口" href="#12.考虑实现comparable接口"></a>12.考虑实现Comparable接口</h5>
<h4 id="第4章-类和接口"><a name="第4章-类和接口" href="#第4章-类和接口"></a>第4章 类和接口</h4>
<h5 id="13.使类和成员的可访问性最小化"><a name="13.使类和成员的可访问性最小化" href="#13.使类和成员的可访问性最小化"></a>13.使类和成员的可访问性最小化</h5>
<h5 id="14.在公有类中使用访问方法而非公有域"><a name="14.在公有类中使用访问方法而非公有域" href="#14.在公有类中使用访问方法而非公有域"></a>14.在公有类中使用访问方法而非公有域</h5>
<h5 id="15.使可变性最小化"><a name="15.使可变性最小化" href="#15.使可变性最小化"></a>15.使可变性最小化</h5>
<pre><code data-origin="
<pre><code>1.不要提供任何会修改对象状态的方法
2.保证类不会被扩展
3.使所有域都是final
4.使所有域都成为私有的
5.确保对于任何可变组建的互斥访问
</code></pre>
">1.不要提供任何会修改对象状态的方法
2.保证类不会被扩展
3.使所有域都是final
4.使所有域都成为私有的
5.确保对于任何可变组建的互斥访问
</code></pre>
<h5 id="16.复合优先于继承"><a name="16.复合优先于继承" href="#16.复合优先于继承"></a>16.复合优先于继承</h5>
<h5 id="17.要么为继承而设计，并提供文档说明，要么就禁止继承"><a name="17.要么为继承而设计，并提供文档说明，要么就禁止继承" href="#17.要么为继承而设计，并提供文档说明，要么就禁止继承"></a>17.要么为继承而设计，并提供文档说明，要么就禁止继承</h5>
<h5 id="18.接口优于抽象类"><a name="18.接口优于抽象类" href="#18.接口优于抽象类"></a>18.接口优于抽象类</h5>
<pre><code data-origin="
<pre><code>- 现有的类可以很容易被更新，以实现新的接口
- 接口是定义minin（混合类型）的理想选择
- 接口允许我们构造非层次结构的类型框架
</code></pre>
">- 现有的类可以很容易被更新，以实现新的接口
- 接口是定义minin（混合类型）的理想选择
- 接口允许我们构造非层次结构的类型框架
</code></pre>
<h5 id="19.接口只用于定义类型"><a name="19.接口只用于定义类型" href="#19.接口只用于定义类型"></a>19.接口只用于定义类型</h5>
<h5 id="20.类层次优于标签类"><a name="20.类层次优于标签类" href="#20.类层次优于标签类"></a>20.类层次优于标签类</h5>
<h5 id="21.用函数对象表示策略"><a name="21.用函数对象表示策略" href="#21.用函数对象表示策略"></a>21.用函数对象表示策略</h5>
<h5 id="22.优先考虑静态成员类"><a name="22.优先考虑静态成员类" href="#22.优先考虑静态成员类"></a>22.优先考虑静态成员类</h5>
<h4 id="第5章-泛型"><a name="第5章-泛型" href="#第5章-泛型"></a>第5章 泛型</h4>
<h5 id="23.请不要在新代码中使用原生态类型"><a name="23.请不要在新代码中使用原生态类型" href="#23.请不要在新代码中使用原生态类型"></a>23.请不要在新代码中使用原生态类型</h5>
<h5 id="24.消除非受检警告"><a name="24.消除非受检警告" href="#24.消除非受检警告"></a>24.消除非受检警告</h5>
<pre><code data-origin="
<pre><code>SuppressWarnings注解始终在尽可能小的范围中使用。
</code></pre>
">SuppressWarnings注解始终在尽可能小的范围中使用。
</code></pre>
<h5 id="25.列表预先于数组"><a name="25.列表预先于数组" href="#25.列表预先于数组"></a>25.列表预先于数组</h5>
<pre><code data-origin="
<pre><code>数组是协变得（covariant）。
数组是具体化的。
</code></pre>
">数组是协变得（covariant）。
数组是具体化的。
</code></pre>
<h5 id="26.优先考虑泛型"><a name="26.优先考虑泛型" href="#26.优先考虑泛型"></a>26.优先考虑泛型</h5>
<h5 id="27.优先考虑泛型方法"><a name="27.优先考虑泛型方法" href="#27.优先考虑泛型方法"></a>27.优先考虑泛型方法</h5>
<h5 id="28.利用有限制通配符来提升api的灵活性"><a name="28.利用有限制通配符来提升api的灵活性" href="#28.利用有限制通配符来提升api的灵活性"></a>28.利用有限制通配符来提升API的灵活性</h5>
<h5 id="29.优先考虑类型安全的已购容器"><a name="29.优先考虑类型安全的已购容器" href="#29.优先考虑类型安全的已购容器"></a>29.优先考虑类型安全的已购容器</h5>
<h4 id="第6章-枚举和注解"><a name="第6章-枚举和注解" href="#第6章-枚举和注解"></a>第6章 枚举和注解</h4>
<h5 id="30.用enum代替int常量"><a name="30.用enum代替int常量" href="#30.用enum代替int常量"></a>30.用enum代替int常量</h5>
<h5 id="31.用实例域代替序数"><a name="31.用实例域代替序数" href="#31.用实例域代替序数"></a>31.用实例域代替序数</h5>
<h5 id="32.用enumset代替位域"><a name="32.用enumset代替位域" href="#32.用enumset代替位域"></a>32.用EnumSet代替位域</h5>
<h5 id="33.用enummap代替序数索引"><a name="33.用enummap代替序数索引" href="#33.用enummap代替序数索引"></a>33.用EnumMap代替序数索引</h5>
<h5 id="34.用接口模拟可伸缩的枚举"><a name="34.用接口模拟可伸缩的枚举" href="#34.用接口模拟可伸缩的枚举"></a>34.用接口模拟可伸缩的枚举</h5>
<h5 id="35.注解优先于命名模式"><a name="35.注解优先于命名模式" href="#35.注解优先于命名模式"></a>35.注解优先于命名模式</h5>
<h5 id="36.坚持使用override注解"><a name="36.坚持使用override注解" href="#36.坚持使用override注解"></a>36.坚持使用Override注解</h5>
<h5 id="37.用标记接口定义类型"><a name="37.用标记接口定义类型" href="#37.用标记接口定义类型"></a>37.用标记接口定义类型</h5>
<h4 id="第7章-方法"><a name="第7章-方法" href="#第7章-方法"></a>第7章 方法</h4>
<h5 id="38.检查参数的有效性"><a name="38.检查参数的有效性" href="#38.检查参数的有效性"></a>38.检查参数的有效性</h5>
<h5 id="39.必要时进行保护性拷贝"><a name="39.必要时进行保护性拷贝" href="#39.必要时进行保护性拷贝"></a>39.必要时进行保护性拷贝</h5>
<h5 id="40.谨慎设计方法签名"><a name="40.谨慎设计方法签名" href="#40.谨慎设计方法签名"></a>40.谨慎设计方法签名</h5>
<pre><code data-origin="
<pre><code>谨慎地选择方法的名称
不要过于追求提供便利的方法
避免过长的参数列表
</code></pre>
">谨慎地选择方法的名称
不要过于追求提供便利的方法
避免过长的参数列表
</code></pre>
<h5 id="41.慎用重载"><a name="41.慎用重载" href="#41.慎用重载"></a>41.慎用重载</h5>
<h5 id="42.慎用可变参数"><a name="42.慎用可变参数" href="#42.慎用可变参数"></a>42.慎用可变参数</h5>
<h5 id="43.返回零长度的数组或集合，而不是null"><a name="43.返回零长度的数组或集合，而不是null" href="#43.返回零长度的数组或集合，而不是null"></a>43.返回零长度的数组或集合，而不是null</h5>
<h5 id="44.为所有到处的api元素编写文档注释"><a name="44.为所有到处的api元素编写文档注释" href="#44.为所有到处的api元素编写文档注释"></a>44.为所有到处的API元素编写文档注释</h5>
<h4 id="第8章-通用程序设计"><a name="第8章-通用程序设计" href="#第8章-通用程序设计"></a>第8章 通用程序设计</h4>
<h5 id="45.将局部变量的作用域最小化"><a name="45.将局部变量的作用域最小化" href="#45.将局部变量的作用域最小化"></a>45.将局部变量的作用域最小化</h5>
<h5 id="46.for-each循环优先于传统的for循环"><a name="46.for-each循环优先于传统的for循环" href="#46.for-each循环优先于传统的for循环"></a>46.for-each循环优先于传统的for循环</h5>
<pre><code data-origin="
<pre><code> 无法使用for-each的情形
1.过滤
2.转换
3.平行迭代
</code></pre>
"> 无法使用for-each的情形
1.过滤
2.转换
3.平行迭代
</code></pre>
<h5 id="47.了解和使用类库"><a name="47.了解和使用类库" href="#47.了解和使用类库"></a>47.了解和使用类库</h5>
<h5 id="48.如果需要精确的答案，请避免使用float和double"><a name="48.如果需要精确的答案，请避免使用float和double" href="#48.如果需要精确的答案，请避免使用float和double"></a>48.如果需要精确的答案，请避免使用float和double</h5>
<pre><code data-origin="
<pre><code>正确的做法：使用BigDecimal,int或者long进行货币计算
</code></pre>
">正确的做法：使用BigDecimal,int或者long进行货币计算
</code></pre>
<h5 id="49.基本类型优先于装箱基本类型"><a name="49.基本类型优先于装箱基本类型" href="#49.基本类型优先于装箱基本类型"></a>49.基本类型优先于装箱基本类型</h5>
<h5 id="50.如果其他类型更适合，则尽量避免使用字符串"><a name="50.如果其他类型更适合，则尽量避免使用字符串" href="#50.如果其他类型更适合，则尽量避免使用字符串"></a>50.如果其他类型更适合，则尽量避免使用字符串</h5>
<pre><code data-origin="
<pre><code>字符串不适合替代其他的值类型
字符串不适合代替枚举类型
字符串不适合替代聚集类型
字符串也不适合太呆能力表(capabilities)
</code></pre>
">字符串不适合替代其他的值类型
字符串不适合代替枚举类型
字符串不适合替代聚集类型
字符串也不适合太呆能力表(capabilities)
</code></pre>
<h5 id="51.当心字符串连接的性能"><a name="51.当心字符串连接的性能" href="#51.当心字符串连接的性能"></a>51.当心字符串连接的性能</h5>
<h5 id="52.通过接口引用对象"><a name="52.通过接口引用对象" href="#52.通过接口引用对象"></a>52.通过接口引用对象</h5>
<h5 id="53.接口优先于反射机制"><a name="53.接口优先于反射机制" href="#53.接口优先于反射机制"></a>53.接口优先于反射机制</h5>
<p>反射机制的代价<br />
丧失了编译时类型检查的好处<br />
执行反射访问所需要的代码非常笨拙和冗长<br />
性能损失</p>
<h5 id="54.谨慎地使用本地方法"><a name="54.谨慎地使用本地方法" href="#54.谨慎地使用本地方法"></a>54.谨慎地使用本地方法</h5>
<h5 id="55.谨慎地进行优化"><a name="55.谨慎地进行优化" href="#55.谨慎地进行优化"></a>55.谨慎地进行优化</h5>
<h5 id="56.遵守普遍接受的命名惯例"><a name="56.遵守普遍接受的命名惯例" href="#56.遵守普遍接受的命名惯例"></a>56.遵守普遍接受的命名惯例</h5>
<h4 id="第9章-异常"><a name="第9章-异常" href="#第9章-异常"></a>第9章 异常</h4>
<h5 id="57.只针对异常的情况才使用异常"><a name="57.只针对异常的情况才使用异常" href="#57.只针对异常的情况才使用异常"></a>57.只针对异常的情况才使用异常</h5>
<h5 id="58.对可恢复的情况使用受检异常，对编程错误使用运行时异常"><a name="58.对可恢复的情况使用受检异常，对编程错误使用运行时异常" href="#58.对可恢复的情况使用受检异常，对编程错误使用运行时异常"></a>58.对可恢复的情况使用受检异常，对编程错误使用运行时异常</h5>
<p>JAVA提供了三种可抛出结构(throwable)<br />
1.受检的异常(checked exception)<br />
2.运行时异常(run-time exception)<br />
3.错误(error)</p>
<h5 id="59.避免不必要地使用受检的异常"><a name="59.避免不必要地使用受检的异常" href="#59.避免不必要地使用受检的异常"></a>59.避免不必要地使用受检的异常</h5>
<h5 id="60.优先使用标准的异常"><a name="60.优先使用标准的异常" href="#60.优先使用标准的异常"></a>60.优先使用标准的异常</h5>
<h5 id="61.抛出与抽象相对应的异常"><a name="61.抛出与抽象相对应的异常" href="#61.抛出与抽象相对应的异常"></a>61.抛出与抽象相对应的异常</h5>
<h5 id="62.每个方法抛出的异常都要有文档"><a name="62.每个方法抛出的异常都要有文档" href="#62.每个方法抛出的异常都要有文档"></a>62.每个方法抛出的异常都要有文档</h5>
<h5 id="63.在细节信息中包含能捕获失败的信息"><a name="63.在细节信息中包含能捕获失败的信息" href="#63.在细节信息中包含能捕获失败的信息"></a>63.在细节信息中包含能捕获失败的信息</h5>
<h5 id="64.努力使失败保持原子性"><a name="64.努力使失败保持原子性" href="#64.努力使失败保持原子性"></a>64.努力使失败保持原子性</h5>
<h5 id="65.不要忽略异常"><a name="65.不要忽略异常" href="#65.不要忽略异常"></a>65.不要忽略异常</h5>
<h4 id="第10章-并发"><a name="第10章-并发" href="#第10章-并发"></a>第10章 并发</h4>
<h5 id="66.同步访问共享的可变数据"><a name="66.同步访问共享的可变数据" href="#66.同步访问共享的可变数据"></a>66.同步访问共享的可变数据</h5>
<p>关键字synchronized可以保证在同一时刻，只有一个线程可以执行某一个方法，或者某一个代码块。</p>
<h5 id="67.避免过度同步"><a name="67.避免过度同步" href="#67.避免过度同步"></a>67.避免过度同步</h5>
<h5 id="68.executor和task优先于线程"><a name="68.executor和task优先于线程" href="#68.executor和task优先于线程"></a>68.executor和task优先于线程</h5>
<h5 id="69.并发工具优先于wait和notify"><a name="69.并发工具优先于wait和notify" href="#69.并发工具优先于wait和notify"></a>69.并发工具优先于wait和notify</h5>
<h5 id="70.线程安全性的文档化"><a name="70.线程安全性的文档化" href="#70.线程安全性的文档化"></a>70.线程安全性的文档化</h5>
<h5 id="71.慎用延迟初始化"><a name="71.慎用延迟初始化" href="#71.慎用延迟初始化"></a>71.慎用延迟初始化</h5>
<h5 id="72.不要依赖于线程调度器"><a name="72.不要依赖于线程调度器" href="#72.不要依赖于线程调度器"></a>72.不要依赖于线程调度器</h5>
<h5 id="73.避免使用线程组"><a name="73.避免使用线程组" href="#73.避免使用线程组"></a>73.避免使用线程组</h5>
<h4 id="第11章-序列化"><a name="第11章-序列化" href="#第11章-序列化"></a>第11章 序列化</h4>
<h5 id="74.谨慎地实现serializable接口"><a name="74.谨慎地实现serializable接口" href="#74.谨慎地实现serializable接口"></a>74.谨慎地实现Serializable接口</h5>
<pre><code data-origin="
<pre><code>代价
1.实现Serializable接口而付出的最大代价是，可改变性变低
2.增加了出现Bug和安全漏洞的可能性
3.随着类发行新的版本，相关的测试负担也增加了
</code></pre>
">代价
1.实现Serializable接口而付出的最大代价是，可改变性变低
2.增加了出现Bug和安全漏洞的可能性
3.随着类发行新的版本，相关的测试负担也增加了
</code></pre>
<h5 id="75.考虑使用自定义的序列化形式"><a name="75.考虑使用自定义的序列化形式" href="#75.考虑使用自定义的序列化形式"></a>75.考虑使用自定义的序列化形式</h5>
<h5 id="76.保护性地编写readobject方法"><a name="76.保护性地编写readobject方法" href="#76.保护性地编写readobject方法"></a>76.保护性地编写readObject方法</h5>
<h5 id="77.对于实例控制，枚举类型优先于readresolve"><a name="77.对于实例控制，枚举类型优先于readresolve" href="#77.对于实例控制，枚举类型优先于readresolve"></a>77.对于实例控制，枚举类型优先于readResolve</h5>
<h5 id="78.考虑用序列化代理代替序列化实例"><a name="78.考虑用序列化代理代替序列化实例" href="#78.考虑用序列化代理代替序列化实例"></a>78.考虑用序列化代理代替序列化实例</h5><img src ="http://www.blogjava.net/lucky/aggbug/431682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2016-08-26 17:45 <a href="http://www.blogjava.net/lucky/archive/2016/08/26/431682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webloigc9增加外部目录应用</title><link>http://www.blogjava.net/lucky/archive/2010/07/03/325175.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Sat, 03 Jul 2010 15:11:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2010/07/03/325175.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/325175.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2010/07/03/325175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/325175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/325175.html</trackback:ping><description><![CDATA[修改C:\bea\user_projects\domains\MATRIX_1\config目录下的config.xml文件，<br />
在&lt;configuration-version&gt;元素之后 ，追加应用定义。<br />
例：<br />
<br />
&nbsp; &lt;app-deployment&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;name&gt;ematrix&lt;/name&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;target&gt;MATRIX&lt;/target&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;module-type&gt;war&lt;/module-type&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;source-path&gt;C:\usr\workspace\ematrix&lt;/source-path&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;security-dd-model&gt;DDOnly&lt;/security-dd-model&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;staging-mode&gt;nostage&lt;/staging-mode&gt; <br />
&lt;/app-deployment&gt;
<img src ="http://www.blogjava.net/lucky/aggbug/325175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2010-07-03 23:11 <a href="http://www.blogjava.net/lucky/archive/2010/07/03/325175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用技术参考</title><link>http://www.blogjava.net/lucky/archive/2008/12/19/247269.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Fri, 19 Dec 2008 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2008/12/19/247269.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/247269.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2008/12/19/247269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/247269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/247269.html</trackback:ping><description><![CDATA[1.Jakarta POIでExcelを操作<br />
&nbsp;&nbsp;&nbsp;<a href="http://www.javadrive.jp/poi/"> http://www.javadrive.jp/poi/</a><br />
<img src ="http://www.blogjava.net/lucky/aggbug/247269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2008-12-19 09:40 <a href="http://www.blogjava.net/lucky/archive/2008/12/19/247269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EclipseでResinを使うためのプラグイン</title><link>http://www.blogjava.net/lucky/archive/2008/11/12/240181.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Wed, 12 Nov 2008 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2008/11/12/240181.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/240181.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2008/11/12/240181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/240181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/240181.html</trackback:ping><description><![CDATA[<p>プラグインを提供します。</p>
<h3><a name="p1"><span class="sanchor">&nbsp;</span>Resin Launcher</a></h3>
<p>WTPでResinを使うためのプラグインです。</p>
<div><img src="http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi?action=ATTACH&amp;page=WTP+Extensions&amp;file=wtp%5Fresin%2Epng"  alt="" /></div>
<p>以下のリンクからnet.java.amateras.wtp.resin_x.x.x.jarをダウンロードし、Eclipseのpluginsディレクトリにコピーしてください。</p>
<ul>
    <li>1.0.2 (for WTP 1.0/Resin 3.0.14 or 3.0.15) - <a href="https://sourceforge.jp/projects/amateras/files/?release_id=17833#17833">https://sourceforge.jp/projects/amateras/files/?release_id=17833#17833</a></li>
    <li>1.0,3 (for WTP 1.5/Resin 3.0.21) - <a href="https://sourceforge.jp/projects/amateras/files/?release_id=22598#22598">https://sourceforge.jp/projects/amateras/files/?release_id=22598#22598</a></li>
</ul>
<img src ="http://www.blogjava.net/lucky/aggbug/240181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2008-11-12 22:40 <a href="http://www.blogjava.net/lucky/archive/2008/11/12/240181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>subversion安装</title><link>http://www.blogjava.net/lucky/archive/2008/11/12/240068.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Wed, 12 Nov 2008 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2008/11/12/240068.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/240068.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2008/11/12/240068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/240068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/240068.html</trackback:ping><description><![CDATA[1. 从CollabNet下载subversion的Windows版<br />
http://downloads.open.collab.net/collabnet-subversion.html<br />
2. 使用svnserve模式安装，指定仓库位置： d:\svn_repository<br />
3. run-&gt;cmd打开命令行窗口<br />
4. 创建一个subversion的仓库<br />
cd <br />
svnadmin create <br />
E.g.<br />
cd d:\svn_repository<br />
svnadmin create repository<br />
5. 修改密码<br />
编辑svnserve.conf文件<br />
E.g.  d:\svn_repository\repository\conf\svnserve.conf, <br />
找到下面的信息<br />
### The password-db option controls the location of the password<br />
### database file.  Unless you specify a path starting with a /,<br />
### the file's location is relative to the conf directory.<br />
### Uncomment the line below to use the default password file.<br />
#password-db = passwd<br />
去掉password-db前的#号<br />
password-db = passwd<br />
6. 增加用户名和密码<br />
编辑svnserve.conf同一目录下的'passwd'文件，在下面信息的后面追加用户名和密码:<br />
### This file is an example password file for svnserve.<br />
### Its format is similar to that of svnserve.conf. As shown in the<br />
### example below it contains one section labelled [users].<br />
### The name and password for each user follow, one account per line.<br />
<br />
[users]<br />
#harry = harryssecret<br />
#sally = sallyssecret<br />
例如：<br />
lucky = &#215;&#215;&#215;&#215;<br />
7. 打开Windows防火墙的屏蔽.<br />
参考文件<br />
http://www.microsoft.com/windowsxp/using/security/internet/sp2_wfexceptions.mspx<br />
在例外中添加subversion使用的svnserve.exe，或者增加例外的端口：3690.<br />
8. 运行svnserve<br />
可以使用windows的服务或者使用命令行<br />
net start svnserve      <br />
9. 对匿名用户指定读权限，修改conf/svnserve.conf文件<br />
anon-access = write<br />
10. Checkout仓库<br />
svn co svn://localhost/<br />
E.g. svn co svn://localhost/repository<br />
11. 权限设置<br />
编辑svnserve.conf同一目录下的'authz'文件，在下面信息的后面追加用户名和密码:<br />
[groups]<br />
dev = lucky,jiang,yu<br />
<br />
[repository:/]<br />
lucky= rw<br />
* = r<br />
<br />
[repository:/ECOMockup]<br />
@dev= rw<br />
* = r<br />
上面的设置表示 在根目录 只有lucky有读写的权力，其他人都是只读。 在根目录下的/ECOMockup工程dev小组有读写的权力 其他的就是只读。<br /><br /><div><span style="color: #0000ff; font-size: 14pt;">svn import -m "first import of AARKeywords" C:\Usr\THA\AARKeywods http://localhost/svn/AARKeywords</span></div><img src ="http://www.blogjava.net/lucky/aggbug/240068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2008-11-12 13:16 <a href="http://www.blogjava.net/lucky/archive/2008/11/12/240068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts ibatis 学习笔记（转载）</title><link>http://www.blogjava.net/lucky/archive/2008/11/08/239391.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Sat, 08 Nov 2008 04:23:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2008/11/08/239391.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/239391.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2008/11/08/239391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/239391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/239391.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: struts ibatis 学习笔记Posted on 2006-08-27 12:50 Earth 表设计PDM：&nbsp; 类图：所涉及的页面：浏览员工的页面employee_list.jsp增加/编辑员工信息的页面employee_add.jsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/lucky/archive/2008/11/08/239391.html'>阅读全文</a><img src ="http://www.blogjava.net/lucky/aggbug/239391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2008-11-08 12:23 <a href="http://www.blogjava.net/lucky/archive/2008/11/08/239391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIRA安装（Tomcat5.0.28+Mysql5.0.19）--原创</title><link>http://www.blogjava.net/lucky/archive/2006/05/02/44337.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Tue, 02 May 2006 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/05/02/44337.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/44337.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/05/02/44337.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/44337.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/44337.html</trackback:ping><description><![CDATA[
		<font color="#ff0000">转载请注明作者、出处，严禁用于任何商业用途</font>
		<br />
		<div align="center">
				<h3>
						<b>
								<font color="#000000">JIRA安装（Tomcat5.0.28+Mysql5.0.19）--原创</font>
						</b>
				</h3>                                                  <b> Lucky</b><br /><div align="left">     昨天转载了<font size="3"><span style="font-family: 宋体;">Judy Shen的《使用JIRA搭建企业问题跟踪系统》，在这篇文章中Jude Shen着重讲解了JIRA的特性和常用的设置。但是对于安装却没有提及，在本人实际安装JIRA的过程中，出现了一些问题，虽然最终解决但是花费了本人一下午的时间。为了帮助大家顺利安装，今天本人把安装的过程重新梳理一遍，请特别留意红色字体的部分。<br /></span></font><ol><li><font size="3"><span style="font-family: 宋体;">     安装JDK(<font color="#ff0000">JDK1.4.2以上</font>)，配置JAVA_HOME，安装Mysql(本人使用的版本是5.0.19)，安装tomcat(5.0.28)</span></font><br /></li><li>     <font size="3"><span style="font-family: 宋体;">下载JIRA: 本人下载的版本为----</span></font>3.6 Enterprise EAR/WAR的Zip文件</li><li>      解压缩JIRA，编辑解压缩目录\edit-webapp\WEB-INF\classes\entityengine.xml文件，原文件定义使用hsql(红色字体为增加部分)：    <br /></li><li>    &lt;transaction-factory class="org.ofbiz.core.entity.transaction.JNDIFactory"&gt;<br />      &lt;user-transaction-jndi jndi-server-name="default" jndi-name="java:comp<font color="#ff0000">/env</font>/UserTransaction"/&gt;<br />      &lt;transaction-manager-jndi jndi-server-name="default" jndi-name="java:comp<font color="#ff0000">/env</font>/UserTransaction"/&gt;<br />    &lt;/transaction-factory&gt;</li><li>    原来的field-type-name="hsql"，改为“mysql”<br /></li><li>     &lt;datasource name="defaultDS" field-type-name="<font color="#ff0000" face="Times New Roman">mysql</font>"<br />        helper-class="org.ofbiz.core.entity.GenericHelperDAO"<br />      check-on-start="true"<br />      use-foreign-keys="false"<br />      use-foreign-key-indices="false"<br />      check-fks-on-start="false"<br />      check-fk-indices-on-start="false"<br />      add-missing-on-start="true"<br />      check-indices-on-start="true"&gt;<br />        &lt;jndi-jdbc jndi-server-name="default" jndi-name="java:comp/env/jdbc/JiraDS"/&gt;</li><li>     修改完entityengine.xml文件的上述两个地方后，执行加压缩目录下的build加压缩目录下的build.bat将默认地生成JIRA的war包</li><li>     下载<font color="#ff0000">mysql-connector-java-3.1.12-bin</font>.jar拷贝到Tomcat安装目录的\common\lib下，<font color="#ff0000">请特别注意版本号必须为3.1.12</font></li><li><font color="#ff0000">     <font color="#000000">从</font></font>Atlassian下载<a href="http://www.atlassian.com/software/jira/docs/servers/jars/3.6/jira-jars-tomcat5.zip">jira-jars-tomcat5.zip</a>拷贝到Tomcat安装目录的\common\lib下</li></ol>  10.    配置Tomcat<span class="codefrag">安装目录conf/server.xml,增加   </span><pre class="code"><span style="color: rgb(255, 0, 0);"><font color="#ff0000">useBodyEncodingForURI</font></span><font color="#ff0000"><span style="color: rgb(0, 0, 255);">="true"</span></font><span style="color: rgb(0, 0, 255);"></span></pre><pre class="code"><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Connector </span><span style="color: rgb(255, 0, 0);">port</span><span style="color: rgb(0, 0, 255);">="8080"</span><span style="color: rgb(255, 0, 0);"><br />    maxThreads</span><span style="color: rgb(0, 0, 255);">="150"</span><span style="color: rgb(255, 0, 0);"> minSpareThreads</span><span style="color: rgb(0, 0, 255);">="25"</span><span style="color: rgb(255, 0, 0);"> maxSpareThreads</span><span style="color: rgb(0, 0, 255);">="75"</span><span style="color: rgb(255, 0, 0);"><br />    enableLookups</span><span style="color: rgb(0, 0, 255);">="false"</span><span style="color: rgb(255, 0, 0);"> redirectPort</span><span style="color: rgb(0, 0, 255);">="8443"</span><span style="color: rgb(255, 0, 0);"> acceptCount</span><span style="color: rgb(0, 0, 255);">="100"</span><span style="color: rgb(255, 0, 0);"><br />    debug</span><span style="color: rgb(0, 0, 255);">="0"</span><span style="color: rgb(255, 0, 0);"> connectionTimeout</span><span style="color: rgb(0, 0, 255);">="20000"</span><span style="color: rgb(255, 0, 0);"><br />    disableUploadTimeout</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);"> <font color="#ff0000">useBodyEncodingForURI</font></span><font color="#ff0000"><span style="color: rgb(0, 0, 255);">="true"</span></font><span style="color: rgb(0, 0, 255);">/&gt;<font color="#ff0000"><br /></font></span></div></pre></div><div align="left">  11.   创建数据库(我命名为jiradb,使用utf8编码)<br />  12.   创建数据库的使用用户(jirauser)<br />GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX on<br />  jiradb.* TO 'jirauser'@'localhost' IDENTIFIED BY 'mypassword';<br />  13.  拷贝dist-tomcat目录下的war包拷贝到tomcat安装目录下的webapps/目录下，拷贝dist-tomcat/tomcat-5/jira.xml到tomcat安装目录下/conf/Catalina/localhost/ 并修改该该文件<br />       删除下列配置(适用于hsqldb)<br /><pre class="code"><font color="#ff0000"> &lt;!-- NOTE: If NOT using hsqldb, delete the next two parameters --&gt;<br />    &lt;!-- Give unused connections 4 secs before eviction. --&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;minEvictableIdleTimeMillis&lt;/name&gt;<br />      &lt;value&gt;4000&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;!-- Check for evictions every 5 secs. --&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;timeBetweenEvictionRunsMillis&lt;/name&gt;<br />      &lt;value&gt;5000&lt;/value&gt;<br />    &lt;/parameter&gt;<br /><font color="#000000">修改后的jira.xml文件如下：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"><br />A sample configuration file for Tomcat 4.1.x and 5.0<br />Customize the docBase attribute, drop in your $CATALINA_HOME/webapps/ (4.1.x) or<br />$CATALINA_HOME/conf/Catalina/localhost/ (5.0) directory and restart Tomcat.<br />Note the JOTM dependencies; you'll need to copy various jars to Tomcat's common/lib/ directory.<br />See http://www.atlassian.com/software/jira/docs/latest/servers/tomcat41.html for details.<br /></span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br /> <br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Context </span><span style="color: rgb(255, 0, 0);">path</span><span style="color: rgb(0, 0, 255);">="/jira"</span><span style="color: rgb(255, 0, 0);"> docBase</span><span style="color: rgb(0, 0, 255);">="C:\usr\Apache\Tomcat5\webapps\jira"</span><span style="color: rgb(255, 0, 0);"> debug</span><span style="color: rgb(0, 0, 255);">="0"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />  </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Resource </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="jdbc/JiraDS"</span><span style="color: rgb(255, 0, 0);"> auth</span><span style="color: rgb(0, 0, 255);">="Container"</span><span style="color: rgb(255, 0, 0);"> type</span><span style="color: rgb(0, 0, 255);">="javax.sql.DataSource"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />  </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ResourceParams </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="jdbc/JiraDS"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">driverClassName</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"> NOTE: if you change the database type, you will need to change it in WEB-INF/classes/entityengine.xml </span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">com.mysql.jdbc.Driver</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">url</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">jdbc:mysql://localhost/jiradb?autoReconnect=true</span><span style="color: rgb(255, 0, 0);">&amp;amp;</span><span style="color: rgb(0, 0, 0);">useUnicode=true</span><span style="color: rgb(255, 0, 0);">&amp;amp;</span><span style="color: rgb(0, 0, 0);">characterEncoding=UTF8</span><span style="color: rgb(255, 0, 0);">&amp;amp;</span><span style="color: rgb(0, 0, 0);">mysqlEncoding=utf8</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">username</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">jirauser</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">password</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">mypassword</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />     </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">factory</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">org.apache.commons.dbcp.BasicDataSourceFactory</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /> </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ResourceParams</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /><br />  </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Resource </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="UserTransaction"</span><span style="color: rgb(255, 0, 0);"> auth</span><span style="color: rgb(0, 0, 255);">="Container"</span><span style="color: rgb(255, 0, 0);"> type</span><span style="color: rgb(0, 0, 255);">="javax.transaction.UserTransaction"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />  </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ResourceParams </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="UserTransaction"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">factory</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">org.objectweb.jotm.UserTransactionFactory</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">jotm.timeout</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">60</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />  </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ResourceParams</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Context</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>14. 启动tomcat，敲入http://.../jira，应该就能看到JIRA的配置向导了<br />                  （全文完）<br /><br /><br /></font></font></pre><strong></strong></div></div>
		<div id="stickies-count" style="display: none;">0</div>
<img src ="http://www.blogjava.net/lucky/aggbug/44337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-05-02 10:45 <a href="http://www.blogjava.net/lucky/archive/2006/05/02/44337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JIRA搭建企业问题跟踪系统(转自Judy Shen的专栏)</title><link>http://www.blogjava.net/lucky/archive/2006/05/01/44301.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Mon, 01 May 2006 12:22:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/05/01/44301.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/44301.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/05/01/44301.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/44301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/44301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://blog.csdn.net/judyxm/archive/2006/04/26/678456.asp																																																																																																		版权归原作者--Judy She...&nbsp;&nbsp;<a href='http://www.blogjava.net/lucky/archive/2006/05/01/44301.html'>阅读全文</a><img src ="http://www.blogjava.net/lucky/aggbug/44301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-05-01 20:22 <a href="http://www.blogjava.net/lucky/archive/2006/05/01/44301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts的html:checkBox标签超郁闷的问题</title><link>http://www.blogjava.net/lucky/archive/2006/04/14/41001.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Thu, 13 Apr 2006 16:03:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/14/41001.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/41001.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/14/41001.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/41001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/41001.html</trackback:ping><description><![CDATA[     被Struts的html:checkBox标签使用的小问题郁闷了两天，今天终于找到了解决的办法。如果大家也遇到同样的问题，可以参考。<br /><h4>1）需求： </h4>     当通过菜单进入页面时，页面中的checkbox处于被选中状态，页面提交后forward回本页，对应的checkbox保持提交时的状态，也就是说：如果提交时checkbox是选中状态回来仍然是选中状态；如果用户在提交前将checkbox的勾去掉，回来时checkbox应该为为选中状态。<br /><h4>2）问题：</h4>     这个需求看起来很简单，只需要<br />    1)在对应的form中将checkbox对应的属性设为true就行了：<br />        <b> private boolean syaken = true;</b><br />    2）在对应的jsp中使用html:checkbox标签就行了<br />       <b>&lt;html:checkbox property="syaken"/&gt;</b><br />    但问题是checkbox标签不会去set初始化值为true的checkbox属性，不赋初值时Struts默认赋为false；<br />    从网上找资料有人说可以实现ActionFrom的reset（）方法将对应的属性值设为false，但reset方法是在form实例化以后被调用的，也就是说你初始化的值true将被重置为false，这和直接将属性值设为false没有任何区别，这样做的结果是你从菜单进入页面时checkbox是处于不被选中的状态。<br />   他们之间存在着矛盾，问题的关键就是每次提交时，Struts并没有去重新设置所有checkbox的属性值，而是有选择地（初始化值为false）地进行重新设置。<br /><h4>3)解决办法：</h4>     超级简单，在checkbox后面添加一个和checkbox的属性同名并且value为“false”的隐藏输入框，强迫Struts去重新设置checkbox的属性值：<br />     <b> &lt;html:checkbox property="syaken"/&gt;&amp;nbsp;<br />      <font color="#ff0000">&lt;input type="hidden" name="syaken" value="false"&gt;<br /><br />   </font></b><font color="#ff0000"><font color="#000000">这个问题郁闷了我两天，没想到解决办法这么简单。</font></font><b><font color="#ff0000"><br /><br /></font></b>     <br /><br /><div id="stickies-count" style="display: none;">0</div><img src ="http://www.blogjava.net/lucky/aggbug/41001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-14 00:03 <a href="http://www.blogjava.net/lucky/archive/2006/04/14/41001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为Openfans配置的eHCache.xml（暂未提交）</title><link>http://www.blogjava.net/lucky/archive/2006/04/04/39093.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Tue, 04 Apr 2006 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/04/04/39093.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/39093.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/04/04/39093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/39093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/39093.html</trackback:ping><description><![CDATA[昨天答应为openfans在原来的ehcache的基础上增加对象cache。我参考着尝试增加配置如下。由于以前没有用过ehcache，虽然现在没提示没有配置cache对象，但到现在我也对它的原理，配置结构还是一窍不通。如果有哪位知道欢迎交流并对下面的配置进行批评指正。<br />&lt;ehcache&gt;<br /><br />    &lt;!-- Sets the path to the directory where cache .data files are created.<br /><br />        If the path is a Java System Property it is replaced by<br />        its value in the running VM.<br /><br />        The following properties are translated:<br />        user.home - User's home directory<br />        user.dir - User's current working directory<br />        java.io.tmpdir - Default temp file path --&gt;<br />    &lt;diskStore path="java.io.tmpdir" /&gt;<br /><br /><br />    &lt;!--Default Cache configuration. These will applied to caches programmatically created through<br />        the CacheManager.<br /><br />        The following attributes are required:<br /><br />        maxElementsInMemory            - Sets the maximum number of objects that will be created in memory<br />        eternal                        - Sets whether elements are eternal. If eternal,  timeouts are ignored and the<br />        element is never expired.<br />        overflowToDisk                 - Sets whether elements can overflow to disk when the in-memory cache<br />        has reached the maxInMemory limit.<br /><br />        The following attributes are optional:<br />        timeToIdleSeconds              - Sets the time to idle for an element before it expires.<br />        i.e. The maximum amount of time between accesses before an element expires<br />        Is only used if the element is not eternal.<br />        Optional attribute. A value of 0 means that an Element can idle for infinity.<br />        The default value is 0.<br />        timeToLiveSeconds              - Sets the time to live for an element before it expires.<br />        i.e. The maximum time between creation time and when an element expires.<br />        Is only used if the element is not eternal.<br />        Optional attribute. A value of 0 means that and Element can live for infinity.<br />        The default value is 0.<br />        diskPersistent                 - Whether the disk store persists between restarts of the Virtual Machine.<br />        The default value is false.<br />        diskExpiryThreadIntervalSeconds- The number of seconds between runs of the disk expiry thread. The default value<br />        is 120 seconds.<br />    --&gt;<br /><br />    &lt;!-- Queries cache --&gt;<br />    &lt;cache name="org.hibernate.cache.StandardQueryCache"<br />        maxElementsInMemory="1000" eternal="false" timeToLiveSeconds="120"<br />        overflowToDisk="true" /&gt;<br /><br />    &lt;cache name="org.hibernate.cache.UpdateTimestampsCache"<br />        maxElementsInMemory="5000" eternal="true" overflowToDisk="true" /&gt;<br /><br />    &lt;!-- Object cache --&gt;<br />    &lt;cache name="org.openfans.domain.Article"<br />        maxElementsInMemory="50000" eternal="false" overflowToDisk="true"<br />        timeToIdleSeconds="300" /&gt;<br />    &lt;cache name="org.openfans.domain.Auth" maxElementsInMemory="5000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="600" /&gt;<br />    &lt;cache name="org.openfans.domain.Fans" maxElementsInMemory="10000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="300" /&gt;<br />    &lt;cache name="org.openfans.domain.FansVisitTag" maxElementsInMemory="10000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="300" /&gt;<br />    &lt;cache name="org.openfans.domain.Group" maxElementsInMemory="10000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="600" /&gt;<br />    &lt;cache name="org.openfans.domain.Link" maxElementsInMemory="20000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="300" /&gt;<br />    &lt;cache name="org.openfans.domain.RootTag" maxElementsInMemory="20000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="300" /&gt;<br />    &lt;cache name="org.openfans.domain.Tag" maxElementsInMemory="20000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="300" /&gt;<br />        &lt;cache name="org.openfans.domain.TagRelation" maxElementsInMemory="20000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="300" /&gt;<br />    &lt;cache name="org.openfans.domain.UseStatus" maxElementsInMemory="20000"<br />        eternal="false" overflowToDisk="true" timeToIdleSeconds="300" /&gt;<br /><br />    &lt;defaultCache maxElementsInMemory="10000" eternal="true"<br />        overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="120"<br />        diskPersistent="false" diskExpiryThreadIntervalSeconds="120" /&gt;<br /><br />    &lt;!-- See http://ehcache.sourceforge.net/documentation/#mozTocId258426 for how to configure caching for your objects --&gt;<br />&lt;/ehcache&gt;<br /><div id="stickies-count" style="display: none;">0</div><img src ="http://www.blogjava.net/lucky/aggbug/39093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-04-04 10:06 <a href="http://www.blogjava.net/lucky/archive/2006/04/04/39093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 启动参数 </title><link>http://www.blogjava.net/lucky/archive/2006/03/04/33613.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Sat, 04 Mar 2006 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2006/03/04/33613.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/33613.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2006/03/04/33613.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/33613.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/33613.html</trackback:ping><description><![CDATA[<STRONG>Eclipse 启动参数</STRONG> <BR>&nbsp;&nbsp;&nbsp; 我的系统环境变量中使用的是jdk1.3，为了使用Eclipse我需要使用JDK1.5：<BR><SPAN style="FONT-WEIGHT: bold">1）Eclipse 启动参数：<BR></SPAN>创建一个Eclipse的快捷方式到桌面，点击属性，设置<BR>C:\usr\eclipse\3.1.1\eclipse.exe&nbsp; -nosplash -vm C:\usr\jdk\jdk1.5.0_06\bin\javaw.exe -vmargs -Xms256m -Xmx512m<BR>我的-Xms256 -Xms512设的有点大，大家可以根据自己的需要调整。<BR><BR><SPAN style="FONT-WEIGHT: bold">2）查看Eclipse内存使用情况，垃圾回收<BR></SPAN>在Eclipse<BR>1)eclipse.ini:<BR>-vmargs -Xms128m -Xmx512m<BR>2)在根目录建options文件:<BR>org.eclipse.ui/perf/showHeapStatus=true<BR>3)启动参数（在快捷方式属性中设置）<BR>&nbsp;-debug options -vm C:\usr\jdk\jdk1.5.0_06\bin\javaw.exe<BR><BR>启动之后大家会在底部的状态栏 发现多了内存使用情况的一个bar，还有一个垃圾箱的图标。<BR>在Eclipse运行一段时间点击垃圾箱图标，执行垃圾回收。从数据显示来看，还是有效的。<BR><BR><BR><img src ="http://www.blogjava.net/lucky/aggbug/33613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2006-03-04 18:21 <a href="http://www.blogjava.net/lucky/archive/2006/03/04/33613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件开发思考</title><link>http://www.blogjava.net/lucky/archive/2005/09/20/13536.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Tue, 20 Sep 2005 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2005/09/20/13536.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/13536.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2005/09/20/13536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/13536.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/13536.html</trackback:ping><description><![CDATA[   
随着企业应用开发竞争日益激烈，需求变更的更加频繁，而指导软件开发的方法学和各种软件过程也色彩纷呈，百花争艳。除却外部的激烈竞争环境，软件企业自身
也存在各种各样需要面对的难题：开发效率低下，品质问题突出。。。大家都在寻求能更好的方式解决这些问题提高企业的竞争能力的方法。这些方法大概可以分为
三类：1）提高开发人员的素质 2）规范开发过程和开发方法 3）寻找和利用工具；<br>
    对于第一种方法是各个企业追求的终极目标，提高开发人员的素质无外乎通过1）企业培训2）员工利用个人时间充电
3）高水平的项目锻炼。这三种方法对于企业和个人的投入都有要求，是最难实施也是最慢见成效的一种方法，但不管怎么样这是企业要获得持续发展的必然途径。<br>
   
对于第二种方法是每个软件企业都在实施的一种通用的方法，现在存在着很多开发过程和开发方法，重量级的如：RUP（统一软件过程）、CMM、CMMI，轻
量级的如：自适应、水晶、XP等。这些方法和过程自身就是相互学习，互相融合，在企业实施过程中也都是结合各自的优点，形成自有的一套体系。企业在能够形
成自己一套行之有效的体系前必须不断经历尝试，裁减再尝试这样一个痛苦的过程的，是不可能一蹴而就的。最好的方法是就是从已经形成自有特色的企业处获得指
导。<br>
    第三种也是最为大家认同的:使用工具，工具使得执行开发过程变得简单。对于一些大家公认的开发过程的步骤，比如：代码规范：CODE STANDARD<br>
# 测试驱动开发：TEST-DRIVEN DEVELOPMENT<br>
# 日构建：DAILY BUILDING<br>
# 持续集成：CONTINUOUS INTEGRATION<br>
# 小步发布：SMALL RELEASE<br>
  
我们都能找到工具很好的进行支持。这种方法除去学习工具所花去的时间，应该是最容易看见成效的。而且充分利用工具能够很快地帮助新手进入角色，比如说：利
用代码规范检测工具checkstyle，我们很容易帮助新手规范代码的编写，而不用我们人为地进行codereview检察代码规范。<br>
    所以，我的观点是尽可能地利用已有的工具遵循软件企业既定的软件开发过程来完善软件的开发，应该善假于物。<img src ="http://www.blogjava.net/lucky/aggbug/13536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2005-09-20 17:02 <a href="http://www.blogjava.net/lucky/archive/2005/09/20/13536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenCms 6安装</title><link>http://www.blogjava.net/lucky/archive/2005/08/30/11580.html</link><dc:creator>Lucky</dc:creator><author>Lucky</author><pubDate>Tue, 30 Aug 2005 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/lucky/archive/2005/08/30/11580.html</guid><wfw:comment>http://www.blogjava.net/lucky/comments/11580.html</wfw:comment><comments>http://www.blogjava.net/lucky/archive/2005/08/30/11580.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/lucky/comments/commentRss/11580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lucky/services/trackbacks/11580.html</trackback:ping><description><![CDATA[<P><!--StartFragment --> </P>
<H2>OpenCms 6安装</H2>
<P>本页提供如何使用<A href="http://jakarta.apache.org/tomcat/index.html" target=extern>Tomcat</A> 和 <A href="http://www.mysql.com/" target=extern>MySql</A>来安装opencms的信息. 所有组件的安装被单步描述. 请确保每步安装都成功. </P>
<P><STRONG>1. 安装JDK(版本为 1.4或更高）</STRONG></P>
<BLOCKQUOTE dir=ltr>
<P>安装JDK(版本为 1.4或更高） (从SUN <CODE><A href="http://java.sun.com/products/j2se/" target=_blank>http://java.sun.com/products/j2se/</A></CODE>公司获得). 关于如何在你的操作系统安装这些组件的细节，请参考sun提供的相关文档。. 你应该确认安装 Java的<I>SDK</I>, 而不是同样可以从SUN获得的 <I>JRE</I> (JAVA 运行时环境). JRE<I>不能</I> 满足OpenCms的运行!</P>
<P><EM><B>重点</B>:</EM> OpenCms 6 仅仅在JDK1.4和JDK5.0中测试通过.一些属性不能从JDK1.4以前版本的JDK中获得.</P>
<P><STRONG><EM>提示: </EM></STRONG>FreeBSD用户 应该需要安装最新的资源以便系统使用<CODE>rndcontrol</CODE>功能. 否则的话，安装将会中断. 例如, 在一台网卡暂用IRQs 9的机器上, 你可以执行 </P>
<P><CODE>rndcontrol -s 9</CODE></P></BLOCKQUOTE>
<P><STRONG>2. 安装 Tomcat</STRONG></P>
<BLOCKQUOTE dir=ltr>
<P>OpenCms 6.0 需要一种兼容Servlet 2.3 / JSP 1.2标准的容器. Tomcat 4 是这种标准的参考实现. 本发布版在Tomcat 4.1.x, Tomcat 5.0.x 和 Tomcat 5.5.x下测试通过. 对于Tomcat不支持新标准的更老的版本 (3.x以前) 不能够使用OpenCms 6.0. Tomcat 4.0.x 没有测试,但是应该能够工作.<BR></P>
<P>从<CODE><A href="http://jakarta.apache.org/tomcat/index.html" target=extern>http://jakarta.apache.org/tomcat/index.html</A></CODE> 下载Tomcat并安装到你选择的文件夹中. 这就是 <CODE>CATALINA_HOME</CODE> 指定的文件夹. 不要忘记设置环境变量<CODE>CATALINA_HOME</CODE> 和 <CODE>JAVA_HOME</CODE>.</P>
<P>通过在standalone模式下运行Tomcat并检测实例来测试Tomcat的安装. 提示: Tomcat在standalone模式下使用8080端口. 如果你愿意,你可以将servlet引擎和web服务器结合，像Apache Web Server <CODE><A href="http://www.apache.org/httpd.html" target=extern>http://www.apache.org/httpd.html</A></CODE> . 如何和servlet引擎结合，请参考webserver文档.</P>
<P><EM><STRONG>提示:</STRONG></EM> 你可以从opencms.org一份额外的文档来知道如何使用mod_proxy在Apache httpd和Tomcat上安装OpenCms。 </P>
<P><EM><STRONG>提示:</STRONG></EM> 旧版本的OpenCms需要设置Java文件编码使用 <CODE>-dfile.encoding=....</CODE> . 对于OpenCms 6已经不再需要了.</P></BLOCKQUOTE>
<P><STRONG>3.安装 MySQL</STRONG></P>
<BLOCKQUOTE dir=ltr>
<P>从<CODE><A href="http://www.mysql.com/downloads/index.html" target=extern>http://www.mysql.com/downloads/index.html</A></CODE> 下载安装MySQL。(参考MySQL在线文档 <CODE><A href="http://www.mysql.com/documentation/index.html" target=extern>http://www.mysql.com/documentation/index.html</A></CODE> ). MySQL Windows版被安装到 <CODE>C:\</CODE>盘，应该使用 <CODE>%MYSQL_HOME%/bin/mysqld -install</CODE>注册Windows服务.</P>
<P>OpenCms能够使用MySQL 3.2, 4.0和4.1.由于效率原因我们推荐MySQL 4.1,或者最少4.0.</P>
<P>通过运行服务(WIN32下)或者执行 <CODE>%MYSQL_HOME%/bin/mysqld</CODE>(UNIX)启动MySQL服务器.</P>
<P>在继续前请通过启动MySQL监视器 (在MySQL安装目录的bin文件夹下执行 <CODE>mysql</CODE>)测试MySQL正常运行. 数据库正常工作如果执行monitor后出现MySQL提示符 . 键入exit退出MySQL监视器，继续下一步.</P>
<P><STRONG><EM>重点:</EM></STRONG> 你应该增加MySQL配置文件(通常为<CODE>my.ini</CODE>)中配置变量<CODE>max_allowed_packet</CODE>的值. 对于OpenCms, limit应该尽可能的高, 推荐设置：<CODE>max_allowed_packet=16M</CODE>。</P></BLOCKQUOTE>
<P><STRONG>4. 部署opencms.war文件</STRONG></P>
<BLOCKQUOTE dir=ltr>
<P>从下载的二进制压缩包ZIP文件中拷贝<CODE>opencms.war</CODE>文件到<CODE>CATALINA_HOME/webapps/</CODE>目录下. 使用Tomcat的真实安装路径替换<CODE>CATALINA_HOME</CODE>变量.</P>
<P>启动(或重启)Tomcat. Tomcat现在将部署应用OpenCms.</P>
<P><EM><STRONG>重点</STRONG>:</EM>确保OpenCms的War包的完整性 <CODE>*.war</CODE> . OpenCms只能以War的方式部署. 确定Tomcat解包war文件并且创建<CODE>CATALINA_HOME/webapps/opencms/</CODE>目录, 并将OpenCms文件拷贝到这个目录. 你的Servlet容器默认的配置 / 环境不能解包<CODE>*.war</CODE>文件.如果这样请手动解包. 对于解压缩工具, <CODE>*.war</CODE>文件和<CODE>*.zip</CODE>文件只是扩展名不同而已.如果没有解包<CODE>*.war</CODE>文件，OpenCms安装向导将显示一个警告并不允许你继续。 </P></BLOCKQUOTE>
<P><STRONG>5. 使用安装向导安装OpenCms</STRONG></P>
<BLOCKQUOTE dir=ltr>
<P>在浏览器中键入以下地址 <CODE><A href="http://www.default.opencmstest.com/setup">http://localhost:8080/opencms/setup</A></CODE>开始安装. 依赖于你的配置, 你可以替换 <CODE>localhost</CODE> 为你的服务名. 端口8080仅仅在以standalone模式启动Tomcat时使用.</P>
<P>遵循OpenCms的安装想到提示,使用“标准”安装. 它将建立OpenCms数据库并倒入所有能够获得&nbsp;的模块到系统zho能够. 对于正常的Mysql和Tomcat安装在一台服务器上的情况，所有的默认设置都将满足你的需求.</P>
<P><EM><STRONG>重点:</STRONG></EM> Make sure you disable all popup blockers for the server URL you installed OpenCms on. Otherwise you will not be able to log in to the OpenCms Workplace.</P></BLOCKQUOTE>
<P><STRONG>6. 现在你的系统已经就绪</STRONG></P>
<BLOCKQUOTE dir=ltr>
<P>现在你的系统可以使用了. 你可以使用用户名: <CODE>Admin</CODE> 和密码: <CODE>admin</CODE>登陆了. 请尽可能快地更改密码. OpenCms默认的登陆URL: <CODE><A href="file:///system/login/">http://localhost:8080/opencms/opencms/system/login/</A></CODE></P></BLOCKQUOTE>
<P><STRONG>7. 安全提示</STRONG></P>
<BLOCKQUOTE dir=ltr>
<P>在成功安装OpenCms后，你应该检查一下安全方面的设置.</P>
<P>首先通过用户设置（Workplace主窗口中“checkbox”图标）更改OpenCms用户<CODE>Admin</CODE>的密码.</P>
<P>然后给Mysql数据库添加一个密码.在Mysql命令行下敲入如下命令.</P>
<BLOCKQUOTE><PRE>use mysql;
insert into user values ('localhost', 'opencmsuser', password('XXXXX'),\
    'N','N','N','N','N','N','N','N','N','N','N','N','N','N');
insert into db values ('localhost', 'opencms', 'opencmsuser',\
    'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
flush privileges;
</PRE></BLOCKQUOTE>
<P>确认替换<CODE>opencmsuser</CODE> 和 <CODE>opencms</CODE> 以及数据库你在安装时设置.</P>
<P>不要忘记<CODE>opencms.properties</CODE>文件中添加新的用户名和密码. . 只有新的用户能够连接大盘OpenCms表.更多的信息请参阅MySQL文档.</P></BLOCKQUOTE><img src ="http://www.blogjava.net/lucky/aggbug/11580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lucky/" target="_blank">Lucky</a> 2005-08-30 18:48 <a href="http://www.blogjava.net/lucky/archive/2005/08/30/11580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>