顯示具有 程式開發 標籤的文章。 顯示所有文章
顯示具有 程式開發 標籤的文章。 顯示所有文章

2010年5月29日 星期六

Web Services using AXIS2 - 04 - SSL Transport Security with basic auth.

Web Services using AXIS2 - 04 - Enforce SSL Transport Security

Web Services using AXIS2 - 04 - SSL Transport Security

2010年5月24日 星期一

2010年5月2日 星期日

2010年4月11日 星期日

2009年8月21日 星期五

2009年4月11日 星期六

java.util.logging.Logger 的使用方式

關於 Java 核心與相關 API 的使用, 各位可以參考以下網址
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);
            // 因為在<>\jre\lib\logging.properties 預設了ConsoleHandler, 一般情況下可在控制台看到日誌
            // 這裡用 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 課程回饋

2009/02/21 JPA(Java Presistence API)課程後,節錄以下回饋資訊

學習心得:
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 設定問題

題目是沒設定在 persistence.xml 當中的 class,系統還是會自動 load 並產生對應的 DB 欄位,要怎樣排除呢?
答案是在設定檔案當中加上一行 <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>

前一篇 EJB3 入門案例 <2> 說明了 Stateless Session Bean 的生命週期與 AOP 處理方式, 這篇報告說明了 EJB 跟 JPA(Java Persistence API)之間的整合與開發案例, 也是最常見的 EJB 應用基礎, 希望能帶大家進入更實用的領域.

2008年12月8日 星期一

EJB3 入門案例 <2>

說明 Stateless Session Bean 的生命週期, 並對入門案例<1> 進行重構, 用代理機制包中 Remote EJB, 讓 遠端 Client 可以很方便地利用, 詳細資訊請參考以下簡報:

EJB3 入門案例 <1>

關於 EJB3 的理論部分仿間有很多參考資料, 各位可以參考 Mastering Enterprise JavaBeans 3.0一書, 這份簡報採取的是實務觀點, 用實際案例逐步前進, 希望能讓大家更快入門

環境配置如下:
1. Eclipse IDE 開發工具,
2. JBOSS v5.0 Application Server 做為 EJB Container

開發步驟如下:

2008年12月1日 星期一

Flexing with JavaEE <1>

1. 下載 BlazeDS
    Turnkey 版本含 Tomcat, 如果懶得設定, 可以用這版本。
    Binary Distribution 則是讓已經有 App. Server 或者其他非 Tomcat 的用, 目前我用的是這版, 因為我的 App. Server 是 JBOSS。
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日 星期五

加解密技術入門

加解密技術(Cryptography)有許多種,仿間也有很多相關的書籍介紹,如果您想了解理論部分,例如:Cryptographic Message SyntaxPublic key infrastructure...,請善加利用搜尋引擎

如果您要知道怎樣用 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 繼承與複合鍵設計

客戶用 hibernate 實做中提出一個關於繼承與複合鍵的問題,題目是這樣的:
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 IoC & AOP 基本概念與運作原理, 同時介紹 Spring MVC 的簡單用法



後語:最近 Spring 又發行了新版,有興趣的人可以去下載,有趣的是,Spring 似乎不再是輕量級...這種發展,是否合乎 Spring framework 的初衷?這種發展是宿命?你會採用哪種觀點...

2008年10月28日 星期二

Hibernate Entity Manager / JPA Annotation

ORM 除了用 xml 設定方式之外, 例一種方式就是用 @annotation, 這裡一樣透過案例展示, 直接示範幾種常用的關聯
包括:
1. 單一物件
2. 一對一關聯
3. 一對多關聯
4. 多對多關聯
5. 繼承關係



相關資訊:Test Driven Development(TDD)

2008年10月21日 星期二

Hibernate Entity Manager / ORM

使用過 hibernate 開發程式的人, 都會碰到 ORM 的問題, 這份簡報整理了常用的關聯案例,

包括:
1. 單一物件
2. 一對一關聯
3. 一對多關聯
4. 多對多關聯

透過案例展示, 方便大家日後查詢之用, 強調一下, 寫好的程式必須"通過測試才能算是真正完成"



需要完整的範例程式? 連同你的建議寄送到我的信箱! 歡迎各位提供建議 ^_^

相關資訊:Test Driven Development(TDD)

2008年9月3日 星期三

JAVA 軟體開發基準

團隊合作就像參加一場盛會, 每個人都被賦予特殊任務, 也都要演活自己的角色, 但, 如果大家沒有相同的舞台, 這場戲要如何演下去?

基於團隊合作的需要, 建議開發團隊應該要有一套共通的作業基礎, 也就是遊戲規則, 你的團隊是否有一套遊戲規則呢? 如果沒有, 或許可以參考這裡!!!