優(yōu)點(diǎn)
·靜態(tài)工廠方法有名稱
·不用每次都創(chuàng)建新實(shí)例
·可以返回遠(yuǎn)返回類型的任何子類型的對(duì)象
·在創(chuàng)建參數(shù)化類型實(shí)例的時(shí)候代碼更簡(jiǎn)潔
缺點(diǎn)
·不能被子類化
·它們與其他的靜態(tài)方法實(shí)際上沒(méi)有任何區(qū)別
如果類的構(gòu)造器或者靜態(tài)工廠中具有多個(gè)參數(shù),可以考慮使用Builder模式
編寫(xiě)一個(gè)包含單個(gè)元素的枚舉類型
public enum Elvis{
INSTANCE;
public void leaveTheBuilding*(){
...}
}
">public enum Elvis{
INSTANCE;
public void leaveTheBuilding*(){
...}
}
讓不需要實(shí)例化的類擁有私有(private)構(gòu)造器來(lái)避免被實(shí)例化
//Noninstantiable utility class
public enum UtilityClass{
private UtilityClass(){
throw new AssertinError();
}
...
}
">//Noninstantiable utility class
public enum UtilityClass{
private UtilityClass(){
throw new AssertinError();
}
...
}
使用靜態(tài)的初始化器(initialize)避免創(chuàng)建重復(fù)的Calendar,TimeZone和Date實(shí)例
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) >= 0 && birthDate.compareTo(BOOM_END) <= 0;
}
}
">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) >= 0 && birthDate.compareTo(BOOM_END) <= 0;
}
}
優(yōu)先使用基本類型而不是裝箱基本類型,要當(dāng)心無(wú)意識(shí)的自動(dòng)裝箱。
一旦對(duì)象引用已經(jīng)過(guò)期,只需清空這些引用即可。
終結(jié)方法(finalizer)通常是不可預(yù)測(cè)的,也是很危險(xiǎn)的,一般情況下是不必要的。
不應(yīng)該依賴終結(jié)方法來(lái)更新重要的持久狀態(tài)。
顯式終止方法的典型例子:InputStream,OutputStream,java.sql.Connection的Close
·類的每個(gè)實(shí)例本質(zhì)上都是唯一的
·不關(guān)心類是否提供了“邏輯相等”
·超類已經(jīng)覆蓋了equals,從超類繼承過(guò)來(lái)的行為對(duì)于子類也是合適的
·類是私有的或是包級(jí)私有的,應(yīng)該覆蓋父類的equals方法保證永遠(yuǎn)不會(huì)被調(diào)用
1.不要提供任何會(huì)修改對(duì)象狀態(tài)的方法
2.保證類不會(huì)被擴(kuò)展
3.使所有域都是final
4.使所有域都成為私有的
5.確保對(duì)于任何可變組建的互斥訪問(wèn)
- 現(xiàn)有的類可以很容易被更新,以實(shí)現(xiàn)新的接口
- 接口是定義minin(混合類型)的理想選擇
- 接口允許我們構(gòu)造非層次結(jié)構(gòu)的類型框架
SuppressWarnings注解始終在盡可能小的范圍中使用。
數(shù)組是協(xié)變得(covariant)。
數(shù)組是具體化的。
謹(jǐn)慎地選擇方法的名稱
不要過(guò)于追求提供便利的方法
避免過(guò)長(zhǎng)的參數(shù)列表
無(wú)法使用for-each的情形
1.過(guò)濾
2.轉(zhuǎn)換
3.平行迭代
正確的做法:使用BigDecimal,int或者long進(jìn)行貨幣計(jì)算
字符串不適合替代其他的值類型
字符串不適合代替枚舉類型
字符串不適合替代聚集類型
字符串也不適合太呆能力表(capabilities)
反射機(jī)制的代價(jià)
喪失了編譯時(shí)類型檢查的好處
執(zhí)行反射訪問(wèn)所需要的代碼非常笨拙和冗長(zhǎng)
性能損失
JAVA提供了三種可拋出結(jié)構(gòu)(throwable)
1.受檢的異常(checked exception)
2.運(yùn)行時(shí)異常(run-time exception)
3.錯(cuò)誤(error)
關(guān)鍵字synchronized可以保證在同一時(shí)刻,只有一個(gè)線程可以執(zhí)行某一個(gè)方法,或者某一個(gè)代碼塊。
代價(jià)
1.實(shí)現(xiàn)Serializable接口而付出的最大代價(jià)是,可改變性變低
2.增加了出現(xiàn)Bug和安全漏洞的可能性
3.隨著類發(fā)行新的版本,相關(guān)的測(cè)試負(fù)擔(dān)也增加了
WTPでResinを使うためのプラグインです。
以下のリンクからnet.java.amateras.wtp.resin_x.x.x.jarをダウンロードし、Eclipseのpluginsディレクトリにコピーしてください。
useBodyEncodingForURI="true"
<Connector?port="8080"
????maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75"
????enableLookups="false"?redirectPort="8443"?acceptCount="100"
????debug="0"?connectionTimeout="20000"
????disableUploadTimeout="true"?useBodyEncodingForURI="true"/>
<!-- NOTE: If NOT using hsqldb, delete the next two parameters -->
<!-- Give unused connections 4 secs before eviction. -->
<parameter>
<name>minEvictableIdleTimeMillis</name>
<value>4000</value>
</parameter>
<!-- Check for evictions every 5 secs. -->
<parameter>
<name>timeBetweenEvictionRunsMillis</name>
<value>5000</value>
</parameter>
修改后的jira.xml文件如下:<!--14. 啟動(dòng)tomcat,敲入http://.../jira,應(yīng)該就能看到JIRA的配置向?qū)Я?br /> (全文完)
A?sample?configuration?file?for?Tomcat?4.1.x?and?5.0
Customize?the?docBase?attribute,?drop?in?your?$CATALINA_HOME/webapps/?(4.1.x)?or
$CATALINA_HOME/conf/Catalina/localhost/?(5.0)?directory?and?restart?Tomcat.
Note?the?JOTM?dependencies;?you'll?need?to?copy?various?jars?to?Tomcat's?common/lib/?directory.
See?http://www.atlassian.com/software/jira/docs/latest/servers/tomcat41.html?for?details.
-->
?
<Context?path="/jira"?docBase="C:\usr\Apache\Tomcat5\webapps\jira"?debug="0">
??<Resource?name="jdbc/JiraDS"?auth="Container"?type="javax.sql.DataSource"/>
??<ResourceParams?name="jdbc/JiraDS">
????<parameter>
??????<name>driverClassName</name>
????????<!--?NOTE:?if?you?change?the?database?type,?you?will?need?to?change?it?in?WEB-INF/classes/entityengine.xml?-->
??????<value>com.mysql.jdbc.Driver</value>
????</parameter>
????<parameter>
??????<name>url</name>
??????<value>jdbc:mysql://localhost/jiradb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&mysqlEncoding=utf8</value>
????</parameter>
????<parameter>
??????<name>username</name>
??????<value>jirauser</value>
????</parameter>
????<parameter>
??????<name>password</name>
??????<value>mypassword</value>
????</parameter>
?????<parameter>
??????<name>factory</name>
??????<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
????</parameter>
?</ResourceParams>
??<Resource?name="UserTransaction"?auth="Container"?type="javax.transaction.UserTransaction"/>
??<ResourceParams?name="UserTransaction">
????<parameter>
??????<name>factory</name>
??????<value>org.objectweb.jotm.UserTransactionFactory</value>
????</parameter>
????<parameter>
??????<name>jotm.timeout</name>
??????<value>60</value>
????</parameter>
??</ResourceParams>
</Context>
本頁(yè)提供如何使用Tomcat 和 MySql來(lái)安裝opencms的信息. 所有組件的安裝被單步描述. 請(qǐng)確保每步安裝都成功.
1. 安裝JDK(版本為 1.4或更高)
安裝JDK(版本為 1.4或更高) (從SUN
http://java.sun.com/products/j2se/
公司獲得). 關(guān)于如何在你的操作系統(tǒng)安裝這些組件的細(xì)節(jié),請(qǐng)參考sun提供的相關(guān)文檔。. 你應(yīng)該確認(rèn)安裝 Java的SDK, 而不是同樣可以從SUN獲得的 JRE (JAVA 運(yùn)行時(shí)環(huán)境). JRE不能 滿足OpenCms的運(yùn)行!重點(diǎn): OpenCms 6 僅僅在JDK1.4和JDK5.0中測(cè)試通過(guò).一些屬性不能從JDK1.4以前版本的JDK中獲得.
提示: FreeBSD用戶 應(yīng)該需要安裝最新的資源以便系統(tǒng)使用
rndcontrol
功能. 否則的話,安裝將會(huì)中斷. 例如, 在一臺(tái)網(wǎng)卡暫用IRQs 9的機(jī)器上, 你可以執(zhí)行
rndcontrol -s 9
2. 安裝 Tomcat
OpenCms 6.0 需要一種兼容Servlet 2.3 / JSP 1.2標(biāo)準(zhǔn)的容器. Tomcat 4 是這種標(biāo)準(zhǔn)的參考實(shí)現(xiàn). 本發(fā)布版在Tomcat 4.1.x, Tomcat 5.0.x 和 Tomcat 5.5.x下測(cè)試通過(guò). 對(duì)于Tomcat不支持新標(biāo)準(zhǔn)的更老的版本 (3.x以前) 不能夠使用OpenCms 6.0. Tomcat 4.0.x 沒(méi)有測(cè)試,但是應(yīng)該能夠工作.
從
http://jakarta.apache.org/tomcat/index.html
下載Tomcat并安裝到你選擇的文件夾中. 這就是CATALINA_HOME
指定的文件夾. 不要忘記設(shè)置環(huán)境變量CATALINA_HOME
和JAVA_HOME
.通過(guò)在standalone模式下運(yùn)行Tomcat并檢測(cè)實(shí)例來(lái)測(cè)試Tomcat的安裝. 提示: Tomcat在standalone模式下使用8080端口. 如果你愿意,你可以將servlet引擎和web服務(wù)器結(jié)合,像Apache Web Server
http://www.apache.org/httpd.html
. 如何和servlet引擎結(jié)合,請(qǐng)參考webserver文檔.提示: 你可以從opencms.org一份額外的文檔來(lái)知道如何使用mod_proxy在Apache httpd和Tomcat上安裝OpenCms。
提示: 舊版本的OpenCms需要設(shè)置Java文件編碼使用
-dfile.encoding=....
. 對(duì)于OpenCms 6已經(jīng)不再需要了.
3.安裝 MySQL
從
http://www.mysql.com/downloads/index.html
下載安裝MySQL。(參考MySQL在線文檔http://www.mysql.com/documentation/index.html
). MySQL Windows版被安裝到C:\
盤(pán),應(yīng)該使用%MYSQL_HOME%/bin/mysqld -install
注冊(cè)Windows服務(wù).OpenCms能夠使用MySQL 3.2, 4.0和4.1.由于效率原因我們推薦MySQL 4.1,或者最少4.0.
通過(guò)運(yùn)行服務(wù)(WIN32下)或者執(zhí)行
%MYSQL_HOME%/bin/mysqld
(UNIX)啟動(dòng)MySQL服務(wù)器.在繼續(xù)前請(qǐng)通過(guò)啟動(dòng)MySQL監(jiān)視器 (在MySQL安裝目錄的bin文件夾下執(zhí)行
mysql
)測(cè)試MySQL正常運(yùn)行. 數(shù)據(jù)庫(kù)正常工作如果執(zhí)行monitor后出現(xiàn)MySQL提示符 . 鍵入exit退出MySQL監(jiān)視器,繼續(xù)下一步.重點(diǎn): 你應(yīng)該增加MySQL配置文件(通常為
my.ini
)中配置變量max_allowed_packet
的值. 對(duì)于OpenCms, limit應(yīng)該盡可能的高, 推薦設(shè)置:max_allowed_packet=16M
。
4. 部署opencms.war文件
從下載的二進(jìn)制壓縮包ZIP文件中拷貝
opencms.war
文件到CATALINA_HOME/webapps/
目錄下. 使用Tomcat的真實(shí)安裝路徑替換CATALINA_HOME
變量.啟動(dòng)(或重啟)Tomcat. Tomcat現(xiàn)在將部署應(yīng)用OpenCms.
重點(diǎn):確保OpenCms的War包的完整性
*.war
. OpenCms只能以War的方式部署. 確定Tomcat解包war文件并且創(chuàng)建CATALINA_HOME/webapps/opencms/
目錄, 并將OpenCms文件拷貝到這個(gè)目錄. 你的Servlet容器默認(rèn)的配置 / 環(huán)境不能解包*.war
文件.如果這樣請(qǐng)手動(dòng)解包. 對(duì)于解壓縮工具,*.war
文件和*.zip
文件只是擴(kuò)展名不同而已.如果沒(méi)有解包*.war
文件,OpenCms安裝向?qū)@示一個(gè)警告并不允許你繼續(xù)。
5. 使用安裝向?qū)О惭bOpenCms
在瀏覽器中鍵入以下地址
http://localhost:8080/opencms/setup
開(kāi)始安裝. 依賴于你的配置, 你可以替換localhost
為你的服務(wù)名. 端口8080僅僅在以standalone模式啟動(dòng)Tomcat時(shí)使用.遵循OpenCms的安裝想到提示,使用“標(biāo)準(zhǔn)”安裝. 它將建立OpenCms數(shù)據(jù)庫(kù)并倒入所有能夠獲得 的模塊到系統(tǒng)zho能夠. 對(duì)于正常的Mysql和Tomcat安裝在一臺(tái)服務(wù)器上的情況,所有的默認(rèn)設(shè)置都將滿足你的需求.
重點(diǎn): 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.
6. 現(xiàn)在你的系統(tǒng)已經(jīng)就緒
現(xiàn)在你的系統(tǒng)可以使用了. 你可以使用用戶名:
Admin
和密碼:admin
登陸了. 請(qǐng)盡可能快地更改密碼. OpenCms默認(rèn)的登陸URL:http://localhost:8080/opencms/opencms/system/login/
7. 安全提示
在成功安裝OpenCms后,你應(yīng)該檢查一下安全方面的設(shè)置.
首先通過(guò)用戶設(shè)置(Workplace主窗口中“checkbox”圖標(biāo))更改OpenCms用戶
Admin
的密碼.然后給Mysql數(shù)據(jù)庫(kù)添加一個(gè)密碼.在Mysql命令行下敲入如下命令.
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;確認(rèn)替換
opencmsuser
和opencms
以及數(shù)據(jù)庫(kù)你在安裝時(shí)設(shè)置.不要忘記
opencms.properties
文件中添加新的用戶名和密碼. . 只有新的用戶能夠連接大盤(pán)OpenCms表.更多的信息請(qǐng)參閱MySQL文檔.