StatelessSessionBean+DAO模式的一个疑问???

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

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

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

各位大侠能说一下吗?

强烈推荐你使用CMP 非常简单

千万别使用StatelessSessionBean+DAO模式 这需要特定场合
你看petstore也只有一个地方使用。

开始的路别走错。

我觉得你这么说就是根本不应该
N多的大公司都是这么做的,到是使用CMP的很少

我不想把这个主题变成是争论那种方式好
我只是在问用StatelessSessionBean+DAO,应该怎么
实现事务的控制!!!!!!!!!!!

请不要再发类似应该不应该的帖子了
(我只能认为你和我一样,根本没有过EJB的开发经验!)

my GoD!!

首先回答你的问题:DAO模式就是回避事务处理机制来提高性能的。
这也是DAO方式能够生存的唯一理由。

技术是不断发展,CMP JDO是未来的方向,你多看点英文资料吧。
至于为什么,我简单说点理由:
1.EJB J2EE产生的目的是什么?就是让更多的事情由EJB J2EE服务器来完成。
2.CMP将更多的事情交给Server来做。
3.所以CMP是方向
4.你看到的只是过去。

这里没有知道在StatelessSessionBean中
事务应该怎么样实现吗??????

拜托,请不要再说这么理论了!!!
我只想知道,在StatelessSessionBean中,事务是怎么处理的

用UserTransaction来控制

假设ut是lookup到的UserTransaction,那么在事务开始的时候调用
ut.begin();
然后是DAO操作和commit以及rollback
try{
...
some DAO
ut.commit();
}catch(){
ut.rollback();
}

需要注意的是,在事务处理的时候要判断ut的Status,比方说如果该事务已经是在一个事务的过程当中,那么就不需要begin了,具体的可以看一下javax.transaction.UserTransaction
javax.transaction.Status
的文档.


如果用这个的话
那在部署文件中的事务属性
是用Bean还是Container呢???

用Bean

至于用Container还是Bean,简单的说
如果你需要在你的SessionBean里面控制事务,那么就用UT接口,由Bean自己来控制.
如果不需要,那么就用Container,那么我前面说的那些UT代码就不用了

我相信大多数情况用Container就足够了,因为你可以通过设置tran-attribute来满足你大部分的要求,除非你的事务非常特殊......

如果用Container的话,是不是就不需要使用UserTransaction了??

如果我用Container,现在我在一个方法中要执行多个SQL,如:

public void update()
{
for(int i=0;i<10;i++)
{
"insert into mytable values(........)";
}
}

那我应该怎么COMMIT和ROLLBACK呢?
我看到可以用setRollBackOnly()实现回滚,但怎么commit呢?

我说bang,我是在问问题!!!!!!!

你的每个回复都是在教育我应该干嘛干嘛
从来就没有一句是回答我的问题的

拜托你不要再回复了

够胆,敢大骂版主,小心了.

如果是Container你不需要再commit或rollback了,你的应用服务器会帮你做好的.譬如执行过程中有异常弄出来,就自动回滚了,没有,就搞定了.

我第一次来,不知道斑竹不斑竹的
只是这人总是在说教,弄的很烦

我一开始也是以为用Container,容器会帮我提交和回滚
可是在我的函数中要向两个不同的SERVER上的DB,INSERT
数据,结果我发现在一个DB上出来问题,但向另一个INSERT
应该被回滚,但实际并不是这样,当时我觉得很纳闷,就
来这问问题了,既然各位都说用Container,
容器会帮我提交和回滚,那看来是我的程序有问题,我再看看去

另外,我想问一下,在写XML的配置文件的时候,是不是没必要
对每个函数的事务属性都设置为Required,对于仅仅是SELECT
的函数,我是不是应该设置为NotSupported,这样是不是可以
提高性能

这位老兄怎么这么糙?以前是铁匠吧?对container这么烦?

向两个不同的SERVER上的DB进行操作,我认为用BMP来控制好一些