環境描述:
在分佈式chuli在EJB處理數據庫相關操作時,可能因爲數據量太大問題,影響到web服務器和weblogic之間通信時間超長,超出weblogic所允許的時間後,weblogic會自動將連接斷掉。這就造成web出現異常,而ejb中事務還在進行處理。給用戶造成處理失敗的提示,造成web層和應用層處理結果不統一。
web服務器出現異常如下:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.RemoteException: EJB Exception: ; nested exception is:
java.lang.AbstractMethodError
at com.sun.corba.se.internal.iiop.ShutdownUtilDelegate.mapSystemException(ShutdownUtilDelegate.java:64)
at javax.rmi.CORBA.Util.mapSystemException(Util.java:65)
Caused by: java.rmi.RemoteException: EJB Exception: ; nested exception is:
java.lang.AbstractMethodError
at weblogic.ejb20.internal.EJBRuntimeUtils.throwRemoteException(EJBRuntimeUtils.java:102)
at weblogic.ejb20.internal.BaseEJBHome.handleSystemException(BaseEJBHome.java:307)
at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:263)
at weblogic.ejb20.internal.StatelessEJBObject.postInvoke(StatelessEJBObject.java:140)
Caused by: java.lang.AbstractMethodError
at oracle.jdbc.driver.OracleConnection.unwrapCompletely(OracleConnection.java:5092)
at oracle.jdbc.driver.OracleConnection.physicalConnectionWithin(OracleConnection.java:5141)
at oracle.sql.ARRAY.<init>(ARRAY.java:117)
原因:tomcat連接weblogic空閒時間超時。
解決辦法:進入到weblogic控制檯,選擇Servers,如:myserver,在選擇“Protocols”頁,選擇“General”頁,選擇Advanced Options 的“Show”,顯示頁中,“Idle Connection Timeout”爲連接的最大空閒時間,默認爲600秒(5分鐘),可以更具自己的需求修改,如1200秒(10分鐘)。
圖例:
當然,web等待時間如果太長,用戶使用體驗也不是很好,這就要根據系統的需要了,如:採用異步方式就可避免。