今天成功配置hibernate為weblogic上的JNDI,具體實現參考了robbin的教程,實現步驟如下:
前提如下:
我的hibernate項目結構如下:
? E:\eclipse_workspace\hibernateJndi\lib??????? hibernate用到的包及其他系統使用的包,包括weblogic.jar,已通過下面要編寫的啟動類
? E:\eclipse_workspace\hibernateJndi\src??????? 源文件
? E:\eclipse_workspace\hibernateJndi\classes??? 系統編譯后的類文件,存放hibernate.cfg.xml、log4j.properties等文件
? 具體步驟如下:
? 一、修改weblogic的ClassPath
????? 現在需要把E:\eclipse_workspace\hibernateJndi\lib目錄下那些與hibernate相關jar文件和E:\eclipse_workspace\hibernateJndi\classes 目錄都放置到Weblogic的 CLASSPATH里面去,所以修改mydomain里面的Weblogic啟動腳本startWeblogic.cmd,在啟動Weblogic之前,插入設置CLASSPATH的命令,如下:
????? @rem set hibernate classpath
????? set HIBERNATE_LIB=E:\eclipse_workspace\hibernateJndi\lib
????? set HIBERNATE_CLASSES=E:\eclipse_workspace\hibernateJndi\classes
????? set CLASSPATH=%HIBERNATE_LIB%\asm.jar;%HIBERNATE_LIB%\asm-attrs.jar;%HIBERNATE_LIB%\c3p0-0.9.0.jar;%HIBERNATE_LIB%\cglib-2.1.3.jar;%HIBERNATE_LIB%\commons-beanutils.jar;%HIBERNATE_LIB%\commons-collections.jar;%HIBERNATE_LIB%\commons-lang-2.0.jar;%HIBERNATE_LIB%\commons-logging.jar;%HIBERNATE_LIB%\dom4j-1.6.1.jar;%HIBERNATE_LIB%\hibernate3.jar;%HIBERNATE_LIB%\log4j-1.2.11.jar;%HIBERNATE_CLASSES%;%CLASSPATH%;
???? 下面就是啟動weblogic了,不用修改
????
????? @REM Call WebLogic Server
????? ...
?? 二、添加weblogic的數據庫連接池和數據源
?????? 我用的是sqlserver 2000,建立數據庫連接池,建立數據源sqlserverSource,使用剛才建立的連接池。
??
?? 三、修改classes目錄下的hibernate.cfg.xml。該文件放到classes下,發布web應時,把mapping文件加上去,使用Weblogic的連接池,而不是自帶的連接池,以后訪問的jndi名為hhibernate/session_factory 如下:
?????? <?xml version='1.0' encoding='UTF-8'?>
?<!DOCTYPE hibernate-configuration PUBLIC
????????? "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
????????? "
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd
">
?<hibernate-configuration>
?<session-factory>
??<property name="hibernate.connection.datasource">sqlserverSource</property>
??<property name="hibernate.connection.provider_class">org.hibernate.connection.DatasourceConnectionProvider</property>
??<property name="hibernate.session_factory_name">hibernate.session_factory</property>
??<property name="hibernate.show_sql">true</property>
??<property name="hibernate.jdbc.fetch_size">100</property>
??<property name="hibernate.jdbc.batch_size">50</property>
??<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
??<mapping resource="zx/common/model/User.hbm.xml" />
?</session-factory>
?</hibernate-configuration>
????? 這是使用 Hibernate來綁定JNDI ,給JNDI起的名稱,本來應該是hibernate/session_factory,但是Weblogic要求改為. 號,不過在程序中lookup的時候還是要寫hibernate/session_factory
? 四、建立啟動類,并編譯
?package zx.util;
?import java.util.Hashtable;
?import weblogic.common.T3StartupDef;
?import weblogic.common.T3ServicesDef;
?import org.hibernate.cfg.Configuration;
?import org.hibernate.SessionFactory;
?/**
? * 鄭州市正信科技發展有限公司 版權所有 2006
? * <p/>創 建 人:Robbin,王彥鋒
? * <p/>創建日期:2006-3-17
? * <p/>創建時間:10:17:56
? * <p/>功能描述:Hibernate啟動類
? * <p/>==============================================================
? * <p/>修改歷史
? * <p/>修改人??????????????? 修改時間??????????????? 修改原因
? * <p/>==============================================================
? */
?public class HibernateStartUp implements T3StartupDef {
?? public void setServices(T3ServicesDef services) {}
?? public String startup(String name, Hashtable args) throws Exception {
???? SessionFactory sf =? new Configuration().configure().buildSessionFactory();
???? return "Hibernate Startup completed successfully";
?? }
?}
?? 五、配置StartUp類
?啟動Weblogic,打開Console控制臺,在左邊的Applet樹上找到StartUp & Shutdown,然后在右邊點擊“Configure a new Startup Class...”,在Name框里面隨便填寫,在ClassName里面填寫你編寫的StartUp類,zx.util.HibernateStartUp ,然后點擊“Apply”。然后切換到Target這選項卡,在Target-Server左邊的 Avaiable框里面選擇“myserver”,點擊右箭頭,把它挪到右邊的“Chosen”框里面去,最后再點擊一下“Apply"按鈕。如果此時 Weblogic的DOS窗口里面沒有出錯信息,那么應該已經配置成功了。
??? 六、重啟wblogic
?????? 關閉Weblogic,再重新運行 startWelogic.cmd,啟動Weblogic,觀察DOS窗口的輸出信息,可以看到Hibernate的初始化信息一屏屏的滾動輸出,證明已??? 經配置成功。現在再打開Console控制臺,點擊左邊Applet樹中的Servers|myserver,然后可以在右邊最下面找到“View JNDI tree ”,點擊它,會打開一??? 個瀏覽器窗口,顯示JNDI樹,這時你可以看到一個名稱為hibernate的JNDI對象,在左邊的Applet樹中點擊它,看右邊的詳細信息,我的機器上的信息如下:
?
??? 綁定名稱: session_factory
??? 對象類: org.hibernate.impl.SessionFactoryImpl
??? 對象散列代碼: 10578812
??? 對象轉換成字符串:
org.hibernate.impl.SessionFactoryImpl@a16b7c
?
? 七、調用方法,獲得SessionFactory
??????? try {
??????????? Context ctx = new InitialContext();
??????????? String jndiName = "hibernate/session_factory";
??????????? sessionFactory = (SessionFactory) ctx.lookup(jndiName);
??????? } catch (Exception ex) {
??????????? throw ex;
??????? }
? 配置成功!
注:如果要隨同web應用一塊發布,修改相應目錄即可:
????? set HIBERNATE_LIB=%bea_home%\user_projects\domains\mydomain\applications\myapp\WEB-INF\lib
????? set HIBERNATE_CLASSES=%bea_home%\user_projects\domains\mydomain\applications\myapp\WEB-INF\classes