?? hibernateutil.java
字號:
package cn.hxex.vote.util;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Interceptor;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class);
/*指定攔截器屬性名*/
private static final String INTERCEPTOR_CLASS = "hibernate.util.interceptor_class";
/*靜態Configuration和SessionFactory對象的實例*/
private static Configuration configuration;
private static SessionFactory sessionFactory;
static {
/*從默認的配置文件創建SessionFactory*/
try {
configuration = new AnnotationConfiguration();
/*讀取hibernate.properties或者Hibernate.cfg.xml*/
configuration.configure();
if (configuration == null) {
System.out.println("configuration is null!");
}
else {
System.out.println("configuration is not null!");
}
/*如果在配置文件中配置了攔截器,那么將其設置到configuration對象中*/
String interceptorName =
configuration.getProperty(INTERCEPTOR_CLASS);
if (interceptorName != null) {
Class interceptorClass =
HibernateUtil.class.getClassLoader()
.loadClass(interceptorName);
Interceptor interceptor = (Interceptor)interceptorClass.newInstance();
configuration.setInterceptor(interceptor);
}
if (configuration.getProperty(Environment.SESSION_FACTORY_NAME) != null) {
/*讓Hibernate將SessionFactory邦定到JNDI*/
configuration.buildSessionFactory();
}
else {
/*使用靜態變量來保持SessionFactory對象的實例*/
sessionFactory = configuration.buildSessionFactory();
}
}
catch (Throwable ex) {
log.error("Building SessionFactory failed.", ex);
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
/*返回原始的Configuration對象的實例*/
public static Configuration getConfiguration() {
return configuration;
}
/*返回全局的SessionFactory對象的實例*/
public static SessionFactory getSessionFactory() {
SessionFactory sf = null;
String sfName = configuration.getProperty(Environment.SESSION_FACTORY_NAME);
if (sfName != null) {
log.debug("Looking up SessionFactory in JNDI.");
try {
sf = (SessionFactory)new InitialContext().lookup(sfName);
}
catch (NamingException ex) {
throw new RuntimeException(ex);
}
}
else {
sf = sessionFactory;
}
if (sf == null) {
throw new IllegalStateException("SessionFactory not available.");
}
return sf;
}
/*關閉當前的SessionFactory并且釋放所有的資源*/
public static void shutDown() {
log.debug("Shutting down Hibernate");
getSessionFactory().close();
configuration = null;
sessionFactory = null;
}
/*使用靜態的Configuration對象來重構SessionFactory*/
public static void rebuildSessionFactory() {
log.debug("Using current Configuration for rebuild.");
rebuildSessionFactory(configuration);
}
public static void rebuildSessionFactory(Configuration cfg) {
log.debug("Rebuild the SessionFactory from given Configuration.");
synchronized(sessionFactory) {
if (sessionFactory != null && !sessionFactory.isClosed()) {
sessionFactory.close();
}
if (cfg.getProperty(Environment.SESSION_FACTORY_NAME) != null) {
cfg.buildSessionFactory();
}
else {
sessionFactory = cfg.buildSessionFactory();
}
}
}
/*在當前SessionFactory中注冊一個攔截器*/
public static SessionFactory registerInterceptorAndRebuild(Interceptor interceptor) {
log.debug("Setting new global Hibernate interceptor and restarting.");
configuration.setInterceptor(interceptor);
rebuildSessionFactory();
return getSessionFactory();
}
/*獲取攔截對象*/
public static Interceptor getInterceptor() {
return configuration.getInterceptor();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -