如果B是新开启一个事务的话,执行B事务时候,A事务就会挂起,B的成败与否于A无关,B事务完成,A继续做下去.如果B失败时候让A的事务回滚,这还是一个事务的嵌套吗?
解决方案 »
- BufferedRandomAccessFile如何读取文件?
- spring2.0下配置jndi遇到的很棘手的问题,特急!!
- struts 配置路径问题{入门阶段}
- jboss部署EJB工程日志问题
- XML的问题
- 跪求struts+spring+hibernate网上购物商城源码
- <data-sources>连接数据库的问题
- 求大哥大姐们给个JDK1.2.2和TOMCAT的下载地址!!
- 问个关于hibernate连接超时的问题
- WebWorkBench Developer Café(WDC)标准J2EE框架下经验或者资料询问:)
- <<精通ejb第二>>关于CMP的例子
- 谁能帮我在Applet中实现像如下的Html代码在页面中实现的效果(急!!!)
我想是这样:
看你EJB B的事务属性是什么,如果是加入EJB A的事务的话,那B发生rollback时A也rollback
如果EJB B的事务定义为独立的话,那A就不会rollback
"B发生rollback时A也rollback",
可是怎么设置呢?A也需要设置一下吧?又怎么设呢?谢谢!还有,如果不能像我想象得那么做,
那么可不可以在调用B的时候,把A的事务处理的对象传到B里面。
这样的话,如果B里的操作失败了,那么执行那个传进来的事务处理对象的rollback(),
会不会也能达到预期的效果呢?再次感谢!
我急需答案呀!ThanX!!!
当B事务rollback的时候,A也被rollback。
Require时:如果客户端正在一个运行的事务中调用一个企业Bean的方法,这个方法就在这个客户端的事务中执行。如果客户端不关联一个事务,这个容器在运行该方法前开始一个新的事务。Required属性在许多事务环境中可以很好的工作,因此你可以把它作为一个默认值,至少可以在早期开发中使用。因为事务的属性是在部署描述符中声明的,在以后的任何时候修改它们都很容易。
也就是开始的顺序是:
A的事务开始 -> B的事务开始 -> B的事务结束 -> A的事务结束
如果是这样,有什么办法吗?
(要的很急,我没时间找资料了,还请高人明示,在下不胜感激)
如果不指定“事务属性”的话,“事务属性”是什么样的呢?
还有,是不是我的A的“事务属性”必须要设置成什么才能实现我的目标?附:
我的ejbbean A的ejb-jar.xml是这样的:
<?xml version="1.0"?><!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'><ejb-jar>
<enterprise-beans>
<session>
<ejb-name>AEjbHome</ejb-name>
<home>MyEJB.AEjbHome</home>
<remote>MyEJB.AEjb</remote>
<ejb-class>MyEJB.AEjbBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
<env-entry>
<env-entry-name>BEAS</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>100.0</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>MSFT</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>150.0</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
</ejb-jar>我的ejbbean B的ejb-jar.xml是这样的:<?xml version="1.0"?>
<!-- DAGen template file Version 1.0 2002/09/18 -->
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>BEjbHome</ejb-name>
<home>MyEJB.BEjbHome</home>
<remote>MyEJB.BEjb</remote>
<ejb-class>MyEJB.BEjbBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
<env-entry>
<env-entry-name>BEAS</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>100.0</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>MSFT</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>150.0</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
</ejb-jar>
<!-- DAGen template file Version 1.0 2002/09/18 -->
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>BEjbHome</ejb-name>
<home>MyEJB.BEjbHome</home>
<remote>MyEJB.BEjb</remote>
<ejb-class>MyEJB.BEjbBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>//此处bean改为Container
<env-entry>
<env-entry-name>BEAS</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>100.0</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>MSFT</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>150.0</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
//加上这一段
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>statelessSession</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
//加上这一段
</ejb-jar>
出了错,能在外面的事务处理rollback()吗?是不是只要在外面的事务处理里加入相应的catch(),
然后再在那个代码段里执行rollback()就可以了呢?
*****************************( start )*****************************
java.rmi.RemoteException: Error during postInvoke.; nested exception is:
java.lang.Exception: Stateless session beans with bean-managed transactions must commit or rollback their transactions before completing a business method.Start server side stack trace:
java.rmi.RemoteException: Error during postInvoke.; nested exception is:
java.lang.Exception: Stateless session beans with bean-managed transactions must commit or rollback their transactions before completing a business method.
java.lang.Exception: Stateless session beans with bean-managed transactions must commit or rollback their transactions before completing a business method.
at weblogic.ejb20.manager.StatelessManager.postInvoke(StatelessManager.java:192)
at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:202)请问这是什么意思?
有什么问题吗?