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