Hibernate 是「物件/關係對應」(Object/Relational Mapping)的解決方案,簡寫為 ORM,簡單的說就是將 Java 中的物件與物件關係,映射至關聯式資料庫中的表格與表格之間的關係, Hibernate 提供了這個過程中自動對應轉換的方案。
2001 年未 Hibernate 第一個版本發表,2003年6月8日 Hibernate 2 發表,並於年未獲得 Jolt 2004 大獎,後被 JBOSS 收納而成為其子項目之一,2005年3月 Hibernate 3 正式發表,當中有了一些重大的改變,這份文件將以之前 Hibernate 2 時撰寫的文件為基礎,針對 Hibernate 3 作重新整理的動作,所使用的版本為 Hibernate 3.2。
在撰寫 Hibernate 程式的過程中,我們可以粗分四大步驟(1~4) 與二大檔案(5、6),依序是 :
1. Configuration:
1.1. 透過 Configuration File (hibernate.cfg.xml) 設定與 Database 連線的方式與設定要匯入哪些 Mapping File。
1.2 (JavaEE 環境) 透過 JNDI Service 來註冊 org.hibernate.SessionFactory 成為 Global 物件。
1.3 (JavaEE 環境) 設定 AP Server 所提供的 Transaction 的功能。
1.4. 透過 org.hibernate.cfg.Configuration 的 configure() mathod 來讀取 Configuration File。
1.5 透過 org.hibernate.cfg.Configuration 的 buildSessionFactory() 來產生 下一步驟要用到的 org.hibernate.SessionFactory 。
2. SessionFactory:
2.1 一個 org.hibernate.SessionFactory 只對應到一個 Database
2.2 必須在程式要使用之前就必須建立好 SessionFactory,因為需要一點時間才能建立,所以最好是在網站或程式初始化時就去建立,至少必須在程式開始接觸 Database 之前就要建立。
2.3 必須放在所有程式都可以取用到地方 ( 有 JNDI 就註冊到 JNDI 中, 如果沒有 JNDI, 且是Web Apps, 也可以註冊在 ServletContext)。
2.4 org.hibernate.SessionFactory 會 catch 執行 Hibernate 所產生的 SQL statement 和 Database 的 metadata。
2.5 org.hibernate.SessionFactory 是 thread-safe 物件,會自己處理 multi-thread。
2.6 透過 org.hibernate.SessionFactory 的 openSession() 或是 getSession() 來 產生/取得 下一步驟要用到的 org.hibernate.Session。
3. Session:
3.1 org.hibernate.Session 包含了 JDBC 的 Connection object。
3.2 所以可以視為 Hibernate 與 Database 之間溝通的橋樑、過程。
3.3 org.hibernate.Session 可以提供 org.hibernate.Transaction object
3.4 所以存取 Persistent Class 都需要透過 org.hibernate.Session 。
4. Transaction:
4.1 org.hibernate.Transaction 將真正在底層執行 Transaction service包裝起來,
在 J2EE 中使用 JTA 的 UserTransaction 服務多個 Database (ex: 轉帳);或利用 J2SE 中 JDBC 的 Transaction 來服務一個 Databae。
4.2 在 Hibernate 3.x 中,存取 Persistent Class 的動作一定要包在 org.hibernate.Transaction 的可視範圍之中。
例如:Transaction transaction = session.beginTransaction();
存取 Persistent Class ...
......
transaction.commit();
5. Persistance Class:
5.1 最好是 JavaBeans 的架構。
5.2 使用 Hibernate 來處理的 Table 一定要有 primary key,且對應到 Java Class 中的 欄位與 setter,為了避免誤改,所以都應該宣告為 private 屬性。primary key 是獨一無二的 id,所以在選定時最好避免與目前專案相關性太高的欄位,應儘量使用流水號。
5.3 不要使用 final。Hibernte 會自動為每個 Persistent Class 產生各自的 proxy,但 proxy 會繼承 Persistent Class,所以一旦設為 final,將會限制 proxy 所提供的功能。
5.4 要小心處理 Persistent Class 的三種狀態:
transient : 尚未跟 Persistent Context 接觸。( 與 Session 沒有關係的狀態 )
persistent : 正在跟 Persistent Context 接觸。
detached : 以前曾經跟 Persistent Context 接觸,但現在分開了。
6. Hibernate Mapping File:
6.1 每一個 Persistent Class 都會有自己的 Mapping File,以維護 Table 與 Persistent Class 的對應關係。
6.2 Mapping File 的副檔名為 .hbm.xml。
6.3 Mapping File 的存放位置必須跟所對應的 Persistent Class 的目錄相同。
6.4 在使用 Mapping File 之前必須註冊到 Configuration file 中,通常使用靜態的方法,直接寫入 hibernate.cfg.xml 中。
閱讀全文...
JSP 2.0最重要的變革之一,便是將Expression Language(以下簡稱EL)整合進JSP標準規格,EL並非全新的語言,最早出現於JSTL 1.0當中,被用來簡化資料存取的相關作業。
由於EL已是JSP的標準,因此你可以選擇直接在JSP網頁當中使用EL替代Java進行資料的存取操作。
EL有其專屬的一套語法,包含了兩項基本要素:變數與運算子。變數用來儲存各種型態的資料,運算子則是資料運算符號。儘管EL是為了特定目的而發展出來的一個特殊語法,然而相較於其他的程式語言的變數與運算子,它們的意義是相同的。對於EL而言,變數是一個儲存了特定資料的符號,EL可以直接對其作存取,或是結合運算子進行必要的運算之後作輸出。
EL另外還有一組內建的預先定義隱含物件(implict variables),它們以Java集合物件的型態出現,其中儲存了網頁的各種資訊,包含session、cookie以及網頁傳輸過程當中所使用的參數值。EL的語法相當簡潔,為了與其他的網頁元素作區隔,EL必須以一個金錢表示符號加上左大括弧${開始,並且以右大括弧}作結束。
閱讀全文...
網際網路的普及讓我們對於新技術與新資訊的取得比起以往更為快速,甚至,目前還有研究透過網路搜尋引擎來進行病歷的判斷等,電子郵件與網頁服務是網際網路快速成長的兩大應用推手,一個是讓我們節省了許多書信往返的時間便可以即時和遠方的朋友或是客戶進行聯繫,一個是讓我們可以將訊息快速的散播到世界各地去。而Apache網頁伺服器是目前最受歡迎的網頁伺服器之一,他有著低成本與高穩定的特性讓許多網管人員都十分的喜愛。
透過openSUSE Linux 11中的YaST控制中心來組態網頁伺服器,是一件十分輕鬆的工作。點選[電腦]->[YaST]->[網路服務]->[HTTP伺服器]來啟動[HTTP伺服器]模組。
步驟一:
先選擇那些網路設備介面要提供網頁伺服器的服務,預設系統會將所有的網路設備介面勾選,並以80埠作為主要的服務埠號。
步驟二:
接著可以針對HTTP伺服器欲支援的額外模組進行設定,預設在組態精靈介面中僅提供四種模組共讀者選擇,其它的模組可以於完成精靈組態程式後再進行設定:
1.啟用PHP5程序檔支援:開啟HTTP伺服器支援執行透過PHP5所撰寫的檔案。
2.啟用Perl程序檔支援:開啟HTTP伺服器支援執行透過Perl所撰寫的檔案。
3.啟用Python程序檔支援:開啟HTTP伺服器支援執行透過Python所撰寫的檔案。
4.啟用Ruby程序檔支援:開啟HTTP伺服器支援執行透過Ruby所撰寫的檔案。
步驟三:
接著,HTTP伺服器組態精靈將會建立一個預設主機組態檔。
步驟四:
剛才所產生的基本功能組態檔案,對於目前的操作過程中已經足夠我們使用了,在第四步驟中將會進入虛擬主機的建置畫面。
步驟五:
HTTP伺服器組態精靈會將剛才的設定再進行條列檢視,記得將HTTP伺服器設定於每次啟動主機時一併啟動。確認無誤後請點選[完成]來結束HTTP伺服器的基本組態。
閱讀全文...
基本上一個電子郵件的傳遞需要透過幾個必要的元件程式才能夠完成,包含:
郵件使用者代理程式(Mail User Agent,MUA) - 意指一種可以供使用者撰寫郵件、回覆郵件、讀取郵件與處理郵件的程式。通常於Linux作業系統上會提供兩種型態的MUA程式,分別為:
圖形介面的MUA,例如:Thunderbird等。
命令列型態的MUA,例如:透過Linux作業系統內的指令工具來完成郵件的處理工作,例如:/usr/bin/mutt或是/usr/bin/mail。
郵件傳輸代理程式(Mail Transfer Agent,MTA) - 則是一種專門用來傳遞郵件的程式,就像傳統郵電傳遞中的郵局角色一樣負責郵件的傳遞。通常在單一台電子郵件伺服器上僅可以使用一種MTA程式,MTA程式在收到電子郵件時,會先讀取郵件中收件者的欄位資訊,並且確定收件者的位址是否存在。然後再透過通訊埠與收件者的郵件伺服器進行連線,如果這個連線可以建立時,則會透過簡易電子郵件傳輸通訊協定(Simple Mail Transfer Protocol,SMTP)將郵件傳遞到收件者的MTA。
郵件傳遞代理程式(Mail Delivery Agent,MDA) - 便是將從MTA收到的郵件,將這些郵件依據使用者名稱來識別放置於每個使用者的郵件信箱檔案(Mailbox)中。或者是透過MDA再將郵件傳遞到其它的MTA,除了分派郵件的功能之外,MDA程式還可以具備郵件過濾等功能。
常見電子郵件通訊協定介紹
簡易電子郵件傳輸通訊協定(Simple Mail Transfer Protocol,SMTP) - 用於傳遞電子郵件訊息時所使用的一種TCP/IP協定,使用TCP埠25作為主要的通訊埠號,透過這個傳輸協定可以讓電子郵件於MTA之間移動。雖然SMTP本身不支援非ASCII文字的傳輸,但是我們可以透過多用途網際網路郵件延伸(Multipurpose Internet mail Extension,MIME)這個通訊協定來協助處理非ASCII文字的傳輸。
郵局通訊協定第三版(Post Office Protocol Version 3,POP3) - 會在網路連線時不斷的檢查是否有新的郵件進入,並且將這些郵件儲存於伺服器上,並且使用TCP埠110作為主要的通訊埠號。另外,POP3也有提供另一個支援SSL加密的版本稱之為POP3S。
網際網路訊息存取通訊協定第四版(Internet Message Access Protocol Version 4,IMAP4) - IMAP4與POP3通訊協定都是提供用戶端存取存放於伺服器上郵件最常使用的協定之一,但是IMAP4提供更多功能來協助使用者透過協定來存取郵件。其中,這兩者間最大差異在於,POP3通訊協定會於MUA存取郵件訊息時便將郵件下載至本地端上,並且刪除伺服器端上儲存的郵件,且每次僅允許一個使用者進行存取。而IMAP4則允許電子郵件可以永久儲存於遠端伺服器上,並且可以從任何地方來讀取這些郵件,且支持多個用戶同時連接到一個郵件信箱上。
閱讀全文...