是的,即使使用bean管理事务,容器也要做如下工作:
1)当客户端调用一个商业方法时,容器挂起所有可能和客户端关联的事务。如果已经
有事务和这个实例相关联(如实例在先前的方法中启动了事务),容器就把方法与这个
事务相关联。
2)容器必须使javax.transaction.UserTransaction接口对于企业bean的商业方法,消
息监听方法和ejbTimeout方法是可用的。
3)当实例用javax.transaction.UserTransaction接口划分事务,容器必须支持所有被
实例的事务begin()和commit()—orrollback()方法间使用的资源管理器。当实例企图
提交事务时,容器负责事务提交的全局统一协调。
4)对于一个stateful session bean,它的商业方法可能开始了一个事务但没有
committing 或rolling back,这种情况,容器必须在事务和多个客户调用之间保持这
个关联直到实例committing 或rolling back。当客户端调用了下一个商业方法,容器
必须确保是在这个事务上下文里调用这个商业方法。对于stateless session bean的事务
如果一个stateless session bean实例启动一个事务,它必须在方法返回前提交事务。容器必须能检测出在一个商业方法中启动事务但没有提交的情况并进行如下处理:
 记录一个应用错误,向system administrator发送警告
 Roll back被启动的事务
 丢弃这个实例
 抛出java.rmi.RemoteException(remote client)或者javax.ejb.EJBException
(local client)异常另外,bean管理事务时EJBContext的setRollbackOnly和getRollbackOnly等方法不可以
使用。

解决方案 »

  1.   

    中间件比如Weblogic就是要分担一些程序员的工作比如管理事条、安全等。
    这样程序员就只关心业务逻辑即可。SUN公司提供两个标准:一个是给服务器开发商的,另一个是开发EJB组件的标准。
    服务器开发商(比如BEA)必须按照SUN规定的标准来生产中间件(比如WEBLOGIC)。
    如果程序员按照“开发EJB组件的标准”写程序,那么写的组件很容易部署到中间件
    (WEBLOGIC)上。GOOD LUCK!