package com.zte.hibernate.dao;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import com.zte.hibernate.domain.Dept;
import com.zte.hibernate.domain.Emp;
/**
?* Configures and provides access to Hibernate sessions, tied to the
?* current thread of execution.? Follows the Thread Local Session
?* pattern, see {@linkhttp://hibernate.org/42.html}.
?*/
public class HibernateSessionFactory {
??? /**
???? * Location of hibernate.cfg.xml file.
???? * NOTICE: Location should be on the classpath as Hibernate uses
???? * #resourceAsStream style lookup for its configuration file. That
???? * is place the config file in a Java package - the default location
???? * is the default Java package.<br><br>
???? * Examples: <br>
???? * <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml".
???? * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code>
???? */
??? private static String CONFIG_FILE_LOCATION = "/com/zte/hibernate/dao/hibernate.cfg.xml";
??? /** Holds a single instance of Session */
?private static final ThreadLocal threadLocal = new ThreadLocal();
??? /** The single instance of hibernate configuration */
??? private static final Configuration cfg = new Configuration();
??? /** The single instance of hibernate SessionFactory */
??? private static org.hibernate.SessionFactory sessionFactory;
??? /**
???? * Returns the ThreadLocal Session instance.? Lazy initialize
???? * the <code>SessionFactory</code> if needed.
???? *
???? *? @return Session
???? *? @throws HibernateException
???? */
??? public static Session currentSession() throws HibernateException {
??????? Session session = (Session) threadLocal.get();
??????? Properties p = new Properties();
??????? InputStream in;
??try {
???in = new FileInputStream("src/hibernate.properties");
???p.load(in);
??} catch (FileNotFoundException e1) {
???// TODO Auto-generated catch block
???e1.printStackTrace();
??} catch (IOException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
???????
??if (session == null || !session.isOpen()) {
???if (sessionFactory == null) {
????try {
?????cfg.setProperties(p);
?????cfg.addClass(Dept.class);
?????cfg.addClass(Emp.class);
?????//cfg.configure(CONFIG_FILE_LOCATION);
?????sessionFactory = cfg.buildSessionFactory();
????} catch (Exception e) {
?????System.err
???????.println("%%%% Error Creating SessionFactory %%%%");
?????e.printStackTrace();
????}
???}
???session = (sessionFactory != null) ? sessionFactory.openSession()
?????: null;
???threadLocal.set(session);
??}
??????? return session;
??? }
??? /**
???? *? Close the single hibernate session instance.
???? *
???? *? @throws HibernateException
???? */
??? public static void closeSession() throws HibernateException {
??????? Session session = (Session) threadLocal.get();
??????? threadLocal.set(null);
??????? if (session != null) {
??????????? session.close();
??????? }
??? }
??? /**
???? * Default constructor.
???? */
??? private HibernateSessionFactory() {
??? }
}
posted on 2006-05-18 16:50
崛起的程序員 閱讀(679)
評論(0) 編輯 收藏 所屬分類:
java