JBoss-IDE 1.2.2 簡介 (Hibernate) 1:
先要條件:
l 要完成 JBoss-IDE 1.2.2 教程 (http://www.csdn.net/develop/Read_Article.asp?id=25298), 和成功運行當中的例子, FiboBean 和 ComputeServlet
l 對 JBoss, MySQL 和 Hibernate 有一定的認識及下載 Hibernate 2.1.2 (http://prdownloads.sourceforge.net/hibernate/hibernate-2.1.2.zip?download) 和 XDoclet (http://prdownloads.sourceforge.net/xdoclet/xdoclet-bin-1.2.zip?download)
說明:
l 我會繼續用 JBoss-IDE 教程裏的例子, 當中是一個 index.html call ComputeServlet 再 invoke FiboBean 中的計算斐波納契數列 (Fibonacci, 即一種整數數列,其中每數等於前面兩數之和) 的 function (compute). 而應用到 Hibernate 之後, 我會在 compute function 裏找出資料庫 (MySQL – test db) 中相關儲存計算 Fibonacci 結果後的資料 (Table - fibo), 如和輸入要求計算的數字是相同的話, 不用計算而在資料庫中拿取資料作為結果. 如不同即會清空資料庫中的資料, 再重新計算和存入資料庫中.
步驟:
1. 我會用 MySQL 創建一個 table 來儲存計算斐波納契數列的結果, 首先我會創建一個資料庫名命為 ‘test’, 再創建一個 table 名命為 ‘fibo’, 而 ‘fibo’ 只有兩個 fields, 一是 id (varchar, PK), 一是 value (double). 最後在 JBoss 的 default server 中設定這個 MySQL – test 的 DataSource.
2. 下載 Hibernate 2.1.2 後請參考網上有關怎樣設定 Hibernate 在 JBoss 裏的 sar 服務運行教程 (http://www.hibernate.org/66.html - 筆者按: 這條 link 好像死了, 不敢肯定, 可能Hibernate 已投入 JBoss 中, 而 Hibernate 會在 4.0 的版本取代 CMP, 所以其實這篇簡介不是太有用, 只可當作參考.) 和 (http://nemesisit.rdsnet.ro/opendocs/ejbhibernate.html). 複製 Hibernate 根目錄中的 hibernate2.jar 和 lib 資料夾中的 ‘cglib-2.0-rc2.jar’, ‘commons-collections-2.1.jar’, ‘commons-lang-1.0.1.jar’, ‘commons-logging-1.0.3.jar’, ‘dom4j-1.4.jar’, ‘jcs-1.0-dev.jar’, ‘odmg-3.0.jar’, 到 JBoss default server 的 lib (%JBOSS_HOME\server\default\lib) 資料夾中. 完成後到 XDoclet, 下載後爆開它, 複製其 lib資料夾中的 ‘xdoclet-hibernate-module-1.2b4.jar’ 到 eclipse資料夾中的 \plugins\org.jboss.ide.eclipse.xdoclet.core_1.2.2\ 資料夾裏, 因為這是外加 module 在 XDoclet 裏, 所以記得在 JBoss-IDE 的 XDoclet Configure 中更新一下 XDoclet modules 和 data.
3. 用 eclipse (我是用 2.1) 開啟 JBoss-IDE 教程裏 tutorial 的 project, 右擊 tutorial project, 選 ‘Properties’.
然後選 ‘Java Build Path’ -> ‘Libraries’ -> ‘Add External JARs’, 選 JBoss default folder 裏的 ‘lib’ (%JBOSS_HOME%\server\default\lib\), 選 ‘hibernate2.jar’, 按 ‘開啟’再按 ‘OK’.
4. 現在根據 Hibernate 跟來的教程來創建一個 HibernateUtil Class. 首先右擊 tutorial project -> ‘New’ -> ‘Class’, ‘Package’ 填入 ‘tutorial.hibernate’, Name 填入 ‘HibernateUtil’, 再按 ‘Finish’, 而代碼如下:
package tutorial.hibernate;
import javax.naming.Context;
import javax.naming.InitialContext;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.HibernateException;
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
Context ctx = new InitialContext();
sessionFactory = (SessionFactory) ctx.lookup("java:/hibernate/HibernateFactory");
}
catch (Exception e) {
e.printStackTrace();
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException {
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}