鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

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

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

          <?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。這是因為我在weblogic中配置的數據源就是TestDS。這里要和你配置的數據源保持一致。

          實現監聽接口的方法如下(通過此方法完成配置文件的加載,從而達到發布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();
          ??? }
          ? }
          }

          實現ServletContextListener接口后要在web.xml中進行配置,如下:
          ? <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","已經成功運行!");
          ??? UserVO userVO = new UserVO();
          ??? userVO.setUser_name("TrampEagle");
          ??? session.save(userVO);
          ??? session.getTransaction().commit();

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

          posted on 2006-05-19 10:31 TrampEagle 閱讀(3425) 評論(3)  編輯  收藏 所屬分類: 學習體會

          Feedback

          # re: 在Weblogic上配置Hibernate為JNDI的一種簡單方法 2006-05-19 10:47 原創專欄 開源學習
          好像你只把weblogic用成web服務器吧。
          如果是這樣,好像你寫這個沒啥意義吧。看看spring怎么實現的!

            回復  更多評論
            

          # re: 在Weblogic上配置Hibernate為JNDI的一種簡單方法 2006-05-19 11:45 TrampEagle
          @原創專欄 開源學習
          我這里只是臨時寫的一個小示例,只是用來說明可以這樣使用。不過spring只是看了個入門,還沒有研究源碼,不過,謝謝“原創專欄 開源學習”,我會盡快研究spring源碼的。努力學習中!??!  回復  更多評論
            

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

          主站蜘蛛池模板: 达州市| 九龙城区| 闸北区| 乡宁县| 杂多县| 蚌埠市| 峡江县| 卢氏县| 汝阳县| 乐昌市| 武汉市| 甘孜| 涞水县| 澜沧| 云林县| 德阳市| 绍兴市| 承德县| 偏关县| 鲁甸县| 翁牛特旗| 沽源县| 长春市| 宁南县| 根河市| 东乡县| 永登县| 军事| 广水市| 延安市| 石林| 朝阳区| 广灵县| 延吉市| 宿松县| 呼玛县| 新绛县| 麦盖提县| 平安县| 双流县| 烟台市|