对于我的一些Java NIO连接,当我有一个SocketChannel.write(ByteBuffer)调用时,它抛出一个IOException:"Broken pipe".
什么原因导致"管道破裂",更重要的是,是否有可能从该状态恢复?如果它无法恢复,似乎这是一个好的迹象,表明发生了不可逆转的问题,我应该简单地关闭这个套接字连接.这是一个合理的假设吗?是否曾经有一段时间,当IOException套接字连接仍然在第一个地方正确连接时(而不是某个时候失败的工作连接)会发生这种情况?
在一个侧面说明,它是明智的做法始终调用SocketChannel.isConnected()在尝试之前SocketChannel.write(),如果是这样,可以同时假设该连接是"破",如果两者都应该被关闭SocketChannel.isConnected(),并SocketChannel.isConnectionPending()都false?
谢谢!
我有一个我想要写入HttpServletResponse的InputStream.这种方法由于使用byte []而花费的时间太长
InputStream is = getInputStream();
int contentLength = getContentLength();
byte[] data = new byte[contentLength];
is.read(data);
//response here is the HttpServletResponse object
response.setContentLength(contentLength);
response.write(data);
Run Code Online (Sandbox Code Playgroud)
在速度和效率方面,我想知道什么是最好的方法.
在catalina.out我的日志中,我Tomcat7收到由第三方库引起的错误,该库以以下内容开头:
INFO: An error occurred in processing while on a non-container thread. The connection will be closed immediately
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
Run Code Online (Sandbox Code Playgroud)
在非容器线程中发生错误的真正含义是什么?
我试图通过Thread从我的应用程序代码中生成一个新的异常来获取类似的日志消息:
new Thread(){
@Override
public void run() {
Integer.parseInt("boom");
}
}.start();
Run Code Online (Sandbox Code Playgroud)
但它导致了
Exception in thread "Thread-28" java.lang.NumberFormatException: For input string: "boom"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at ...
Run Code Online (Sandbox Code Playgroud)
所以问题是:当我看到顶部引用的日志时,它意味着什么?在非容器线程中发生错误是什么意思?我该如何重新创建呢?
我在我的服务器上上传了我的war文件,它在部署后完美运行,但一段时间后它显示异常.我正在使用struts2和hibernate
我hibernate.cfg.xml是
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/dbName</property>
<property name="hibernate.connection.username">UserName</property>
<property name="hibernate.connection.password">Password</property>
<property name="hibernate.connection.zeroDateTimeBehavior">round</property>
<property name="autoReconnect">true</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="maxIdleTime">0</property>
<property name="use_sql_comments">true</property>
<property name="hibernate.connection.pool_size">20</property>
<property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>
<property name="current_session_context_class">thread</property>
</session-factory>
Run Code Online (Sandbox Code Playgroud)
在控制台上执行查询后,它显示如下 Exception
263512233 [http-bio-12414-exec-1768] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 08003
263512233 [http-bio-12414-exec-1768] ERROR org.hibernate.util.JDBCExceptionReporter - No operations allowed after connection closed.Connection was implicitly closed by the driver.
org.hibernate.exception.JDBCConnectionException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2545)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:459) …Run Code Online (Sandbox Code Playgroud) 大家下午好.
我们这里有一个非常奇怪的问题.我们有一个网络服务,许多客户端连接,直到周二他开始在控制台上出现以下异常时一切正常:
javax.xml.ws.WebServiceException: com.ctc.wstx.exc.WstxIOException: null
at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:112)
at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:284)
at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:339)
at com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:93)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:481)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:129)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:160)
at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: com.ctc.wstx.exc.WstxIOException: null
at com.ctc.wstx.sw.BaseStreamWriter.flush(BaseStreamWriter.java:313)
at com.sun.xml.ws.streaming.XMLStreamWriterUtil.getOutputStream(XMLStreamWriterUtil.java:97)
at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:319)
at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:142)
at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:109)
... 27 more
Caused by: …Run Code Online (Sandbox Code Playgroud) 当我尝试将数据发送到客户端浏览器时,我收到此异常.我使用apache POI lib生成一个Excel文件,如下例所示:
workbook = generateData();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=" + this.filename);
out = response.getOutputStream();
workbook.write(out);
Run Code Online (Sandbox Code Playgroud)
这适用于少量数据,但每次我尝试使用大量数据时它都无法工作.应用程序需要超过30秒才能生成数据,这是否太长,我可以阻止这种情况吗?
ClientAbortException: java.net.SocketException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:448)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:318)
at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:274)
...
Caused by: java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:539)
at org.apache.jk.common.JkInputStream.doWrite(JkInputStream.java:162)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364)
Run Code Online (Sandbox Code Playgroud)