Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Web服务具有随机ClosedByInterruptException_Java_Oracle_Web Services_Exception_Glassfish - Fatal编程技术网

Java Web服务具有随机ClosedByInterruptException

Java Web服务具有随机ClosedByInterruptException,java,oracle,web-services,exception,glassfish,Java,Oracle,Web Services,Exception,Glassfish,我听说有一个Java文件通道错误,但我在web服务中遇到了这个错误 我得到以下例外情况: java.nio.channels.ClosedByInterruptException at java.nio.channels.spi.AbstractInterruptibleChannel.end (AbstractInterruptibleChannel.java:202) at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:4

我听说有一个Java文件通道错误,但我在web服务中遇到了这个错误

我得到以下例外情况:

java.nio.channels.ClosedByInterruptException
at java.nio.channels.spi.AbstractInterruptibleChannel.end
(AbstractInterruptibleChannel.java:202)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:473)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.flushByteBuffer
(TCPNIOTransport.java:1252)
at org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0
(TCPNIOAsyncQueueWriter.java:107)
at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:296)
at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:203)
at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:73)
at org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:128)
at org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)
at org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:853)
at org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:822)
at org.glassfish.grizzly.http.io.OutputBuffer.flushBuffer(OutputBuffer.java:1011)
at org.glassfish.grizzly.http.io.OutputBuffer.flushBinaryBuffers(OutputBuffer.java:996)
at org.glassfish.grizzly.http.io.OutputBuffer.flushAllBuffers(OutputBuffer.java:967)
at org.glassfish.grizzly.http.io.OutputBuffer.flush(OutputBuffer.java:732)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:291)
at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:275)
at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:175)
at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:103)
at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:225)
at com.ctc.wstx.sw.BaseStreamWriter.flush(BaseStreamWriter.java:261)
at com.sun.xml.ws.util.xml.XMLStreamWriterFilter.flush(XMLStreamWriterFilter.java:71)
at com.sun.xml.ws.streaming.XMLStreamWriterUtil.getOutputStream(XMLStreamWriterUtil.java:103)
at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:392)
有时,我会在日志中看到它。 问题是,当我的web服务应该返回它的值时,这种情况就会发生。我有以下代码:

   cs = con.prepareCall (" { call charge_subscriber (?,?,?,?,?,?)} ");
   cs.registerOutParameter(4, java.sql.Types.INTEGER);
   cs.registerOutParameter(5, java.sql.Types.VARCHAR);
   cs.registerOutParameter(6, java.sql.Types.NUMERIC);
   cs.setInt(1, anum);
   cs.setInt(2, product_id);
   cs.setString(3, identifier);
   cs.execute();
   resultCode = cs.getInt(4);
   resultMessage = cs.getString(5);
   transNo = cs.getLong(6);

System.out.println("\n ANUM            :  "+anum+
"\n Product ID              :  "+product_id+
"\n Identifier              :  "+identifier+
"\n resultCode              :  "+resultCode+
"\n resultMessage           :  "+resultMessage+
"\n transNo                 :  "+transNo);

return new ApiResponse(resultCode,resultMessage,transNo);

} catch(Exception e){
        System.out.println("Exception while charging : "+e.getMessage());
    }
       finally {
           if(!con.isClosed())
                con.close();
           con = null;
           if(cs != null)
            cs.close();
           cs = null;
           return new ApiResponse(resultCode,resultMessage,transNo);
   }
在异常的正上方,我看到println有正确的数据,有几毫秒的差异,所以过程似乎运行正常

我已经读到线程中断可能导致
ClosedByInterruptException
,所以我检查了我的管理控制台(我使用的是Glassfish),它似乎也没问题,我允许200个线程,超时时间为900秒

这个web服务大部分时间都在工作,有时它会这样做。webservice本身正在调用Oracle 11g数据库中的一个过程,我想这可能与数据库中的某个瓶颈有关,但我猜它不会用正确的数据显示println,而且当发生此错误时,该过程会执行它所支持的操作


所以我的问题是,这个错误可能是什么,或者我怎样才能抓住它?我试图捕获它,但没有成功。

从stacktrace判断,在编写响应时会发生异常。这表明真正的原因要么是网络问题,要么是客户端没有读取响应


在这两种情况下,最好的做法是允许异常传播,或者捕获异常并放弃处理请求。几乎不可能执行任何允许服务器向客户端发送响应的操作。

好的,但如何捕获响应?上述捕获不起作用,它仍然会发生。我的异常问题是它已经在数据库中执行了操作,我想回滚该过程