J2EE里的事务一问(必须用EJB才能用JTA吗?)

03-12-18 j2eenb
         

我们要使用容器的事务功能,一般都是在EJB(SESSION BEAN或ENTITY BEAN)

里写如下代码:

javax.transaction.UserTransaction tx = new InitialContext().lookup("javax.transaction.UserTransaction");

tx.begin();

......

tx.commit();

我想问的是,如果我不想用EJB,能不能在普通的BEAN里这样来

用事务呢?

因为我的应用是跨两个数据库,但我不想用EJB

我的APP SERVER是WEBLOGIC 8.1

         

banq
2003-12-18 15:45

EJB中不必写入事务语句,你之前在EJb中加入JTA用法是错误的。

用普通JavaBeans倒是应该写入JTA这条语句,但是请注意,事务自己处理是非常复杂,因为涉及Lock问题,会发生自己搞自己非常烦琐的问题,几乎现在全世界程序员中处理多个事务Lock问题的人不多。

你可以看看所有Web的开源代码,几乎看不到他们中有JTA语句,因为他们都不需要事务,如果你需要事务,又不想成为稀缺的程序员。

建议你还是使用EJB,因为它自动帮助你实现了事务。

j2eenb
2003-12-18 16:12

你说“EJB中不必写入事务语句,你之前在EJb中加入JTA用法是错误的。”

如果我不用容器管理事务,那当然需要在EJB按照我的方法来处理事务。

而且,很重要的一点是,很多大项目,都是我这么写的,而不会用

容器来管理事务包括我们现在给银行做的系统(1000多万的一个核心系统)

------------------------------------------------------------

有没有人研究过,不使用EJB,怎么来处理事务的问题呢?

我们很想用Spring,但不想把EJB弄到Spring里,又面临

事务处理的问题。

wwlhp@jdon.com
2003-12-18 17:29

我想问一下,嵌套事务如何使用呢?能给一小段代码看看么?谢了先!

DennisLee
2003-12-18 17:37

未必,我认为SUN的JTA只是OTS的一部分,如果你熟悉corba的OTS规范,使用其提供的API可以完成分布式对象的事物处理.但这样做的前提是你必须要手工提供中间件的事务服务,即SUN专为容器厂商提供的JTS API,如此以来

你的作为服务端的普通BEAN,(因为你不使用EJB容器),必须通过调用JTS API来提供事务,那么客户段的BEAN就可以调用JTA来启动/终止事务,但这样

做的后果和可靠性是显而易见的.我认为你还是使用中间件来完成事务

4Go 1 2 3 4 下一页