莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          websphere錯誤備忘錄

          Posted on 2007-02-06 12:27 dennis 閱讀(1282) 評論(0)  編輯  收藏 所屬分類: java
          ?項目已經上線,昨天客戶發現一個問題,某個操作取消不了,查看一下log,系統是websphere5.x,發現以下的異常:

          E WLTC0033E: 在清除未解析 LocalTransactionContainment 時,資源 jdbc/oa回滾。
          [07-1-15 17:37:09:280 CST] 57961377 LocalTranCoor E WLTC0032E: 一個或多個資源回滾。一個未解析的 LocalTransactionContainment 有一個未解析的回滾操作。
          [07-1-15 17:37:09:280 CST] 57961377 WebAppTransac E WTRN0043I: 由于 setRollbackOnly,本地事務回滾。
          [07-1-15 17:37:09:296 CST] 57961377 WebGroup????? E SRVE0026E: [Servlet 錯誤]-[LocalTransaction rolled-back due to setRollbackOnly]:com.ibm.ws.LocalTransaction.RolledbackException
          ??? at com.ibm.ws.LocalTransaction.LocalTranCoordImpl.cleanup(LocalTranCoordImpl.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.webapp.WebAppTransactionCollaborator.postInvoke(WebAppTransactionCollaborator.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java(Compiled Code))
          ??? at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java(Compiled Code))
          ??? at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code))
          ??? at com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code))
          ??? at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))



          查了下代碼,一開始沒發現有什么問題,不過是4,5個增刪操作(兩張表以上)。把錯誤信息輸入google搜索,挺多人碰到這個錯誤,有的說是websphere的bug,有的說要把AutoCommit設置為true.
          websphere的事務處理確實有bug,不過我們已經打過補丁,把AutoCommit設置為true的話,與我們所需要的效果不同,畢竟需要這些操作在同一個事務內。昨天查了一個晚上沒找到原因,今天一段一段地調試代碼,讓我發現問題了:
          conn = ConnectionManager.getConnection();
          conn.setAutoCommit(false);
          在conn.commit()前,我進行了一個判斷:

          if(....){
          ? return;
          }
          conn.commit

          直接return,導致后面的conn.commit()沒有執行,事務不完整。修改成:
          if(....){
          ? ...
          ? conn.commit();
          ? return;
          }

          所以這個異常的出現,很有可能是你的事務處理有問題,那條教訓還是很有用的:一個方法最好不要有多個return語句。
          主站蜘蛛池模板: 如皋市| 莲花县| 洮南市| 长葛市| 永平县| 池州市| 宁都县| 平武县| 淳化县| 甘德县| 定边县| 特克斯县| 灵璧县| 平邑县| 大田县| 鹿泉市| 龙泉市| 务川| 浙江省| 北京市| 来宾市| 徐闻县| 兴化市| 南木林县| 和平县| 泾源县| 蚌埠市| 岑巩县| 明溪县| 双牌县| 莫力| 即墨市| 江口县| 当雄县| 新绛县| 扎鲁特旗| 凤阳县| 莱阳市| 徐汇区| 白山市| 祁门县|