鷹翔宇空

          學(xué)習(xí)和生活

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

          現(xiàn)在網(wǎng)上流傳的關(guān)于Weblogic上配置Hibernate為JNDI的方法多是robbin寫(xiě)的
          http://forum.javaeye.com/viewtopic.php?t=245。google了好久,發(fā)現(xiàn)都大同小異,幾乎都是一個(gè)模版,沒(méi)辦法,天下文章本就是一大抄,今天你抄我,明天我抄你。我是一個(gè)很懶的人,一看到那么復(fù)雜的配置(主要是Weblogic啟動(dòng)腳本的修改),頭就大了,也沒(méi)有試下去的勇氣了,以前倒好說(shuō),畢竟沒(méi)有用到容器托管,如今用到了,自然也不能置之不理。就找點(diǎn)資料,自己測(cè)試,發(fā)現(xiàn)可以通過(guò)實(shí)現(xiàn)ServletContextListener接口來(lái)加載配置文件,從而達(dá)到自己的需求。以下是源代碼和配置文件:

          hibernate.cfg.xml如下(我沒(méi)有使用資源文件):

          <?xml version='1.0' encoding='utf-8'?>
          <!DOCTYPE hibernate-configuration PUBLIC
          ??????? "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          ??????? "

          <hibernate-configuration>

          ??? <session-factory name="hibernate.session_factory">

          ??????? <!-- Database connection settings -->
          ??????? <!--property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
          ??????? <property name="connection.url">jdbc:oracle:thin:@localhost:1521:hyq</property>
          ??????? <property name="connection.username">hyq</property>
          ??????? <property name="connection.password">hyq</property-->
          ?????? <property name="connection.datasource">TestDS</property>

          ??????? <!-- JDBC connection pool (use the built-in) -->
          ??????? <property name="connection.pool_size">1</property>

          ??????? <!-- SQL dialect -->
          ??????? <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>

          ??????? <!-- Enable Hibernate's automatic session context management -->
          ??????? <property name="current_session_context_class">thread</property>

          ??????? <!-- Disable the second-level cache? -->
          ??????? <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

          ??????? <!-- Echo all executed SQL to stdout -->
          ??????? <property name="show_sql">true</property>

          ??????? <!-- Drop and re-create the database schema on startup -->
          ??????? <!--property name="hbm2ddl.auto">create</property-->

          ??????? <mapping resource="com/hyq/src/common/UserVO.hbm.xml"/>

          ??? </session-factory>

          </hibernate-configuration>

          注意:此處我使用的connection.datasource為:TestDS。這是因?yàn)槲以趙eblogic中配置的數(shù)據(jù)源就是TestDS。這里要和你配置的數(shù)據(jù)源保持一致。

          實(shí)現(xiàn)監(jiān)聽(tīng)接口的方法如下(通過(guò)此方法完成配置文件的加載,從而達(dá)到發(fā)布jndi的目的):
          package com.hyq.src.servlets;

          import org.hibernate.SessionFactory;
          import org.hibernate.cfg.Configuration;
          import javax.servlet.ServletContextEvent;
          import javax.servlet.ServletContextListener;

          public class HibernateInit
          ??? implements ServletContextListener {
          ? public void contextDestroyed(ServletContextEvent servletContextEvent) {
          ? }

          ? public void contextInitialized(ServletContextEvent servletContextEvent) {
          ??? try {
          ????? Configuration conf = new Configuration().configure();
          ????? SessionFactory sf = conf.buildSessionFactory();
          ??? }
          ??? catch (Exception e) {
          ????? e.printStackTrace();
          ??? }
          ? }
          }

          實(shí)現(xiàn)ServletContextListener接口后要在web.xml中進(jìn)行配置,如下:
          ? <listener>
          ???? <listener-class>com.hyq.src.servlets.HibernateInit</listener-class>
          ? </listener>
          注意:要加載在<servlet>之前。

          獲取SessionFactory的方法如下:
          package com.hyq.src.util;

          import org.hibernate.SessionFactory;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          public class HibernateUtil {
          ? public HibernateUtil() {
          ? }
          ? private static final SessionFactory sessionFactory;

          ????? static {
          ????????? try {
          ??????????? Context ctx = new InitialContext();
          ????????????? sessionFactory = (SessionFactory) ctx.lookup("hibernate/session_factory");
          ????????? } catch (Throwable ex) {
          ????????????? System.err.println("Initial SessionFactory creation failed." + ex);
          ????????????? throw new ExceptionInInitializerError(ex);
          ????????? }
          ????? }

          ????? public static SessionFactory getSessionFactory() {
          ????????? return sessionFactory;
          ? }
          }
          然后就可以在其他方法中使用SessionFactory 了,如:
          ??? Session session = HibernateUtil.getSessionFactory()
          ??????? .getCurrentSession();
          ??? session.beginTransaction();
          ??? request.setAttribute("message","已經(jīng)成功運(yùn)行!");
          ??? UserVO userVO = new UserVO();
          ??? userVO.setUser_name("TrampEagle");
          ??? session.save(userVO);
          ??? session.getTransaction().commit();

          具體完整的示例:HibernateJNDI源代碼

          posted on 2006-05-19 10:31 TrampEagle 閱讀(3425) 評(píng)論(3)  編輯  收藏 所屬分類(lèi): 學(xué)習(xí)體會(huì)

          Feedback

          # re: 在Weblogic上配置Hibernate為JNDI的一種簡(jiǎn)單方法 2006-05-19 10:47 原創(chuàng)專(zhuān)欄 開(kāi)源學(xué)習(xí)
          好像你只把weblogic用成web服務(wù)器吧。
          如果是這樣,好像你寫(xiě)這個(gè)沒(méi)啥意義吧。看看spring怎么實(shí)現(xiàn)的!

            回復(fù)  更多評(píng)論
            

          # re: 在Weblogic上配置Hibernate為JNDI的一種簡(jiǎn)單方法 2006-05-19 11:45 TrampEagle
          @原創(chuàng)專(zhuān)欄 開(kāi)源學(xué)習(xí)
          我這里只是臨時(shí)寫(xiě)的一個(gè)小示例,只是用來(lái)說(shuō)明可以這樣使用。不過(guò)spring只是看了個(gè)入門(mén),還沒(méi)有研究源碼,不過(guò),謝謝“原創(chuàng)專(zhuān)欄 開(kāi)源學(xué)習(xí)”,我會(huì)盡快研究spring源碼的。努力學(xué)習(xí)中!!!  回復(fù)  更多評(píng)論
            

          # re: 在Weblogic上配置Hibernate為JNDI的一種簡(jiǎn)單方法 2007-02-06 13:16 fangdy
          我把你的示例放在MyEclipse下,代碼出錯(cuò),錯(cuò)誤都是一些包找不到,如:
          import org.hibernate.SessionFactory(這個(gè)包前面打×)  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 崇文区| 雅江县| 蛟河市| 黄冈市| 奈曼旗| 株洲县| 镇坪县| 南宫市| 通化县| 酉阳| 延川县| 千阳县| 虞城县| 平阳县| 通道| 西华县| 吴江市| 洛扎县| 东平县| 平乡县| 浦城县| 大埔区| 铁岭市| 郑州市| 三台县| 深圳市| 若羌县| 延庆县| 高尔夫| 西贡区| 绥化市| 光山县| 临泉县| 四子王旗| 兴国县| 平潭县| 敖汉旗| 固原市| 江北区| 乐清市| 石柱|