今天成功配置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