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

Hibernate JNDI 綁定機制深度解析

     編輯:關於JSP

Hibernate SessionFactory JNDI 綁定流程

Hibernate 的 JNDI 名稱綁定是在 net.sf.hibernate.impl.SessionFactoryObjectFactory 中實現的。以下是詳細調用鏈分析:

1. 獲取 SessionFactory 的典型代碼

Configuration conf = new Configuration().addClass(Cat.class);
SessionFactory sf = conf.buildSessionFactory();

2. 關鍵步驟解析

  • Configuration 構造器:讀取 hibernate.properties,屬性保存到 Properties 對象。與 JNDI 相關的關鍵屬性:hibernate.session_factory_name(默認值 hibernate/session_factory)。
  • buildSessionFactory():檢查配置後調用 SessionFactoryImpl 構造器,其中執行:
    name = properties.getProperty(Environment.SESSION_FACTORY_NAME);
    SessionFactoryObjectFactory.addInstance(uuid, name, this, properties);
  • SessionFactoryObjectFactory.addInstance():最終執行綁定邏輯:
    Context ctx = NamingHelper.getInitialContext(properties);
    NamingHelper.bind(ctx, name, instance);
    其中 instance 即 SessionFactory 實例。

3. 關鍵結論

Hibernate 在 conf.buildSessionFactory() 時,通過一系列類方法調用,將創建的 SessionFactory 實例綁定到配置文件指定的 JNDI 名稱上。Hibernate 具備動態綁定 JNDI 的能力,但前提是必須預先創建 SessionFactory 實例,且該過程必須在所有從 JNDI 獲取 SessionFactory 的程序之前完成。

4. 應用服務器中的預創建策略

  • Servlet 環境:配置一個初始化 Servlet,在 init() 中執行創建代碼。
  • EJB/J2EE 複雜應用:依賴應用服務器的啟動機制(如 WebLogic 的 T3StartupDef)保證預創建。

對於任何 App Server,開發者無需關心 JNDI 綁定細節,只需確保 SessionFactory 實例預先創建即可,其餘工作 Hibernate 自動完成。

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