问题在于Camel和CXF(endpoint和客户端)以及同时触发多个请求。
下面是我们得到的例外:
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:772)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1323)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.getResponseCode(URLConnectionHTTPConduit.java:266)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1543)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1513)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1318)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:570)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:479)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:382)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:335)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135)
http-listener-1(1)" daemon prio=5 tid=0x00007fa2843e8800 nid=0x9d07 in Object.wait() [0x000000018a266000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000001708b27e8> (a org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream)
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.getHttpResponse(AsyncHTTPConduit.java:562)
- locked <0x00000001708b27e8> (a org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream)
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.getResponseCode(AsyncHTTPConduit.java:674)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1543)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1513)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1318)
at org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.close(AsyncHTTPConduit.java:383)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
- locked <0x00000001704175f8> (a org.apache.cxf.phase.PhaseInterceptorChain)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:570)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:479)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:382)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:335)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135)
我还尝试使用异步客户端,虽然stacktrace和线程转储看起来不同,但结果是一样的。
这似乎也只发生在我们的开发实例(Mac笔记本电脑)上,我们在Glassfish 4.0和JDK 1.7.x(我的机器上是1.7U65,其他机器上的版本略有不同)中运行
骆驼路线之一,虽然它似乎影响了他们所有人(他们是设置相同的道路)
from("cxf:/structure?serviceClass=" + StructureEndpoint.class.getName() + "&loggingFeatureEnabled=true")
.routeId("structure")
.to("log:com.test.camel")
.recipientList(simple("direct:structure:${header.operationName}"));
直接使用camel/cxf服务不会导致任何问题。
我们有另外两个运行在Linux上的环境,都是在JDK 1.7.0u60上,也就是glassfish的相同版本上,它们没有表现出这种行为。所有受影响的机器仅为OS X。(不久将测试windows box)
在对一个较小的样本进行了一些隔离和测试后,我发现了问题。
用较小的应用程序测试,我能够部署在本地不同的服务器上,一切都很好。甚至尝试将这些服务部署到Tomcat和Glassfish的前端,仍然没有问题。
当我把前面和后面放在同一个服务器上时,如果我同时向它发送5个请求,它就会卡住。我还尝试使用JAX-WS生成的(而不是CXF)服务,但它们也有同样的问题,排除了特定于CXF的问题。
唯一未知的是,为什么我们在linux QA/Dev环境中看不到这一点。与这些不同的是,它们前面有apache,而我们的本地实例没有。
本文向大家介绍Jquery ajax 同步阻塞引起的UI线程阻塞问题,包括了Jquery ajax 同步阻塞引起的UI线程阻塞问题的使用技巧和注意事项,需要的朋友参考一下 最近做一个项目,遇到了一个问题同步ajax引起的ui线程阻塞问题,下面把我的问题解决过程分享给大家。 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收
我有4-5个工作线程处理大型消息队列。我还有另一段代码,它使用2-3个worker运行。我想在处理大型消息队列时阻止所有其他工作者。 我正在使用JDK6和Jms 编辑: 队列进程工作者从未终止。当没有消息时,它们阻塞队列。这些工作者由执行器线程池管理,如果我使用读写锁,其中一个工作者也会被阻塞。此外,如果使用循环屏障,那么我必须终止线程,以便重新传递阻塞的第二个进程。由于工作者是由线程池管理的,所
我决定在Java上重写我的Web应用程序(以前是在Python上)。在我的应用程序中,我使用无阻塞I/O,我有工作池(Celery Eventlet线程),我在其中传递由数百个API调用组成的任务。 现在我正在使用Spring WebFlux,但我不明白如何创建一个工作人员池来将我的任务传递到该池,并在获得结果并进行一些计算之后。 (我知道创建ThreadPoolTaskExecutor的可能性,
我编写了一个简单的类,我计划将其扩展为客户端套接字编程应用程序的一部分。类涉及一个BlockingQueue(我从这里复制了代码:相当于Java的BlockingQueue的C++)。当我创建了下面的包装类的一个实例后,我打算让它生成一个单独的线程,该线程只需执行BlockingQueue上阻塞的printer()函数,直到有一个或多个字符串可用,然后它只需将字符串打印到控制台窗口。在我的预期应用
背景我使用log4j2(2.12.1)与同步根和异步记录器。Lmax环形缓冲区大小默认为256*1024。我在控制台的appender。我用JSON布局记录MapMessage。我的日志消息的平均大小约为100字节。 有了上面的细节,我注意到很少有线程被阻塞在 我的问题是。。 环形缓冲区是否很快就满了,这导致主线程背压(在我的例子中,servlet容器线程是http-nio-8080-exec-1
我试图通过使用Camel&cxf调用第三方SOAP web服务。以下是wsdl的摘录 可以看到,soap主体使用了上面wsdl中提到的“parameters”部分,与TNS:SetDeviceDetailsV4相关。 下面是我的pom.xml文件的一部分 如何使我的Camel/CXF调用与其他开发人员所做的匹配?