关于Web端调用Ejb 方法报Cannot commit transaction.的问题

      我正在作一个消息处理方面的开发,Ejb的方法已经写好,但是web端调用时报错java.lang.IllegalStateException: Cannot commit transaction. xid=106:2fded26aad02662a, status=Committed
 
    我的Ejb 方法的代码如下:
   
     实现方法:
    public  final void Message(Long msgId) throws PFException {
               // begin-user-code
               //System.out.println("Message Driven Bean got message " + jmsMsg);
               // TODO:  do business logic here
                     String strDealResult = "FAILED";
                     if (log.isDebugEnabled()) log.debug("开始消息bean收到数据...");
                 try {
                    Thread.sleep(2000);
                    Resources res = Resources.currentThreadResources("消息处理BEAN");
                    res.commitCurrentTransaction();
                    log.debug("msgId:"+msgId);
                    try {
                                res.beginNewTransaction(Resources.tableToUWFE,false);
                                OmsMessageLog OmsMessage = (OmsMessageLog)findSession().get(OmsMessageLog.class,msgId);
                                LongJmsMessageId = msgId;
                                strMessageContent = OmsMessage.getMsg1();
                                strMessageType = OmsMessage.getMsgType();
                                OmsInterfaceData jmsData = new OmsInterfaceData(OmsMessage.getMsg1());
                               
                                //根据xml解析过来的WORK_FLOW_TEMPLATE_CODE获得定单类型,然后根据定单类型进行不同的消息处理
                                dealMessage(jmsData);
                                res.commitTransaction();
                                strDealResult = "SUCCESS";
                        } catch (java.lang.Throwable t) {
                                try{
                                        res.rollbackTransaction();
                                }catch(java.lang.Throwable t1){
                                        log.error(t.getMessage(),t);
                                        t1.printStackTrace();
                                }
                                log.error(t.getMessage(), t);
                                t.printStackTrace();
                        }
                        try{
                                res.beginNewTransaction(Resources.tableToUWFE,false);
                                if (log.isDebugEnabled()) log.debug("开始执行修改消息处理结果!");
                                if(strDealResult.equals("SUCCESS"))
                                    {
                                      PreparedStatement preparedstatement = null;
                                      try{
                                        preparedstatement = findSession().connection().prepareStatement("DELETE    FROM                                      OMS_MESSAGE_FAIL_LOG  WHERE MESSAGE_ID = ? ");
                                        preparedstatement.setLong(1, msgId.longValue());
                                        preparedstatement.executeUpdate();
                                      }catch( SQLException se ){
                                           throw new RMException( "删除OMS_MESSAGE_FAIL_LOG表时出错,设备ID是:" + msgId +    "SQLEror是:"+ se.getMessage() );
                                      }finally{
                                          if( preparedstatement != null ){
                                           try{
                                             preparedstatement.close();
                                               }catch( SQLException e ){
                                               log.error( "关闭preparedStatment失败,继续运行" + e );
                                               }
                                              }
                                            }
                                    }
                                AgentHelper.recordMessageDealResult(msgId,strDealResult);
                                if (log.isDebugEnabled()) log.debug("结束提交修改消息处理结果!");
                                res.commitTransaction();
                                if (log.isDebugEnabled()) log.debug("结束提交修改消息处理结果!");
                               }catch(java.lang.Throwable t){
                                try{
                                        if (log.isDebugEnabled()) log.debug("回滚提交修改消息处理结果!");
                                        res.rollbackTransaction();
                                        if (log.isDebugEnabled()) log.debug("结束回滚提交修改消息处理结果!");
                                }catch(java.lang.Throwable t1){
                                        log.error(t.getMessage(),t);
                                        t1.printStackTrace();
                                }
                        }
                       }
                       catch (java.lang.Throwable t) {
                         log.error(strMessageTitle + ":发送消息发生异常!" + t.getMessage(), t);
                         throw new PFException(strMessageTitle + ":发送消息发生异常!" + t.getMessage());
                       }
                       finally{
                       Resources.closeThreadResources("消息处理BEAN");
                      }
        log.debug("消息处理结束");
     }

       Ejb Bean调用:
              public void Message (Long strMsgId) throws PFException {
             try {
                    Config newConfig = new Config();
                    newConfig.Message(strMsgId);
                    log.debug("OMS消息重发调用结束");
                } catch (java.lang.Throwable t) {
                        log.error(strMessageTitle + ":重新发送消息发生异常!" + t.getMessage(), t);
                        throw new PFException(strMessageTitle + ":重新发送消息发生异常!" + t.getMessage());
                }
        }
       

        web端的调用方法:

public void Message(HttpServletRequest request,
                          HttpServletResponse response) throws Throwable {
    request.setCharacterEncoding("GBK");
    String strMsgId = request.getParameter("strMsgId");
    PrintWriter writer = response.getWriter();
    log.debug("strMsgId:"+strMsgId);
    log.debug("Long.getLong(strMsgId):"+new Long(strMsgId));

    try {
      if (OmsConst.ServicePosition.equals(OmsConst.ServicePosition_REMOTE)) {
        ComponentDispatcher remote = OmsHelper.findRemoteComponentDispatcher();
        log.debug("消息重发调用结束web");
        remote.Message(new Long(strMsgId));
        log.debug("消息重发调用结束web");
        remote.remove();
      }
      else if (OmsConst.ServicePosition.equals(OmsConst.ServicePosition_LOCAL)){
        ComponentDispatcherLocal local = OmsHelper.findLocalComponentDispatcher();
        log.debug("消息重发调用结束web");
        local.Message(new Long(strMsgId));
        log.debug("消息重发调用结束web");
        local.remove();
      }
      writer.print("TRUE");
    }catch (java.lang.Throwable t) {
      writer.print("TRUE");
      log.error( ":发送消息发生异常!" +t.getMessage(),t);
      throw new Throwable( ":发送消息发生异常!" +t.getMessage());
    }
  }

日志报:

(DEBUG)(Config.java:233)--开始执行修改消息处理结果!
(WARN )(Resources.java:240)--请输入申请Resources的附加信息
(WARN )(Resources.java:240)--请输入申请Resources的附加信息
(DEBUG)(Config.java:254)--结束提交修改消息处理结果!
(DEBUG)(Config.java:256)--结束提交修改消息处理结果!
(DEBUG)(Config.java:275)--OMS消息重发结束
(DEBUG)(ComponentDispatcherBean.java:997)--OMS消息重发调用结束
(ERROR)(Message.java:96)--:发送消息发生异常!Exception while commiting Tx : 106:2fded26aad02662a; nested exception is:
 java.lang.IllegalStateException: Cannot commit transaction. xid=106:2fded26aad02662a, status=Committed
java.rmi.RemoteException: Exception while commiting Tx : 106:2fded26aad02662a; nested exception is:
 java.lang.IllegalStateException: Cannot commit transaction. xid=106:2fded26aad02662a, status=Committed
 at weblogic.ejb20.internal.EJBRuntimeUtils.throwRemoteException(EJBRuntimeUtils.java:103)
 at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:323)
 at weblogic.ejb20.internal.StatelessEJBObject.postInvoke(StatelessEJBObject.java:141)
 at com.ai.oms.pf.component.ejb.ComponentDispatcherBean_b9t84k_EOImpl.ResendMessage(ComponentDispatcherBean_b9t84k_EOImpl.java:2862)
 at com.ai.oms.web.config.Message.ResendMessage(Message.java:82)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at com.ai.appframe2.web.action.RequestProcessor.exeMethod(RequestProcessor.java:91)
 at com.ai.appframe2.web.action.RequestProcessor.process(RequestProcessor.java:51)
 at com.ai.appframe2.web.action.CentralControlServlet.execute(CentralControlServlet.java:73)
 at com.ai.appframe2.web.BaseServer.processPost(BaseServer.java:123)
 at com.ai.appframe2.web.BaseServer.doGet(BaseServer.java:97)
 at com.ai.appframe2.web.BaseServer.doPost(BaseServer.java:87)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1104)
 at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:430)
 at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:20)
 at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
 at com.ai.appframe2.monitor.util.URLMonitorFilter.doFilter(URLMonitorFilter.java:87)
 at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
 at com.ai.oms.web.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:107)
 at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
 at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5770)
 at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:690)
 at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3230)
 at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2642)
 at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:262)
 at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:224)
Caused by: java.lang.IllegalStateException: Cannot commit transaction. xid=106:2fded26aad02662a, status=Committed
 at weblogic.transaction.internal.TransactionImpl.throwIllegalStateException(TransactionImpl.java:1626)
 at weblogic.transaction.internal.TransactionImpl.checkIfCommitPossible(TransactionImpl.java:1528)
 at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:256)
 at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:234)
 at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:300)
 ... 29 more


   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值