JiveJdon Community Forums
在线166人 Home | 论坛 | 培训咨询 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 3 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
Ericx

发表文章: 39
注册时间: 2007年04月16日 18:06
给他发消息
关于一个小项目中的事务处理 发表: 2007年06月28日 16:35 回复


最近做了一个小东西,使用了Hibernate,想向大家请教一下关于对Hibernate事务处理,或者说小项目的事务处理方面的问题

最简单的方法是在每次Session打开后就开始事务,关闭前commit,可这样效率真的不敢恭维。
我的一个思路是,自己封装事务,意思是

public class UserTransaction{

private Transaction tran = null;

public UserTransaction(){
tran = getSession().beginTransaction();

}

protected Session getSession(){
return HibernateSessionFactory.getSession();
}

public void begin() throws TransactionException {
try {
tran.begin();
} catch (HibernateException e) {
TransactionException ex = new TransactionException(e.getMessage());
throw ex;
}

}

public void commit() throws TransactionException {
try {
tran.commit();
getSession().close();
} catch (HibernateException e) {
TransactionException ex = new TransactionException(e.getMessage());
throw ex;
}

}

public boolean isActive() throws TransactionException {
boolean token = false;
try {
token = tran.isActive();
} catch (HibernateException e) {
TransactionException ex = new TransactionException(e.getMessage());
throw ex;
}
return token;

}

public void registerSynchronization(Synchronization arg0) throws TransactionException {
// TODO Auto-generated method stub

}

public void rollback() throws TransactionException {
try {
tran.rollback();
getSession().close();
} catch (RuntimeException e) {
TransactionException ex = new TransactionException(e.getMessage());
throw ex;
}

}

public void setTimeout(int arg0) {
tran.setTimeout(arg0);

}

public boolean wasCommitted() throws TransactionException {
boolean token = false;
try {
token = tran.wasCommitted();
} catch (HibernateException e) {
TransactionException ex = new TransactionException(e.getMessage());
throw ex;
}
return token;
}

public boolean wasRolledBack() throws TransactionException {
boolean token = false;
try {
token = tran.wasCommitted();
} catch (HibernateException e) {
TransactionException ex = new TransactionException(e.getMessage());
throw ex;
}

return token;
}

}

这样一来就可以在业务层使用facade模式,开始时打开一个Session。放到ThreadLocal中,在最后commit后关掉

请高手指教,我对事务方面了解不多
banq

发表文章: 9095
注册时间: 2002年08月03日 17:08
给他发消息
回复:关于一个小项目中的事务处理 发表: 2007年06月30日 18:20 回复
可以自己封装的,Jive2.5版本就这样做过。不过你这样封装的还是JDBC事务。
现在有专门JTA事务组件,类似你这样的封装。
Ericx

发表文章: 39
注册时间: 2007年04月16日 18:06
给他发消息
re:关于一个小项目中的事务处理 发表: 2007年06月30日 19:43 回复
>现在有专门JTA事务组件,类似你这样的封装。

能具体说说吗?

或者说说jdon是如何处理事务的呢?
谢谢
banq

发表文章: 9095
注册时间: 2002年08月03日 17:08
给他发消息
回复:re:关于一个小项目中的事务处理 发表: 2007年06月30日 19:50 回复
JiveJdon3使用的是JTA,使用JTA需要通过JNDI使用数据库源,关于JTA可查查相关资料,写起来会很多。
这个主题有 3 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam