首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

WebLogic 整合 Hibernate 綁定 JNDI 完整設定指南

     編輯:Java 相關知識

在 WebLogic 等 J2EE 容器中部署 Hibernate,應將 SessionFactory 綁定至 JNDI,讓 EJB、Servlet 透過 JNDI Lookup 共享同一個 SessionFactory,並配合容器管理交易 (CMT) 使用容器提供的 DataSource。本文詳細說明設定步驟。

1. 類別路徑設定

修改 Domain 下的 startWebLogic.cmd,在啟動命令前插入 Classpath 設定:

@rem set hibernate classpath
set HIBERNATE_LIB=D:\test\oracle\lib
set HIBERNATE_CLASSES=D:\test\oracle\classes
set CLASSPATH=%HIBERNATE_LIB%\cglib-asm.jar;%HIBERNATE_LIB%\commons-beanutils.jar;%HIBERNATE_LIB%\commons-collections.jar;%HIBERNATE_LIB%\commons-lang.jar;%HIBERNATE_LIB%\commons-logging.jar;%HIBERNATE_LIB%\dom4j-full.jar;%HIBERNATE_LIB%\hibernate2.jar;%HIBERNATE_LIB%\jcs.jar;%HIBERNATE_LIB%\log4j-1.2.8.jar;%HIBERNATE_LIB%\odmg.jar;%HIBERNATE_CLASSES%;%CLASSPATH%

@rem Call Weblogic Server
call "C:\bea\weblogic700\server\bin\startWLS.cmd"

確保所有 Hibernate 相關 JAR、專案編譯類別與設定檔 (hibernate.properties, log4j.properties) 皆在 Classpath 中。

2. 設定 WebLogic 連線池與 DataSource

  1. WebLogic Console → Connection Pools → 新建 Oracle 連線池。
  2. Tx Data Sources → 新建 Tx Data Source,指向上述連線池,JNDI 名稱設為 mypool。

使用 EJB/CMT 時,必須使用 WebLogic 提供的 Tx DataSource,不可使用 Hibernate 內建或第三方連線池,否則容器無法管理資料庫交易。

3. 修改 hibernate.properties 使用容器 DataSource

hibernate.dialect net.sf.hibernate.dialect.OracleDialect
hibernate.connection.datasource mypool
hibernate.connection.provider_class net.sf.hibernate.connection.DatasourceConnectionProvider
hibernate.session_factory_name hibernate.session_factory

# 效能調校參數
hibernate.jdbc.fetch_size 50
hibernate.jdbc.batch_size 25

hibernate.session_factory_name 在 WebLogic 中需用點號 hibernate.session_factory,但程式碼 Lookup 時仍用斜線 hibernate/session_factory。

4. 建立啟動類預先綁定 SessionFactory

實作 weblogic.common.T3StartupDef,在 WebLogic 啟動時建立 SessionFactory,Hibernate 會自動綁定至 JNDI。

package com.fankai;

import java.util.Hashtable;
import weblogic.common.T3StartupDef;
import weblogic.common.T3ServicesDef;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.SessionFactory;

public class HibernateStartUp implements T3StartupDef {
  public void setServices(T3ServicesDef services) {}

  public String startup(String name, Hashtable args) throws Exception {
    Configuration conf = new Configuration().addClass(Cat.class); // 替換為實際實體類別
    SessionFactory sf = conf.buildSessionFactory();
    return "Hibernate Startup completed successfully";
  }
}

5. 編譯並部署啟動類

編譯時需引入 weblogic.jar 及所有 Hibernate 相關 JAR。將編譯產生的 HibernateStartUp.class 放入已加入 Classpath 的目錄 (如 D:\test\oracle\classes)。

6. Console 註冊啟動類

  1. Console → Startup & Shutdown → Configure a new Startup Class。
  2. Name 隨意,Class Name 填 com.fankai.HibernateStartUp,Apply。
  3. Targets 分頁,將 myserver 移至 Chosen,Apply。

7. 驗證 JNDI 綁定

  1. 重啟 WebLogic,觀察 Console 輸出 Hibernate 初始化訊息。
  2. Console → Servers → myserver → View JNDI Tree。
  3. 應見到 hibernate 節點,下掛 session_factory,類別為 net.sf.hibernate.impl.SessionFactoryImpl。

8. 程式碼中取得 SessionFactory

Context ctx = new InitialContext();
SessionFactory sf = (SessionFactory) ctx.lookup("hibernate/session_factory");

移植至其他 App Server

本質相同:確保在應用啟動前執行 Configuration().buildSessionFactory(),並設定 hibernate.session_factory_name 為該容器 JNDI 命名規則的名稱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved