You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2011/08/04 19:05:16 UTC
svn commit: r1153930 - in /cxf/trunk:
api/src/main/java/org/apache/cxf/endpoint/
rt/core/src/main/java/org/apache/cxf/endpoint/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/
rt/frontend/simple/src/main/java/org/apache/cxf/frontend/spring/
Author: dkulp
Date: Thu Aug 4 17:05:14 2011
New Revision: 1153930
URL: http://svn.apache.org/viewvc?rev=1153930&view=rev
Log:
[CXF-3710, CXF-3711] Some client shutdown enhancements and optimizations
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/AbstractConduitSelector.java
cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ConduitSelector.java
cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/PreexistingConduitSelector.java
cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/JaxWsProxyFactoryBeanDefinitionParser.java
cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/spring/ClientProxyFactoryBeanDefinitionParser.java
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/AbstractConduitSelector.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/AbstractConduitSelector.java?rev=1153930&r1=1153929&r2=1153930&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/AbstractConduitSelector.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/AbstractConduitSelector.java Thu Aug 4 17:05:14 2011
@@ -19,6 +19,7 @@
package org.apache.cxf.endpoint;
+import java.io.Closeable;
import java.io.IOException;
import java.util.logging.Logger;
@@ -41,7 +42,7 @@ import org.apache.cxf.ws.addressing.Endp
* Abstract base class holding logic common to any ConduitSelector
* that retreives a Conduit from the ConduitInitiator.
*/
-public abstract class AbstractConduitSelector implements ConduitSelector {
+public abstract class AbstractConduitSelector implements ConduitSelector, Closeable {
protected static final String KEEP_CONDUIT_ALIVE = "KeepConduitAlive";
protected Conduit selectedConduit;
@@ -56,6 +57,12 @@ public abstract class AbstractConduitSel
selectedConduit = c;
}
+ public void close() {
+ if (selectedConduit != null) {
+ selectedConduit.close();
+ selectedConduit = null;
+ }
+ }
/**
* Mechanics to actually get the Conduit from the ConduitInitiator
* if necessary.
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ConduitSelector.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ConduitSelector.java?rev=1153930&r1=1153929&r2=1153930&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ConduitSelector.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ConduitSelector.java Thu Aug 4 17:05:14 2011
@@ -25,7 +25,7 @@ import org.apache.cxf.transport.Conduit;
/**
- * Strategy for retreiving a Conduit to mediate an outbound message.
+ * Strategy for retrieving a Conduit to mediate an outbound message.
* A specific instance implementing a particular strategy may be injected
* into the Client via config.
*/
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/PreexistingConduitSelector.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/PreexistingConduitSelector.java?rev=1153930&r1=1153929&r2=1153930&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/PreexistingConduitSelector.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/PreexistingConduitSelector.java Thu Aug 4 17:05:14 2011
@@ -19,6 +19,7 @@
package org.apache.cxf.endpoint;
+import java.io.Closeable;
import java.io.IOException;
import org.apache.cxf.message.Exchange;
@@ -32,7 +33,7 @@ import org.apache.cxf.transport.MessageO
* outbound message.
*/
public class PreexistingConduitSelector implements
- ConduitSelector {
+ ConduitSelector, Closeable {
private Conduit selectedConduit;
private Endpoint endpoint;
@@ -108,4 +109,8 @@ public class PreexistingConduitSelector
public void setEndpoint(Endpoint ep) {
endpoint = ep;
}
+
+ public void close() throws IOException {
+ selectedConduit.close();
+ }
}
Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java?rev=1153930&r1=1153929&r2=1153930&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java Thu Aug 4 17:05:14 2011
@@ -19,6 +19,7 @@
package org.apache.cxf.endpoint;
+import java.io.Closeable;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -204,7 +205,15 @@ public class ClientImpl
}
if (conduitSelector != null) {
- getConduit().close();
+ if (conduitSelector instanceof Closeable) {
+ try {
+ ((Closeable)conduitSelector).close();
+ } catch (IOException e) {
+ //ignore, we're destroying anyway
+ }
+ } else {
+ getConduit().close();
+ }
}
}
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/JaxWsProxyFactoryBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/JaxWsProxyFactoryBeanDefinitionParser.java?rev=1153930&r1=1153929&r2=1153930&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/JaxWsProxyFactoryBeanDefinitionParser.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/JaxWsProxyFactoryBeanDefinitionParser.java Thu Aug 4 17:05:14 2011
@@ -18,13 +18,18 @@
*/
package org.apache.cxf.jaxws.spring;
+import java.io.Closeable;
+
import org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor;
import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientFactoryBean;
+import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.frontend.spring.ClientProxyFactoryBeanDefinitionParser;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@@ -53,7 +58,7 @@ public class JaxWsProxyFactoryBeanDefini
@NoJSR250Annotations
public static class JAXWSSpringClientProxyFactoryBean extends JaxWsProxyFactoryBean
- implements ApplicationContextAware, FactoryBean {
+ implements ApplicationContextAware, FactoryBean, DisposableBean {
private Object obj;
@@ -85,5 +90,15 @@ public class JaxWsProxyFactoryBeanDefini
public boolean isSingleton() {
return true;
}
+ public void destroy() throws Exception {
+ if (obj != null) {
+ if (obj instanceof Closeable) {
+ ((Closeable)obj).close();
+ } else {
+ Client c = ClientProxy.getClient(obj);
+ c.destroy();
+ }
+ }
+ }
}
}
Modified: cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/spring/ClientProxyFactoryBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/spring/ClientProxyFactoryBeanDefinitionParser.java?rev=1153930&r1=1153929&r2=1153930&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/spring/ClientProxyFactoryBeanDefinitionParser.java (original)
+++ cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/spring/ClientProxyFactoryBeanDefinitionParser.java Thu Aug 4 17:05:14 2011
@@ -18,6 +18,7 @@
*/
package org.apache.cxf.frontend.spring;
+import java.io.Closeable;
import java.util.List;
import java.util.Map;
@@ -28,9 +29,12 @@ import org.w3c.dom.Element;
import org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor;
import org.apache.cxf.common.injection.NoJSR250Annotations;
import org.apache.cxf.configuration.spring.AbstractFactoryBeanDefinitionParser;
+import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientFactoryBean;
+import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
@@ -91,7 +95,7 @@ public class ClientProxyFactoryBeanDefin
@NoJSR250Annotations
public static class SpringClientProxyFactoryBean extends ClientProxyFactoryBean
- implements ApplicationContextAware, FactoryBean {
+ implements ApplicationContextAware, FactoryBean, DisposableBean {
private Object obj;
@@ -123,5 +127,15 @@ public class ClientProxyFactoryBeanDefin
public boolean isSingleton() {
return true;
}
+ public void destroy() throws Exception {
+ if (obj != null) {
+ if (obj instanceof Closeable) {
+ ((Closeable)obj).close();
+ } else {
+ Client c = ClientProxy.getClient(obj);
+ c.destroy();
+ }
+ }
+ }
}
}