<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源代碼