StatelessSessionBean+DAO模式,关于事务的一个疑问???

jd29323 2002-11-29 11:10:29
我现在正在准备做一个项目,但我不想使用BMP或CMP,
以为它们对我来说太复杂了,我怕因为经验不足导致一些问题出现
而且我看了大量的文章,觉得StatelessSessionBean+DAO方式也是
非常好的一种选择

但现在我有个问题,就是关于事务方面的
在传统的JSP+JAVABEAN的编程中,控制事务是很简单的一件事情,
只需要用Connection.commit() rollback()就可以很容易实现了

但在StatelessSessionBean中,对于事务处理上,我应该怎么办呢?
我也找了很多文章看,但还是觉得这些文章写的太理论化了,没有
实际点的例子

各位大侠能说一下吗?

如果您仅仅是准备说:
使用UserTrasaction,然后begin() commit()

这样简单的回答的话,请不要回复本帖
...全文
39 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kexsong 2002-12-18
  • 打赏
  • 举报
回复
up
ge_yc 2002-12-17
  • 打赏
  • 举报
回复
容器事务和用户事务各有自己的用处,这要看你的需求是什么样了。像我现在做的活,就没办法将事务放在ejb中,所以就只有调用用户的事物了。
zhuhao081 2002-12-17
  • 打赏
  • 举报
回复
研究研究
up!
starchu1981 2002-11-29
  • 打赏
  • 举报
回复
这是必然的,谁要你用这个方法而不用BMP,CMP
jd29323 2002-11-29
  • 打赏
  • 举报
回复
不用这么复杂吧?还要用SessionSynchronization????
starchu1981 2002-11-29
  • 打赏
  • 举报
回复
最好让EJB容器来管理事务,你的Session Bean需要实现一个
SessionSynchronization接口,它包括三个方法

1.public void afterBegin()
throws EJBException,java.rmi.RemoteException
当一个新的事务开始时调用该方法,可以在方法中执行读取数据,缓存
数据字段等功能。

2.public void beforeCompletion()
throws EJBException,java.rmi.RemoteException
当事务提交前调用此方法,执行写入数据等操作。

3.public void afterCompletion(boolean committed)
throws EJBException,java.rmi.RemoteException
事务提交后调用此方法,committed参数用于指定事务是否成功,若不成
功则事务已回滚,否则已提交。

注意:若在程序中调用了setRollBackOnly()方法,事务将会强制回滚。
cszhz 2002-11-29
  • 打赏
  • 举报
回复
学习中……
charleyshen 2002-11-29
  • 打赏
  • 举报
回复
我觉得比较可行的还是使用container管理的事务,不用涉及JTA之类的东西,代码简洁,维护较为方便。

一个事务操作集中在一个session bean的方法中(因为contain事务只能界定到方法)
charleyshen 2002-11-29
  • 打赏
  • 举报
回复
Stateless session bean不用SessionSynchronization,只要在配置的时候设定就行了
SessionSynchronization这个接口是用在stateful session bean的状态持久化的。
kexsong 2002-11-29
  • 打赏
  • 举报
回复
我给一个sessionbean中使用bean管理事务的例子你参考参考吧:
package com.softvan.session.user;

import javax.ejb.*;
import javax.transaction.*;
import javax.naming.*;
import javax.rmi.*;
import java.rmi.RemoteException;

import com.softvan.cmp.user.*;
import com.softvan.cmp.info.*;

public class UserSessionBean implements SessionBean
{
SessionContext sessionContext;
public void ejbCreate() throws CreateException
{
/**@todo Complete this method*/
}
public void usercreate(String id,String des,String firstname,String lastname,String email,int phone) throws RemoteException
{
/**@todo Complete this method*/
try
{
Context ct = new InitialContext();
javax.transaction.UserTransaction tranContext = (javax.transaction.UserTransaction ) ct.lookup("javax.transaction.UserTransaction");

try
{
sessionContext.getUserTransaction().begin();
Context initial = new InitialContext();
Object objRefUserCMPBean = initial.lookup("UserCMPBean");
UserCMPHome usercmphome = (UserCMPHome) PortableRemoteObject.narrow(objRefUserCMPBean,UserCMPHome.class);
try
{
usercmphome.create(id,des);
}
catch(Exception e)
{
e.printStackTrace(System.out);
}

Context it = new InitialContext();
Object objRefInfoCMPBean = it.lookup("InfoCMPBean");
InfoCMPHome infocmphome = (InfoCMPHome) PortableRemoteObject.narrow(objRefInfoCMPBean,InfoCMPHome.class);
try
{
infocmphome.create(id,firstname,lastname,email,phone);
}
catch(Exception e)
{
e.printStackTrace(System.out);
}
sessionContext.getUserTransaction().commit();
}
catch(Exception e)
{
e.printStackTrace(System.out);
}
}
catch(Exception e)
{
e.printStackTrace(System.out);
}

}
public void ejbRemove()
{
/**@todo Complete this method*/
}
public void ejbActivate()
{
/**@todo Complete this method*/
}
public void ejbPassivate()
{
/**@todo Complete this method*/
}
public void setSessionContext(SessionContext sessionContext)
{
this.sessionContext = sessionContext;
}
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧