我在“无状态SessionBean”中使用UserTransaction来处理事务方面的操作,出问题了。请帮忙看看是怎么回事!!!!! 老兄,只有在bean管理事务的情况下,才能调用getUserTransaction().把你的bean的事务类型设为:Bean就可以了。 <transaction-type>Bean</transaction-type> 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那我要是想用sessionbean+Jdbc完成项目的话没办法使用事务吗? 可以,但不能调用SessionContext.getUserTransaction();Connection.begin();Connection.commit();Connection.rollback().容器会自动处理事务,事务的边界由你为每个方法设定的事物属性决定,不能用上面的方法自己设定事务边界。当方法抛出系统异常(EJBException及其子类)时,或调用SessionContext.RollbackOnly()时,事务回滚;否则事务提交。另外,你可以通过实现会话同步接口(SessionSynchronization)来获得更多的事务通知: afterBegin();事务开始后调用 beforeCommit();事务提交前 afterCommit(boolean flag);事务提交后(flag=true),或事务回滚后(flag=false). 可是,我把我的这个BEAN的ejb-jar.XML配置文件,改成<transaction-type>Bean</transaction-type>然后把<assembly-descriptor>......</assembly-descriptor>删掉,再用:SessionContext.getUserTransaction();就成功了这是为什么? 第一:把bean的事务类型设为:Bean,就是bean管理事务,需要自己定义事务边界。SessionContext.getUserTransaction();Connection.begin();Connection.commit();Connection.rollback().都允许使用。但SessionContext.RollbackOnly()和SessionContext.isRollbackOnly()是禁止使用的。所以一改为<transaction-type>Bean</transaction-type>你的程序就OK了。这就是我第一贴的意思。第二:第二贴是看见你的回贴,以为你要使用容器管理事务。那是容器管理b事务情况下的办法,也就是当<transaction-type>Container</transaction-type>时。 两种都是可以的,就看你选哪个了,不存在冲突。 那请问,用SessionContext.getUserTransaction()来处理事务,和用Connection.begin这两者的躯体区别是什么?在什么样的情况下需要正确的选择他们中的那一个? 那看你的具体用途了,如果在一个事务中只涉及数据库操作,则用Connection.begin()足以,如: ...... Connection.begin(); 数据库操作.... Connection.commit();/Connection.rollback();如果事务中用到了其他资源,包括JMS,调用其它bean的远程方法,数据库操作。则要用SessionContext.getUserTransaction()来处理事务。 最好再问一下,就结帐 :)用这种方式来写项目,和用BMP,有什么区别吗?比如,既然SESSIONBEAN+JDBC实现了事务支持,那用BMP还有什么特殊的好处吗? 这不是一个概念,SessionBean建摸工作流,代表一次会话,作为客户端的代理完成特定的业务逻辑,Stateful SessionBean在整个生命周期中属于同一个客户端,不能被多个客户端共享;而Entitybean建模持久性的商务对象,为客户端提供快速、高效和可重用的数据访问接口,虽然BMP自己管理持久性,但依然可以利用系统提供的非配置性服务,如:实例池、并发管理等,从而提高速度,保证数据一致性。 也就是说,Entitybean侧重于访问数据的高速和一致性;SessionBean侧重于商务逻辑,在事务、安全等方面较强。 因为Entitybean需要较多的系统资源,也有人提出不用Entitybean,而全用SessionBean,主要是无状态的SessionBean。但我认为,用J2EE就是利用其提供的系统及服务来减少编程,所以我认为一个系统中的关键性持久性对象应该用Entitybean来实现,如一个教学管理系统中的学生对象,其它的次要对象则最好不用Entitybean,而用Stateless Sessionbean实现。 这是我随便写的,见笑了,女朋友喊去吃饭,再见。 你说的“如一个教学管理系统中的学生对象,其它的次要对象则最好不用Entitybean,而用Stateless Sessionbean实现”这是什么意思?为什么?能说详细点吗? 因为因为Entitybean需要较多的系统资源,如果不分情况一律用Entitybean的话,系统一大你的服务器就吃不消了。 java运行出错 谁知道这个目录在哪as-install/bin/asant 新手JAVA问题,麻烦大家帮忙看看了. 问个问题!! EJB,struts问题 各位仁兄,麻烦帮忙看看我这段代码,看是哪里的问题!万分感谢! 请问SWT表格可以设行高吗?或者可以换行吗? 怎样用Java在linux上实现类似NT中服务的功能,回答者一率有分!!!! 求一本 侯捷编的 java 经典 请问如何在Applet中关闭其所在的页面? 关于addLayoutComponent的用法 Tomcat怎样设置才能在Win2000上自动启动?
没办法使用事务吗?
afterBegin();事务开始后调用
beforeCommit();事务提交前
afterCommit(boolean flag);事务提交后(flag=true),或事务回滚后(flag=false).
<transaction-type>Bean</transaction-type>
然后把
<assembly-descriptor>
......
</assembly-descriptor>
删掉,
再用:SessionContext.getUserTransaction();
就成功了
这是为什么?
第二:第二贴是看见你的回贴,以为你要使用容器管理事务。那是容器管理b事务情况下的办法,也就是当<transaction-type>Container</transaction-type>时。
两种都是可以的,就看你选哪个了,不存在冲突。
SessionContext.getUserTransaction()来处理事务,和
用Connection.begin
这两者的躯体区别是什么?
在什么样的情况下需要正确的选择他们中的那一个?
......
Connection.begin();
数据库操作....
Connection.commit();/Connection.rollback();
如果事务中用到了其他资源,包括JMS,调用其它bean的远程方法,数据库操作。则要用SessionContext.getUserTransaction()来处理事务。
也就是说,Entitybean侧重于访问数据的高速和一致性;SessionBean侧重于商务逻辑,在事务、安全等方面较强。
因为Entitybean需要较多的系统资源,也有人提出不用Entitybean,而全用SessionBean,主要是无状态的SessionBean。但我认为,用J2EE就是利用其提供的系统及服务来减少编程,所以我认为一个系统中的关键性持久性对象应该用Entitybean来实现,如一个教学管理系统中的学生对象,其它的次要对象则最好不用Entitybean,而用Stateless Sessionbean实现。
这是我随便写的,见笑了,女朋友喊去吃饭,再见。
这是什么意思?为什么?
能说详细点吗?