package cn.hxex.blog.hibernate;
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.Configuration;
import org.hibernate.cfg.Environment;
/**
* 基础的Hibernate辅助类,用于Hibernate的配置和启动。
* <p>
* 通过静态的初始化代码来读取Hibernate启动参数,并初始化
* <tt>Configuration</tt>和<tt>SessionFactory</tt>对象。
* <p>
*
* @author galaxy
*/
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对象的实例
// 如果你不使用JDK 5.0或者注释请使用new Configuration()
// 来创建Configuration()对象的实例
configuration = new Configuration();
// 读取hibernate.properties或者hibernate.cfg.xml文件
configuration.configure();
// 如果在配置文件中配置了拦截器,那么将其设置到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将SessionFacory绑定到JNDI
configuration.buildSessionFactory();
}
else
{
// 使用静态变量来保持SessioFactory对象的实例
sessionFactory = configuration.buildSessionFactory();
}
}
catch (Throwable ex)
{
// 输出异常信息
log.error("Building SessionFactory failed.", ex);
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
/**
* 返回原始的Configuration对象的实例
*
* @return Configuration
*/
public static Configuration getConfiguration()
{
return configuration;
}
/**
* 返回全局的SessionFactory对象的实例
*
* @return 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.");
// Close caches and connection pools
getSessionFactory().close();
// Clear static variables
configuration = null;
sessionFactory = null;
}
/**
* 使用静态的Configuration对象来重新构建SessionFactory。
*/
public static void rebuildSessionFactory()
{
log.debug("Using current Configuration for rebuild.");
rebuildSessionFactory(configuration);
}
/**
* 使用指定的Configuration对象来重新构建SessionFactory对象。
*
* @param cfg
*/
public static void rebuildSessionFactory(Configuration cfg)
{
log.debug("Rebuilding 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();
configuration = cfg;
}
}
/**
* 在当前SessionFactory中注册一个拦截器
*/
public static SessionFactory registerInterceptorAndRebuild(Interceptor interceptor)
{
log.debug("Setting new global Hibernate interceptor and restarting.");
configuration.setInterceptor(interceptor);
rebuildSessionFactory();
return getSessionFactory();
}
/**
* 获得拦截器对象
*
* @return Interceptor
*/
public static Interceptor getInterceptor()
{
return configuration.getInterceptor();
}
/**
* 提交当前事务,并开始一个新的事务
*/
public static void commitAndBeginTransaction()
{
sessionFactory.getCurrentSession().getTransaction().commit();
sessionFactory.getCurrentSession().beginTransaction();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
blog.rar_-blog_blog_订单系统 (158个子文件)
HibernateUtil.class 4KB
TestMessageDAO.class 4KB
DaoFactory.class 3KB
HibernateFilter.class 3KB
ReplySaveAction.class 3KB
TestUserDao.class 3KB
MessageSaveAction.class 3KB
MessageDAO.class 2KB
LogonAction.class 2KB
HomepageAction.class 2KB
HibernateDAO.class 2KB
MessageSaveUpdateAction.class 2KB
MessageUpdateAction.class 2KB
RegistAction.class 2KB
ReplyAddAction.class 2KB
MessageDeleteAction.class 2KB
ReplyDeleteAction.class 2KB
BlogAction.class 2KB
AuthorityUtil.class 2KB
Message.class 2KB
ReplyMessage.class 2KB
DaoConfig.class 2KB
BaseModel.class 1KB
ReplyForm.class 1KB
BlogConfig.class 1KB
UserDAO.class 1KB
BaseAction.class 1KB
RegistForm.class 1KB
MessageForm.class 1KB
LogonForm.class 1KB
TestDaoFactory.class 1KB
User.class 1KB
BlogRequestProcessor.class 934B
BlogForm.class 861B
IdForm.class 837B
AllTests.class 615B
UserInfo.class 551B
BlogAuthorityException.class 485B
BlogDAOException.class 467B
BlogException.class 448B
IMessageDAO.class 410B
IUserDAO.class 252B
.classpath 2KB
common.css 661B
welcome.gif 42KB
register.gif 17KB
update.gif 8KB
content.gif 7KB
bak.gif 49B
hibernate3.jar 1.99MB
classes12.jar 1.07MB
struts.jar 537KB
mysql-connector-java-3.1.10-bin.jar 409KB
standard.jar 384KB
antlr.jar 350KB
dom4j-1.6.1.jar 307KB
cglib-2.1.3.jar 276KB
commons-beanutils.jar 184KB
commons-collections-2.1.1.jar 171KB
commons-lang-2.0.jar 166KB
commons-digester.jar 164KB
ehcache-1.2.jar 115KB
junit-4.1.jar 110KB
commons-validator.jar 82KB
jakarta-oro.jar 64KB
commons-logging.jar 37KB
asm.jar 26KB
commons-fileupload.jar 22KB
jstl.jar 20KB
jta.jar 9KB
HibernateUtil.java 6KB
TestMessageDAO.java 3KB
HibernateFilter.java 2KB
MessageDAO.java 2KB
ReplyForm.java 2KB
ReplySaveAction.java 2KB
MessageSaveAction.java 2KB
DaoFactory.java 2KB
RegistForm.java 2KB
TestUserDao.java 2KB
MessageSaveUpdateAction.java 2KB
MessageUpdateAction.java 2KB
RegistAction.java 2KB
LogonAction.java 2KB
HomepageAction.java 2KB
MessageForm.java 2KB
ReplyDeleteAction.java 2KB
ReplyAddAction.java 2KB
MessageDeleteAction.java 2KB
BlogAction.java 2KB
LogonForm.java 1KB
HibernateDAO.java 1KB
BaseModel.java 1KB
BaseAction.java 1KB
BlogForm.java 1KB
IdForm.java 1KB
ReplyMessage.java 1KB
UserDAO.java 1KB
Message.java 1018B
DaoConfig.java 944B
共 158 条
- 1
- 2
资源评论
APei
- 粉丝: 65
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功