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) {
}
}
以上是个简单的说明,基本上满足配置应用的需要,有问题欢迎大家交流。