Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 18871200B40 for ; Fri, 17 Jun 2016 00:40:07 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 17456160A61; Thu, 16 Jun 2016 22:40:07 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 3A19E160A51 for ; Fri, 17 Jun 2016 00:40:06 +0200 (CEST) Received: (qmail 37198 invoked by uid 500); 16 Jun 2016 22:40:05 -0000 Mailing-List: contact issues-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list issues@cxf.apache.org Received: (qmail 37176 invoked by uid 99); 16 Jun 2016 22:40:05 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 16 Jun 2016 22:40:05 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id 472232C1F60 for ; Thu, 16 Jun 2016 22:40:05 +0000 (UTC) Date: Thu, 16 Jun 2016 22:40:05 +0000 (UTC) From: "Dhawalpatel (JIRA)" To: issues@cxf.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (CXF-6940) Bus Reference nullified pre-maturely in ClientImpl causing Exceptions while processing Responses MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Thu, 16 Jun 2016 22:40:07 -0000 [ https://issues.apache.org/jira/browse/CXF-6940?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15334852#comment-15334852 ] Dhawalpatel commented on CXF-6940: ---------------------------------- [~dkulp] Well, then there is a huge number of clients who might have adopted the technique of sharing the connection based on the documentation and thus, suddenly changing the javadoc like that will cause lots of clients to have incompatible code with 3.1.4 now. Can I suggest a fix to not nullify the bus and other obj refs and make it same as previous version ? Can we inject a switch which will mimic the behavior like in previous version? I read the JCA spec as well and in the section of 7.9 Sharing the connections, its very well mentioned that connection can be shared and used like this. Thanks > Bus Reference nullified pre-maturely in ClientImpl causing Exceptions while processing Responses > ------------------------------------------------------------------------------------------------ > > Key: CXF-6940 > URL: https://issues.apache.org/jira/browse/CXF-6940 > Project: CXF > Issue Type: Bug > Components: JAX-WS Runtime > Affects Versions: 3.1.4 > Environment: IBM JDK 1.7, Apache CXF installed as resource Adapter on IBM WebSphere 8.5.5.3 on RHEL 6.0 > Reporter: Dhawalpatel > Priority: Critical > > Hi Daniel, > Test Scenario: > Install CXF as Resource Adapter in J2EE Container and use below code to call a JAX-WS API. > /* Lookup Resource Adapter of JCA and get COnnection*/ > CXFConnectionFactory connectionFactory = getCXFConnectionFactory(portClass); > CXFConnectionSpec connectionSpec = createCXFConnectionSpec(portClass, serviceName, portName, webServiceDefinition); > /* Get the Port from JCA Connection pool*/ > connection = connectionFactory.getConnection(connectionSpec); > port = connection.getService(portClass); > /* Close the JCA Connection*/ > if(connection != null) > connection.close(); > /*WebService call*/ > port.getAccount(); > Description: > When a JCA Connection pool eviction happens due to Max Connections reached state, the existing on-going outgoing JAX-WS Calls errors out with below exception: > Message received on a Client that has been closed or destroyed. > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:86) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:58) > at java.lang.reflect.Constructor.newInstance(Constructor.java:542) > at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1376) > at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1365) > at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56) > at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:215) > at org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77) > at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) > at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:651) > at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) > at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) > at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:520) > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:429) > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:330) > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:283) > at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) > at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139) > at com.sun.proxy.$Proxy106.inquireWirelinePaymentPlan(Unknown Source) > at sun.reflect.GeneratedMethodAccessor360.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56) > at java.lang.reflect.Method.invoke(Method.java:620) > at AppAdapter.executeWebService(AppAdapter.java:702) > > Caused by: > java.lang.IllegalStateException: Message received on a Client that has been closed or destroyed. > at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:707) > at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1669) > at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1550) > at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1347) > ... 26 more > On further investigation, it seems you changed the code in ClientImpl.java as per https://issues.apache.org/jira/browse/CXF-3765 and change log > https://fisheye6.atlassian.com/changelog/cxf?cs=e0ef66391d2e7e62e63e96214eca95e292271892 > by adding the additional cleanup code in ClientImpl.java the below lines > bus = null; > conduitSelector = null; > outFaultObserver = null; > outboundChainCache = null; > inboundChainCache = null; > currentRequestContext = null; > requestContext.clear(); > requestContext = null; > responseContext.clear(); > responseContext = null; > executor = null; > The above lines added by you for cleanup has broken the behavior of using the JCA connection for getting port and closing it immediately and then using the port to call the webservice. This leads to above exception when JCA Pool maxes out causing an eviction on JCA Pool by below thread stack causing the ClientImpl's destroy to be called and ultimately the bus obj ref getting set to null by your code and ultimately this exception. > The behavior in CXF 2.3 was perfectly fine with no such problems. This was introduced by above mentioned code fix. > org.apache.cxf.endpoint.ClientImpl.destroy(ClientImpl.java:152) > org.apache.cxf.jca.outbound.ManagedConnectionImpl.destroy(ManagedConnectionImpl.java:121) > com.ibm.ejs.j2c.MCWrapper.destroy(MCWrapper.java:2086) > com.ibm.ejs.j2c.FreePool.cleanupAndDestroyMCWrapper(FreePool.java:775) > com.ibm.ejs.j2c.PoolManager.claimVictim(PoolManager.java:5190) > com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3657) > com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3091) > com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:1548) > com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:1031) > org.apache.cxf.jca.outbound.ConnectionFactoryImpl.getConnection(ConnectionFactoryImpl.java:53) > com.sbc.cc.clarify.api.util.cxf.XCxfConnectorWebServiceInitializer.getCxfPortImpl(XCxfConnectorWebServiceInitializer.java:217) > Please fix this behavior since its not in the alignment to the behavior mentioned in JCA Spec and as per the documentation provided in CXF as well. > Thanks -- This message was sent by Atlassian JIRA (v6.3.4#6332)