执行一个大存储过程时,提示Socket超时,怎么办?(急)
我的一个程序里调用存储过程执行,但这个存储过程的执行需要花费比较长的时间,而在这期间,weblogic后台报了异常:
SocketTimeoutException: Read timed out
at jrockit.net.SocketNativeIO.readBytesPinned(I[BIII)I(Native Method)
at jrockit.net.SocketNativeIO.socketRead(Ljava.io.FileDescriptor;[BIII)I(Unknown Source)
at java.net.SocketInputStream.socketRead0(Ljava.io.FileDescriptor;[BIII)I(SocketInputStream.java:???)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
at java.io.DataInputStream.readLine(DataInputStream.java:562)
at weblogic.servlet.proxy.GenericProxyServlet.readStatus(GenericProxyServlet.java:682)
at weblogic.servlet.proxy.HttpClusterServlet.sendResponse(HttpClusterServlet.java:1442)
at weblogic.servlet.proxy.HttpClusterServlet.service(HttpClusterServlet.java:306)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7047)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
不知该怎么解决???
[解决办法]
可否改成异步的?
先发布命令
然后返回参数定时去取
我以前也有用存储过程,需要执行三四个小时的例子
[解决办法]
恐怖的设计。
[解决办法]
用springside里面的activeMQ,实现异步,可以解决你的问题
[解决办法]
只有用异步拉,同步除非把存储过程写的高效点,优化下sql,要不改下transaction的超时时间