请教ejb3事务问题

06-08-10 fuguan2000
         

项目架构 jboss4.4+ejb3+swing

在ejb3中有两中模式 CMP 和BMP,现在想请教的问题是在swing远程客户端怎样控制事务,大概明白cmp方式不需要自己去控制事务.只要有RunntimeException或EJBExceptin 抛出就会自己回滚.不明白怎样使用

         

banq
2006-08-10 15:36

事务是隐含事务,通过ejb-jar.xml配置实现的,缺省情况下每个EJB方法都是被包含在一个事务scope中,无需自己编码。只是在抛Exception时注意是EJBException

fuguan2000
2006-08-10 16:36

如果使用CMP方式 那么会在调用每个EJB 方法时都启动了一个事物.我客户端在一个try{}catch()中 调用了EJB几个方法. 就算某个方法发生RunntimeExceptin 服务器也只能回滚该方法事务. 我想要的问题是在客户端能控制事务的边界. 所以应该选择BMP方式. 使用UserTransaction接口来管理和定义事务边界,并且能同时让EJB几个方法同时回滚.不知道怎样的情况怎么处理.

我在swing客户端 UserTransaction ut = (UserTransaction)ctx.lookup("UserTransaction"); 能够取的事务,但是我使用ut.begin()时该事务就挂了起来,它下面的方法就不会继续执行了. 不知道怎样能很好的在客户端控制事务的边界

fuguan2000
2006-08-10 18:32

banq 等待你的帮助啊 ^_^.

banq
2006-08-14 19:02

>客户端能控制事务的边界

可以设置EJB的事务也就是CMT配置为Mandatory:当你的bean被调用时,事务必须已经在运行,如果不运行,TransactionRequiredException被抛出。确保你的业务一定在事务中运行,这样你的客户端必须出来控制事务了。