1. 程式人生 > >提高Hibernate 3 啟動速度

提高Hibernate 3 啟動速度

在Tomcat5.5.x環境下,呼叫Configuration().addCacheableFile來載入配置,建立Hibernate SessionFactory,成功地提高了載入速度。

推薦你只是在開發階段採用這樣的方式載入,最後的產品釋出階段你仍需使用經典的Hibernate.cfg.xml檔案,通過Tomcat的ServletContextListener API在應用程式部署的時候建立Hibernate SessionFactory,而不是在程式第一次呼叫Hiberante的時候。

檔案:

net/netbauds/catalina/IHibernateCachableFileLoad.java

這個檔案可以在不同的web應用中使用而不用作任何修改。

package  net.netbauds.catalina;

import  org.hibernate.cfg.Configuration;

public   interface  IHibernateCachableFileLoad {

     public   void  addMappings(Configuration conf);

}

net/netbauds/catalina/HibernateSessionFactory.java

使用靜態方法HibernateSessionFactory.getSessionFactory() 來代替我們以前使用的Configuration().configure().buildSessionFactory(),這個方法一般在你的HibernateSession單態類中(參考

http://www.hibernate.org/114.html)。

這個檔案也可以在不同的應用中使用而不加任何修改:

package  net.netbauds.catalina;

import  org.hibernate.SessionFactory;

import  org.hibernate.cfg.Configuration;

//  單態的 sessionFactory

public   class  HibernateSessionFactory {

     private   static  SessionFactory sessionFactory;

     public   static  SessionFactory getSessionFactory() {

         //  不要從 JNDI中獲取SessionFactory, 使用一個靜態的 SessionFactory

         if  (sessionFactory  ==   null ) {

            Configuration conf  =   new  Configuration();

             try  {

                Class klass  =  Class.forName( " config.HibernateCachableFileLoad " );

                IHibernateCachableFileLoad hibConf  =  (IHibernateCachableFileLoad) klass.newInstance();

                hibConf.addMappings(conf);

            }  catch  (ClassNotFoundException e) {

                 //  NOOP

            }  catch  (InstantiationException e) {

                 //  NOOP

            }  catch  (IllegalAccessException e) {

                 //  NOOP

            }

            Configuration confdone  =  conf.configure();

             if (confdone  !=   null ) {

                 //  Use default hibernate.cfg.xml

                sessionFactory  =  confdone.buildSessionFactory();

            }

        }

         return  sessionFactory;

    }

}

config/HibernateCachableFileLoad.java

這個檔案是隨web應用的不同而不同的,你需要修改程式碼中的某些部分使其適合你的應用。應該有人知道如何更容易的由class loader獲得WEB-INF/classes的絕對路徑吧,這裡我只是把它直接寫入了程式中。

你需要修改如下部分:

* 將你所有的Hibernate對映配置檔案(*.hbm.xml)加入到程式中(正如你在Hibernate.cfg.xml中所做的)。

package  config;

import  net.netbauds.catalina.IHibernateCachableFileLoad;

import  org.hibernate.cfg.Configuration;

//  This class is webapp specific and allow loading of mapping via

//   addCachableFile();

public   class  HibernateCachableFileLoad  implements  IHibernateCachableFileLoad {

     public   void  addMappings(Configuration conf) {

        doFile(conf,  " com/mydomain/MyClassFile001.hbm.xml " );

        doFile(conf,  " com/mydomain/MyClassFile002.hbm.xml " );

    }

     private   void  doFile(Configuration conf, String resPath) {

        String path  =   null ;

        URL u  =   this .getClass().getClassLoader().getResource(resPath);

         if (u  !=   null ) {

            path  =  u.getFile();

             if (path  !=   null )

                conf  =  conf.addCacheableFile(path);

        }

         if (path  ==   null   ||  conf  ==   null )

            System.err.println( " ERROR: Failed to load:  "   +  resPath);

    }

}

hibernate.cfg.xml

這將使我們標準的hibernate.cfg.xml發生一些變化。如果你使用的是hibernate-configuration-3.0.dtd(3.0版本),那麼你可以不寫入任何mapping元素。

如果你使用的是老版本的dtd,那麼你需要在hibernate.cfg.xml中寫入一個mapping元素。

An alternative way maybe to programatically configure the connection.datasource in the HibernateSessionFactory() above and maybe hibernate will allow you to do away with looking and parsing the hibernate.cfg.xml completely and build a working factory with the Configuration you have programatically created.一個可供選擇的方法是使用編寫java程式碼的方式來配置上面的SessionFactory的connection.datasource,也許Hibernate將允許你讀取hibernate.cfg.xml檔案並且是用你在程式中建立的Configuration來建立一個sessionFactory。

你需要作如下修改:

* 將 java:comp/env/jdbc/ConfigureMeDS 修改為你自己的資料庫連線資訊

那麼現在:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration

    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"

    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="connection.datasource">java:comp/env/jdbc/ConfigureMeDS</property>

        <!-- Mapping files -->

        <!-- <mapping resource="uk/mydomain/Dummy.hbm.xml"/> -->

    </session-factory>

</hibernate-configuration>

如果你使用的Hibernate版本需要在hibernate.cfg.xml中至少有一個mapping元素,那麼你可能需要用到下面的兩個檔案,否則,如上就可以了。

uk/mydomain/Dummy.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="uk.mydomain.Dummy" table="dummy">

       <id name="id" type="long" column="id">

           <generator class="native" />

       </id>

    </class>

</hibernate-mapping>

uk/mydomain/Dummy.java

package uk.mydomain;

public class Dummy {

    private long id;

    private long getId() {

        return id;

    }

    private void setId(long id) {

        this.id = id;

    }

}

相關推薦

提高Hibernate 3 啟動速度

在Tomcat5.5.x環境下,呼叫Configuration().addCacheableFile來載入配置,建立Hibernate SessionFactory,成功地提高了載入速度。 推薦你只是在開發階段採用這樣的方式載入,最後的產品釋出階段你仍需使用經典的Hibern

如何提高Hibernate 3 啟動速度

在Tomcat5.5.x環境下,呼叫Configuration().addCacheableFile來載入配置,建立Hibernate SessionFactory,成功地提高了載入速度。    推薦你只是在開發階段採用這樣的方式載入,最後的產品釋出階段你仍需使用經典的Hib

怎樣提高Windows系統的啟動速度

Windows10系統由於加入了“快速啟動”機制,所以啟動速度在所有Windows版本中是最快的。但是隨著使用時間的增加,安裝的程式的增多,啟動速度就會逐漸減慢。通過下面的方法可以有效提高Windows 10的啟動速度,這些方法也可以用在Windows xp/vista/7/8/8.1 &n

android開發之提高應用啟動速度_splash頁面瞬間響應_避免APP啟動閃白屏

Application和Activity中的onCreate都進行了優化,基本沒有耗時操作,但是啟動應用之後還是會閃現一下白色背景,然後才進入Splash頁面,對比了一下QQ、微信、微博等客戶端,點選之後都是瞬間響應Splash啟動頁,差別在哪裡呢。其實就算你onCreate

3.修改更新源sources.list,提高軟體下載安裝速度(2017.04.05)

2017年4月5日再次更新源 1.切換到root使用者(如果已經是root使用者就直接看第二步) [email protected]:~$ su 密碼: 2.用文字編輯器開啟sources.list,手動新增下面的更新源 [email protected]:/ho

Android提高啟動速度的實現方法

原文地址:http://www.eoeandroid.com/thread-29953-1-1.html Android重量級開發之--提高android啟動速度研究      大家都知道啟動速度慢是智慧作業系統的一個通病,Android也不例外,啟

如何優化提高tomcat啟動速度

在tomcat啟動的時候,我們可以做一些優化設定來使得tomcat的啟動更快速,下面是一些常見的優化加速啟動的方法建議(以tomcat-7.+為例說明)。 1、  Jars包 1.1、將一些不必要的jar包去掉,當tomcat啟動載入jar包的時候,會去搜尋每個jar

android 提高App啟動速度

公司的App啟動速度太慢了要求提高啟動速度, 於是動手研究下 把啟動速度從2000ms降低到800ms左右。 先記錄下提速的方法 application的Oncreate方法裡面的邏輯程式碼全用 new Handler().post(new Runnable(

提升HTML5的性能體驗系列之五 webview啟動速度優化及事件順序解析

執行時間 很快 runt 代碼 模式 本地 技術 apk loaded webview加載時有5個事件。觸發順序為loading、titleUpdate、rendering、rendered、loaded。webview開始載入頁面時觸發loading,載入過程中如果&am

IntelliJ IDEA 提高執行代碼速度的好辦法

找到 pil clip 代碼 eclips compiler 技術 分享 image idea是神器,用過後再也不想回到eclipse去了,但是有一點不明白,為什麽運行速度這麽慢 後面慢慢發現原來是每次執行前都需要build,即編譯,所以就是這個編譯時間讓運行速度顯

Entity Framework的啟動速度優化

映射 自帶 1-1 man 同時 找到 優化 http target 剛開始的時候沒有太在意,但是隨著系統的發布,這種初次請求,或者閑置若幹時間後第一次請求的漫長等待使得App的體驗很差,很多時候App加載好半天數據都沒過來。如果前端沒處理好,還會導致App的假死。所以就花

加快liferay 7的啟動速度

logs ati highlight groovy log roo 開啟 ext 特性 在啟動Liferay的過程中,你會發現在某個時刻,會特別慢,停留了很久,它是停在validate LPKGs,檢驗LPKG files是否被篡改,這個過程在開發的過程中十分令人頭疼。 現

Web前端性能優化——如何提高頁面加載速度

get請求 防止 元素 加載 支持 htm 範圍 個人 另一個 前言: 在同樣的網絡環境下,兩個同樣能滿足你的需求的網站,一個“Duang”的一下就加載出來了,一個糾結了半天才出來,你會選擇哪個?研究表明:用戶最滿意的打開網頁時間是2-5秒,如果等待超過10秒,99%的用戶

Hosts文件實際應用 配置內部服務器提高訪問效率和速度

數據 basic 之前 很大的 應用 image 部署 cloud 積累 一 hosts文件的作用和介紹 https://jingyan.baidu.com/article/335530da45485e19cb41c3d6.html https://www.cnblogs.

三個線程互相通信 線程1啟動線程2 2啟動3 3啟動1

condition com mic ace atom should except int rri package cn.itcast.heima2; import java.util.concurrent.atomic.AtomicInteger; import java.

提高VS2010/VS2012編譯速度

process 情況下 conf lds 需要 全局參數 -h link 圖片 轉 https://blog.csdn.net/liaowenfeng/article/details/75464657 http://blog.csdn.net/mythma/ar

一組相關聯的問題:“sudo: unable to resolve host ###: Connection timed out”、軟件啟動速度超慢、IPv6無法使用

acs sts 原因 命令 最終 hostname med 出現 connect 近日陸續發現計算機出現幾個問題,最終發現這些問題實際上是由同一個原因導致的 問題1:無法使用IPv6 問題2:無論是啟動Emacs GUI還是在命令行中執行emacs -nw指令,打開Emac

MySQL之按月拆分主表並按月分表寫入數據提高數據查詢速度

tom auto begin rda rim 日期 pre tran create 使用場景: 主表數據量特別大,為了提高查詢的速度,可以考慮按月進行分表,要求就是當月的數據到當月表查詢,上月的數據到上月表查詢,當天的數據到主表來查詢。這樣在一定程度上也是提高了數據的查詢速

首次啟動速度慢的問題記錄IIS性能優化

nec nta iis7 服務 www 完成 更新 服務器 程序    ASP.NET網站發布的時候需要預編譯.這樣不但能解決首次速度慢的問題,還能把cshtml的內容編譯.這樣別人就看不到我們VIEW的代碼了.那麽打開VS. 發布的時候把"在發布期間預編譯"打鉤,點擊後

c理解提高3)程式的記憶體四區模型和函式呼叫模型

程式的記憶體四區模型 記憶體四區的建立流程 流程說明 1、作業系統把物理硬碟程式碼load到記憶體 2、作業系統把c程式碼分成四個區 3、作業系統找到main函式入口執行   各區元素分析 函式呼叫模型 基本原理