2010年5月29日 星期六
2010年5月24日 星期一
2010年5月2日 星期日
2010年4月11日 星期日
2009年8月21日 星期五
2009年4月11日 星期六
java.util.logging.Logger 的使用方式
http://java.sun.com/j2se/1.5.0/docs/
另外, 關於 Logger 的部分, 請參考以下連結,
http://java.sun.com/j2se/1.5.0/docs/guide/logging/overview.html
Logger Sample01:
public class SimpleLogger01 {
public static void main(String[] args) {
// 因為使用了Logger類,所以需要匯入java.util.logging.Logger
Logger logger = Logger.getLogger(SimpleLogger01.class.getName());"
// 因為使用了Level類,所以需要匯入java.util.logging.Level
logger.log(Level.INFO, "this is a info");
}
}
Logger Sample02:
public class SimpleLogger02 {
public static void main(String[] args) {
Logger parentLog = Logger.getLogger(SimpleLogger02.class.getName());
parentLog.log(Level.INFO, "this is a info");
// 設定 parentLog 的 Level 為 WARNING,
parentLog.setLevel(Level.WARNING);
// 以 parentLog 為範本 建立新的 childLog, childLog 將會繼承 parentLog 所有特性
Logger childLog = Logger.getLogger(SimpleLogger02.class.getName());
// 因為繼承的關係, childLog 的 Level 為 WARNING, 所以INFO記錄不會被發布
childLog.log(Level.INFO, "this is a child.info");
childLog.log(Level.WARNING, "this is a child.warning");
}
}
Logger Sample03:
public class SimpleLogger03 {
public static void main(String[] args) {
Logger logger = Logger.getLogger(SimpleLogger03.class.getName());
logger.log(Level.INFO, "this is a info");
logger.setLevel(Level.WARNING);
try {
// 因為使用了FileHandler類, 所以需要匯入java.util.logging.FileHandler
// %t = System.getProperty("java.io.tmpdir") 路徑
FileHandler fileHandler = new FileHandler("%t/"+SimpleLogger03.class.getSimpleName()+".log");
logger.addHandler(fileHandler);
// 因為在<
// 這裡用 FileHandler 替換 ConsoleHandler
} catch (IOException e) {}
// 請注意看輸出的日誌, 日誌檔案中看到的輸出格式為XML格式
Logger childLog = Logger.getLogger(SimpleLogger03.class.getName());
childLog.log(Level.INFO, "this is a child.info");
childLog.log(Level.WARNING, "this is a child.warning");
}
}
2009年2月26日 星期四
20090221 課程回饋
學習心得:
1. JPA 技術 免去過去繁瑣的 hbm.xml 的設定 所造成 手誤,快速增加開發速度。
2. ORM 的實踐 必須 完全放棄 ERM 的設計思維 還有使用的設計技巧 這些會造成ORM 設計上得錯誤。
3. Persistance 建立的 EntiyManagerFactory instance object 有 thread safe 的設計,但是它所建立的 instance object 本身並沒有 thread Safe 的設計,這容易遭成應用上的疏忽。
4. Unit test 提高軟體的品質。不是靠最後辛苦的亡羊補牢,而是 開發過程中 經過設計且綿延的測試才可產出有品質的軟體。
5. 這次上課有發現 JPA 的一些功能,如:getReference 提升效能的方法,另外對於JPA 的 Annotation 感覺有滿有用的,如果有自訂錯誤訊息的功能就更好了
6. 在這次的課程中 我有提出 客戶端老是喜歡變動資料庫的動作,比如說倒資料進DB,這部分在有id的Table且有關聯的狀況下 會死得很慘,如果客戶的資料庫不得不變動的情況下或許所上的課程會不敷使用
改善建議:
1. 多點討論!類似像 head first 系列的書列出的問題 相當有意思
2. 這次課程比較接近給用過hibernate並且要轉JPA的人來上 若是沒有用過 hibernate的人來上課 可能會不易聽懂
3. 這次的課程 雖然很清楚的講了JPA的實作, 但是對於開發大型專案的時候較容易遇到效能的問題 如果能夠有多一些多層次資料的提升效能的寫法,將會是有很大的幫助(PS 這點僅供參考)
學習方向:(近來發現的學習方向,如果學會了,對我們這個團隊應該有幫助)
1. JPA 和 Annotation 的應用 AOP 的開發概念。
2. Unit test 專案中使用的測試案例 與實際UI建立後 所作的測試 其 前期測試與後期測試 誤差太高。
3. 因為我本身會 hibernate 的技術,學完JPA後 覺得JPA是對於hibernate的upgrade,又加深對於資料庫存取的了解,也多了一點對Annotation的應用方面更多的思考,若是再有新專案開發,希望能夠將 JPA 搭配使用Annotation來檢核Business Object,如果再利用Annotation把多國語言也做出來,一定會讓開發更是快速且簡單
2008年12月26日 星期五
JPA - persistence.xml 設定問題
答案是在設定檔案當中加上一行 <exclude-unlisted-classes>,參閱以下範例
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="sample">
<class>sample.Bean1</class>
<exclude-unlisted-classes/>
</persistence-unit>
</persistence>
2008年12月17日 星期三
EJB3 入門案例 <3>
2008年12月8日 星期一
EJB3 入門案例 <1>
環境配置如下:
1. Eclipse IDE 開發工具,
2. JBOSS v5.0 Application Server 做為 EJB Container
開發步驟如下:
2008年12月1日 星期一
Flexing with JavaEE <1>
Turnkey 版本含 Tomcat, 如果懶得設定, 可以用這版本。
2. 安裝 BlazeDS
3. 確認安裝結果
4. 設計 Presentation tier, UI layout
5. 設計 Business tier, Domain Model
6. 設計 Business tier, Services Facade
7. 開發 Model 層 JAVA 程式並利用 JUNIT 完成 Unit Test
8. 開發 View & Controller 層 Flex 程式, 並緩步測試
9. 重構 Model View Presentation
2008年11月14日 星期五
加解密技術入門
如果您要知道怎樣用 Java 語言去開發相關的程式,這篇簡報將是有用的入門資料,這當中提到的程式包括:
1. 單向加密(不可逆)
2. 對稱式加密(可逆)
3. 非對稱式加密
4. 數位簽章
提醒一:要提醒各位的是,關於安控的議題不僅僅是簡報當中報告的這些,還有:使用者身分驗證、URL 驗證、Access Control List、Data Access Control、Logging、Exception Handling、Security Session...等議題都跟安控有關,市面上許多 AP Server 都有提供相關的 API,也還有許多環節被忽略掉,但還是有許多的安全漏洞,如果你要開發嚴謹的系統,建議你可以從這些面向去思考。 ^_^
提醒二: Session Id 是很嚴重的安全漏洞,尤其現在的 RIA/AJAX 當道,正種情況又更加嚴重了,怎說呢?登入系統前駭客程式可以把 session id 擷取下來,等你登入系統取得授權後,駭客程式便可以使用該 session id 去模擬授權成功後的所有作業,這過程中完全不用知道使用者的帳號 & 密碼...
2008年11月12日 星期三
ORM 繼承與複合鍵設計
1. 父類別是抽象類別,父類別已定義 主鍵 = 序號
2. 有兩個子類別繼承
3. 子類別的 主鍵 = 子類別型態 + 父類別序號
要怎樣用 hibernate 的 ORM 實現這種設計?
以下是我的答覆:首先須了解 ENTITY_TYPE 代表類別型態這件事的定義,我猜測 ParentEntity, Child1Entity, Child2Entity 裡頭有有對應的 entityType 屬性,如果答案是肯定的,我就不會用 <discriminator column="ENTITY_TYPE" type="string" length="10" /> 這樣的設定去識別子類別,我會用以下的 ORM 方式去設計
<discriminator column="CLASS_TYPE" type="string" length="10" />
<property name="entityType" column="ENTITY_TYPE" />
<subclass name="Child1Entity" discriminator-value="Child1">
...
</subclass>
<subclass name="Child1Entity" discriminator-value="Child2">
...
</subclass>
如果ParentEntity, Child1Entity, Child2Entity 裡頭沒有對應的 entityType 屬性,那麼複合鑑的問題又要怎樣處理? 這部分有幾種選項
1. 採用 hibernate 提供的 composite-id 設定方式
2. 由物件負責處理,以 ParentEntity 為例
class ParentEntity {
String serial;
String entityType;
public String getSerial() {
return serial;
}
public String getEntityType() {
return tokenType;
}
public String getEntityId() {
return getEntityType()+getSerial();
}
protected void setEntityId(String eid) {
// do nothing
}
}
其 ORM 可以宣告如下
<id name="entityId" column="ENTITY_ID" length="128"/>
3. 另外寫一個 EntityID 產生程式
不知道各位是否有其他見解? 歡迎加入討論
2008年11月3日 星期一
Spring MVC
後語:最近 Spring 又發行了新版,有興趣的人可以去下載,有趣的是,Spring 似乎不再是輕量級...這種發展,是否合乎 Spring framework 的初衷?這種發展是宿命?你會採用哪種觀點...
2008年10月28日 星期二
Hibernate Entity Manager / JPA Annotation
包括:
1. 單一物件
2. 一對一關聯
3. 一對多關聯
4. 多對多關聯
5. 繼承關係
相關資訊:Test Driven Development(TDD)
2008年10月21日 星期二
Hibernate Entity Manager / ORM
包括:
1. 單一物件
2. 一對一關聯
3. 一對多關聯
4. 多對多關聯
透過案例展示, 方便大家日後查詢之用, 強調一下, 寫好的程式必須"通過測試才能算是真正完成"
需要完整的範例程式? 連同你的建議寄送到我的信箱! 歡迎各位提供建議 ^_^
相關資訊:Test Driven Development(TDD)