环境描述:
在分布式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等待时间如果太长,用户使用体验也不是很好,这就要根据系统的需要了,如:采用异步方式就可避免。