实战tomcat5下hibernate3.1.2应用,采用jndi方式获取c3po连接池

本文详细介绍了在Tomcat环境中配置全局与局部数据源的方法,并展示了如何在Hibernate中引用这些数据源。此外,还提供了HibernateUtil类的实现,用于获取SessionFactory实例及连接池中的连接,同时介绍了利用监听器在应用启动时创建SessionFactory。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.配置数据源
有两种方式:全局数据源或者局部数据源。
全局数据源是所有的应用都可以使用,而局部数据源为单个应用使用。
1.1全局数据源

 

<GlobalNamingResources>
    ...

    <Resource name="jdbc/test" auth="Container"   
           type="com.mchange.v2.c3p0.ComboPooledDataSource"
           maxPoolSize="30" minPoolSize="1" initialPoolSize="5" acquireIncrement="2"
              idleConnectionTestPeriod="60" maxIdleTime="60"
              driverClass="oracle.jdbc.driver.OracleDriver"
              user="test" password="test" 
              jdbcUrl="jdbc:oracle:thin:@192.168.1.14:1521:oradb"
              factory="org.apache.naming.factory.BeanFactory"/>

    ...
  </GlobalNamingResources>

 

 

1.2局部数据源
将context.xml文件放置在F:\tomcat-5.5.25\webapps\strutsrcstudy\META-INF之下,具体配置可见<<Tomcat中数据源的配置及原理>>,我的博客中也转载了这篇文章,大家可以参考下。

 


2.配置hibernate.cfg.xml
connection.datasource是数据源配置,和上面全局数据源对应。
session_factory_name是jndi名,通过这个名字我们可以得到SessionFactory的实例。


 

...
<property name="connection.datasource">java:/comp/env/jdbc/test</property> 
<property name="session_factory_name">hibernate.session.factory</property>
...

 
3.编写HibernateUtil
这个类的主要作用是:
1.获取静态变量sessionFactory;
2.获取hibernate的session,也就是获取连接池中的连接。

...
static {
        try {
            Context ctx = new InitialContext();
            sessionFactory = (SessionFactory) ctx.lookup("hibernate.session.factory");
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
        }
    }
...

 


4.编写监听器:HibernateAppListener
在应用初始化时,生成一个SessionFactory实例。
因为在单个应用的生命周期中,通常情况下SessionFactory保持一个实例即可。
这里为了提高应用的响应速度,所以采用了在应用初始化时作这个工作。

 

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


public class HibernateAppListener implements ServletContextListener {
 private static SessionFactory sessionFactory = null;

 
 public void contextInitialized(ServletContextEvent ce) {
  Logger logger = Logger.getLogger("HibernateAppListener");

  try {
   sessionFactory = new Configuration().configure().buildSessionFactory();

  } catch (Exception e) {
   logger.error(e);
  }
 }

 /* Application Shutdown Event */
 public void contextDestroyed(ServletContextEvent ce) {
 }
}

 

以上是个简单的说明,基本上满足配置应用的需要,有问题欢迎大家交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值