当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

CXF client在并发下的线程安全问题[Java编程]

赞助商链接



  本文“CXF client在并发下的线程安全问题[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

这个是发生在上周周末的真实案例,因为cxf client 端线程安全招致的错误,总结出来但愿其他利用cxf的兄弟注意.

首先描写一下后台,简单的说就是利用cxf作为web service的客户端,运行在weblogic上,衔接外部的服务器.为了测试需求,开辟了一个简单的模拟器模拟服务器端,预备在release之前跑安定性测试.

后果出问题了,在排撤除一些干扰和诸如网络环境,设置等之后问题仍旧,由于系统负责,包含ws的模拟器也是出了一个之前没有试过的办法,因此费了不少时间来查找问题.历程很单调,应当很多人阅历过,在一个大的系统中找到一个小错误的出处,可以说是一门学问,技术耐烦和运气都是需求的.....跳出这个历程,由于问题表目前web service的网络衔接在这个非常上,在服务器端模拟器的日记中有大量的这种非常信息:

2009-07-24 19:23:22,898 DEBUG (                    :  ) (tomcat-exec-56) [Http11NioProcessor] - Error parsing HTTP request header
java.io.EOFException: Unexpected EOF read on the socket
         at org.apache.coyote.http11.InternalNioInputBuffer.readSocket(InternalNioInputBuffer.java:589)
         at org.apache.coyote.http11.InternalNioInputBuffer.parseRequestLine(InternalNioInputBuffer.java:425)
         at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:825)
         at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:719)
         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2080)
         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
         at java.lang.Thread.run(Thread.java:619)
2009-07-24 19:23:22,898 DEBUG ( :  ) (tomcat-exec-56) [Http11NioProcessor] - Error parsing HTTP request header
java.io.EOFException: Unexpected EOF read on the socket
         at org.apache.coyote.http11.InternalNioInputBuffer.readSocket(InternalNioInputBuffer.java:589)
         at org.apache.coyote.http11.InternalNioInputBuffer.parseRequestLine(InternalNioInputBuffer.java:425)
         at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:825)
         at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:719)
         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2080)
         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
         at java.lang.Thread.run(Thread.java:619)

而服务器端模拟器这次是我们第一次利用tomcat和coyote,因此猜疑是tomcat的问题,在再三追查代码无果的情形下,决意换一个服务器端模拟器来确认问题所在:毕竟是cxf的客户端的问题,还是服务器端模拟器.一个简单的模拟器写出来了,一个跳过全部业务逻辑直接调用cxf客户端实现代码的测试小程序写出来了,测试之后发现,问题仍旧.于是将目光集合到cxf的客户端上.

在测试中发现这样一个规律,在上述服务器端的非常发生前,在客户端中老是会有规律的呈现下面这个非常:

Jul 24, 2009 10:36:18 PM org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now null
tps = 25
Exception in thread "Thread-41" 2009-07-24 22:36:19,925 149585 [Thread-41] (********Impl.java:459) ERROR junit.framework.Test  - Got an exception when invoking **** service:javax.xml.ws.WebServiceException: java.lang.NullPointerException
     (这里的信息是和业务相关的,不便利打出,总之和我们谈论的问题无关)
     at test.TestMci.execute(TestMci.java:84)
     at test.TestMci.access$1(TestMci.java:81)
     at test.TestMci$TestThread.run(TestMci.java:90)
     at java.lang.Thread.run(Thread.java:595)
Caused by: javax.xml.ws.WebServiceException: java.lang.NullPointerException
     at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:142)
     at $Proxy40.authorizeAndPurchase(Unknown Source)
     at *********************
      6 more
Caused by: java.lang.NullPointerException
     at org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:483)
     at org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:46)
     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:226)
     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:469)
     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299)
     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:251)
     at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
     at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
      8 more

看来问题是呈目前这里了.


  以上是“CXF client在并发下的线程安全问题[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>CXF操纵JMS作为传输协议的配置</b>
  • 操纵CXF和Spring成立Web服务
  • CXF client在并发下的线程安全问题
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .