memory leaks in CXF with spring while using WebClient APIs
Hello All,
First of all, apologies if putting this question in a wrong group, let me know if I have to move to other groups.
Problem - We are facing a very weird memory issue while using spring (3.0.5.RELEASE) with Apache-CXF(2.4.2). We are trying to make a REST(GET) call using Apache CXF WebClient.get().Each outbound call URL is getting configured as a bean in the Spring Container.
Description -
1.Placeholder in Spring where the URL is getting configured as a Bean
Class Name - AbstractBeanFactory
private final Set<String> alreadyCreated = Collections.synchronizedSet(new HashSet<String>());
2.Reason
During the WebClient.get call CXF prepares conduit to channel the message to destination. Since it is a HTTP call HTTPTransportFactory is used to create HTTP Conduit for the endpoint.
This is done by HTTPTransportFactory.getConduit method.
HTTPTransportFactory.getConduit invokes HTTPTransportFactory.configure(Object bean, String name, String extraName)
Code:
protected void configure(Object bean, String name, String extraName) {
Configurer configurer = bus.getExtension(Configurer.class);
if (null != configurer) {
configurer.configureBean(name, bean);
if (extraName != null) {
configurer.configureBean(extraName, bean);
}
}
}
name parameter value is - {http://<ip>:<port>/<application-context>/user/96BEEBE3119B4B809F35CFFAF5EA9803/detail}WebClient.http-conduit
extraName parameter value is - http://<ip>:<port>/<application-context>/user/96BEEBE3119B4B809F35CFFAF5EA9803/detail
Since CXF by default uses SpringBus,the configurer class returned for bus.getExtension(Configurer.class) call is org.apache.cxf.configuration.spring.ConfigurerImpl .
This class ends up configuring both the above mentioned URL as bean in Spring.
This bean names are keep on adding to a Set instance alreadyCreated which never get garbage collected, and keep increasing the memory footprint and finally causing OutOfMemory issue.
Thanks in advance for showing any pointer.
Thanks
Ajit Das