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

02-11-29 uu_snow
我现在正在准备做一个项目,但我不想使用BMP或CMP,

以为它们对我来说太复杂了,我怕因为经验不足导致一些问题出现

而且我看了大量的文章,觉得StatelessSessionBean+DAO方式也是

非常好的一种选择

但现在我有个问题,就是关于事务方面的

在传统的JSP+JAVABEAN的编程中,控制事务是很简单的一件事情,

只需要用Connection.commit() rollback()就可以很容易实现了

但在StatelessSessionBean中,对于事务处理上,我应该怎么办呢?

我也找了很多文章看,但还是觉得这些文章写的太理论化了,没有

实际点的例子

各位大侠能说一下吗?

banq
2002-11-29 11:08
强烈推荐你使用CMP 非常简单

千万别使用StatelessSessionBean+DAO模式 这需要特定场合

你看petstore也只有一个地方使用。

开始的路别走错。

uu_snow
2002-11-29 11:22
我觉得你这么说就是根本不应该

N多的大公司都是这么做的,到是使用CMP的很少

我不想把这个主题变成是争论那种方式好

我只是在问用StatelessSessionBean+DAO,应该怎么

实现事务的控制!!!!!!!!!!!

请不要再发类似应该不应该的帖子了

(我只能认为你和我一样,根本没有过EJB的开发经验!)

banq
2002-11-29 11:52
my GoD!!

首先回答你的问题:DAO模式就是回避事务处理机制来提高性能的。

这也是DAO方式能够生存的唯一理由。

技术是不断发展,CMP JDO是未来的方向,你多看点英文资料吧。

至于为什么,我简单说点理由:

1.EJB J2EE产生的目的是什么?就是让更多的事情由EJB J2EE服务器来完成。

2.CMP将更多的事情交给Server来做。

3.所以CMP是方向

4.你看到的只是过去。

uu_snow
2002-11-29 11:56
这里没有知道在StatelessSessionBean中

事务应该怎么样实现吗??????

拜托,请不要再说这么理论了!!!

我只想知道,在StatelessSessionBean中,事务是怎么处理的

wys1978
2002-11-29 12:32
用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

的文档.

uu_snow
2002-11-29 13:05
如果用这个的话

那在部署文件中的事务属性

是用Bean还是Container呢???

wys1978
2002-11-29 14:10
用Bean

至于用Container还是Bean,简单的说

如果你需要在你的SessionBean里面控制事务,那么就用UT接口,由Bean自己来控制.

如果不需要,那么就用Container,那么我前面说的那些UT代码就不用了

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

uu_snow
2002-11-29 14:34
如果用Container的话,是不是就不需要使用UserTransaction了??

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

public void update()

{

for(int i=0;i<10;i++)

{

"insert into mytable values(........)";

}

}

那我应该怎么COMMIT和ROLLBACK呢?

我看到可以用setRollBackOnly()实现回滚,但怎么commit呢?

banq
2002-11-29 14:58
使用Container(容器),当然就不需要UserTransaction,

这不是又回到我上面的答案上来了?

你对DAo没有深入了解,你需要了解为什么使用DAO,如果DAO那么好,那不是Enetity Bean就从EJB 2.0以后规范中删除了?这么点简单道理没想通?

看看这篇文章:

http://dev2dev.bea.com.cn/articlesnews/article_detail.jsp?id=1748&subject_id=article_column

uu_snow
2002-11-29 16:15
我说bang,我是在问问题!!!!!!!

你的每个回复都是在教育我应该干嘛干嘛

从来就没有一句是回答我的问题的

拜托你不要再回复了

why10k
2002-11-29 18:42
够胆,敢大骂版主,小心了.

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

uu_snow
2002-11-29 19:05
我第一次来,不知道斑竹不斑竹的

只是这人总是在说教,弄的很烦

我一开始也是以为用Container,容器会帮我提交和回滚

可是在我的函数中要向两个不同的SERVER上的DB,INSERT

数据,结果我发现在一个DB上出来问题,但向另一个INSERT

应该被回滚,但实际并不是这样,当时我觉得很纳闷,就

来这问问题了,既然各位都说用Container,

容器会帮我提交和回滚,那看来是我的程序有问题,我再看看去

另外,我想问一下,在写XML的配置文件的时候,是不是没必要

对每个函数的事务属性都设置为Required,对于仅仅是SELECT

的函数,我是不是应该设置为NotSupported,这样是不是可以

提高性能

sam_java
2002-11-30 05:47
这位老兄怎么这么糙?以前是铁匠吧?对container这么烦?

tomsonxu
2002-12-02 01:36
向两个不同的SERVER上的DB进行操作,我认为用BMP来控制好一些

猜你喜欢