javax.transaction.RollbackException EJB事务提交报错, 急~~~

alittlegoodman 2010-03-18 08:39:58
使用websphere6.0搭建的环境, EJB提交时报错

[-INTF-]com.asdf.cdf.intf.ejb.IntfServiceSessionBean.commit(IntfServiceSessionBean.java(?:Line:?)[slf5s.MESSAGE]

javax.transaction.RollbackException
at com.ibm.ws.Transaction.JTA.TransactionImpl.stage3CommitProcessing(TransactionImpl.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.TransactionImpl.processCommit(TransactionImpl.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.UserTransactionImpl.commit(UserTransactionImpl.java(Compiled Code))
at com.ibm.ejs.container.UserTransactionWrapper.commit(UserTransactionWrapper.java(Compiled Code))
at com.asdf.cdf.intf.ejb.IntfServiceSessionBean.commit(IntfServiceSessionBean.java(Compiled Code))
at com.asdf.cdf.intf.ejb.IntfServiceSessionBean.manageProduct(IntfServiceSessionBean.java(Compiled Code))
at com.asdf.cdf.intf.ejb.EJSRemoteStatelessIntfServiceSession_f8388209.manageProduct(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1250.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
at com.ibm.rmi.util.ProxyUtil$4.run(ProxyUtil.java(Compiled Code))
at java.security.AccessController.doPrivileged1(Native Method)
at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
at com.ibm.rmi.util.ProxyUtil.invokeWithClassLoaders(ProxyUtil.java(Compiled Code))
at com.ibm.CORBA.iiop.ClientDelegate.invoke(ClientDelegate.java(Compiled Code))

麻烦帮忙分析下报错原因? 在线等~~~
...全文
529 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
alittlegoodman 2010-03-26
  • 打赏
  • 举报
回复
在顶 没人知道吗
alittlegoodman 2010-03-22
  • 打赏
  • 举报
回复
在顶起来
alittlegoodman1 2010-03-19
  • 打赏
  • 举报
回复
自己顶, 会不会是事务冲突了

这个方法有很多地方同时调用
alittlegoodman 2010-03-19
  • 打赏
  • 举报
回复
真的没人知道吗?
CSDN高人这么多。。。。
alittlegoodman 2010-03-18
  • 打赏
  • 举报
回复
LLR 数据源的编程注意事项和限制
可按照使用来自任何其他数据源的 JDBC 连接的方式,在应用程序中使用来自启用了 LLR 的数据源的 JDBC 连接:在开始某个事务之后,在 JNDI 树中查找数据源,然后请求一个来自该数据源的连接。但是,使用 LLR 优化时,WebLogic Server 会在内部管理连接请求,并以不同于在 XA 事务中使用的处理方式来处理事务处理。有关“记录上一个资源”的工作方式的详细信息,请参阅“WebLogic JTA 编程”中的“记录上一个资源”事务优化。

请注意以下内容:

使用 LLR 数据源进行编程时,必须在调用 LLR 数据源的 getConnection 之前启动全局事务。如果在启动全局事务之前调用 getConnection,则会使对该连接的所有操作都处于全局事务之外。
仅对每个事务保留一个内部 JDBC LLR 连接,并且该连接将用于整个事务处理。
保留的连接始终承载在该事务的协调器服务器上。请确保该数据源已定位到协调服务器或群集。另请参阅“WebLogic JTA 编程”中的使用 LLR 优化性能。
对于该事务中来自同名数据源的其他 JDBC 连接请求,操作会路由到来自原始连接请求的已保留连接,即使后续请求是在该数据源的其他实例(即部署在与为第一个请求提供连接的原始数据源所在服务器不同的服务器上的数据源)上做出的,也是如此。请注意以下内容:
在功能和性能方面,路由的 LLR 连接可能不如本地承载的 XA 连接。(请参阅在多服务器配置中使用非 XA 资源时可能产生的性能损失。)
连接请求路由会限制并发事务的个数。最大并发 LLR 事务数等于协调器的 JDBC LLR 数据源的已配置大小 (MaxCapacity)。
路由连接的功能少于本地连接的功能,可能会因此而导致失败。具体地说,在查询 ResultSet 中的非序列化“自定义”数据类型可能会失败。
alittlegoodman 2010-03-18
  • 打赏
  • 举报
回复
只有单个 LLR 数据源的实例可以参与某个特定事务。单个 LLR 数据源可在多个 WebLogic 服务器上具有实例,如果两个数据源具有相同的已配置名称,则这两个数据源会被认为是相同的。如果检测到多个 LLR 数据源实例,并且它们不是同一数据源的实例,则事务管理器会回滚事务。
实现 weblogic.transaction.nonxa.NonXAResource 接口的资源适配器(连接器)不能参与 LLR 资源也同时参与的全局事务,因为二者都必须是事务中的最后一个资源。如果两种资源类型都参与同一个事务,则在检测到此冲突时,事务的 commit() 方法会引发 javax.transaction.RollbackException。

由于 LLR 连接对于数据库处理使用单独的本地事务,因此,在 LLR 处理过程中,使用 XA 连接对同一数据库进行的任何更改(和进行的任何锁定)都将不可见,即使所有的处理都发生在同一全局事务中,也是如此。在某些情况下,这可能会在数据库中引起死锁。在单个全局事务中不应在同一数据库中混合 XA 和 LLR 处理。
来自某个 LLR 数据源的连接不能参与由外部事务管理器协调的事务,如由远程对象请求代理或由 Tuxedo 启动的事务。
全局事务不能跨至另一个包含了与某个 LLR 数据源同名的数据源的旧式域。
对于 JDBC LLR 2PC 事务,如果事务数据太大,无法装入 LLR 表中,则事务将会失败,并在提交期间生成一个回滚异常。如果在事务处理过程中,您的应用程序添加了许多事务属性,则会发生上述情况。(请参阅JTA 的 BEA WebLogic 扩展。)如果发生了上述情况,那么,数据库管理员可手工创建一个具有更大的列的表。
alittlegoodman 2010-03-18
  • 打赏
  • 举报
回复
在网上找了很久,都没有结果, 有很多人遇到这个问题,但是都没有解决

代码:
public HashMap manageProduct(CommonValue commonValue) throws IntfException
{
try {
startTrans();
HashMap ret = new HashMap();
ret = Intf4UnifiedDealing.manageProduct(commonValue);
commit();
return ret;
}
catch (IntfException bx)
{
log.error("", bx);
rollback();
throw bx;
}
catch (Throwable ex)
{
log.error("", ex);
rollback();
throw new IntfException(IntfErrorCodeConstants.ERR_INTF_COMMON_INTERROGATION,"" + ex);
}
}

Intf4UnifiedDealing.manageProduct(commonValue);
这期间做了很多操作,调用了webservice接口(这里延迟了20多秒), 最开始怀疑是不是EJB事务超时,但是看日志不太像(整个执行过程不超过一分钟)
解决另开贴给分!!!
michaellufhl 2010-03-18
  • 打赏
  • 举报
回复
没人知道,除非还有其他线索。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧