ClientProxyFactoryBeanDefinitionParser is called multiple times
---------------------------------------------------------------
Key: CXF-2558
URL: https://issues.apache.org/jira/browse/CXF-2558
Project: CXF
Issue Type: Bug
Components: Simple Frontend
Affects Versions: 2.2.5
Environment: Spring 2.5.6
Reporter: Dennis Kieselhorst
Priority: Blocker
In some cases we're using the ContextSingletonBeanFactoryLocator to obtain a
cxf client from a non spring bean (cp. Spring's section about "Glue code and
the evil singleton"). For example:
BeanFactory bf =
ContextSingletonBeanFactoryLocator.getInstance().useBeanFactory("cssBeanFactory").getFactory();
final AccountService accountService = (AccountService)
bf.getBean("accountService", AccountService.class);
With 2.2.3 this was no problem...the proxies were only created once at startup
(no further call, when bf.getBean is called):
ReflectionServiceFactoryBean.buildServiceFromClass() line: 351
ReflectionServiceFactoryBean.initializeServiceModel() line: 444
ReflectionServiceFactoryBean.create() line: 195
ClientFactoryBean(AbstractWSDLBasedEndpointFactory).createEndpoint()
line: 100
ClientFactoryBean.create() line: 52
ClientProxyFactoryBeanDefinitionParser$SpringClientProxyFactoryBean(ClientProxyFactoryBean).create()
line: 102
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
CglibSubclassingInstantiationStrategy(SimpleInstantiationStrategy).instantiate(RootBeanDefinition,
String, BeanFactory, Object, Method, Object[]) line: 115
ConstructorResolver.instantiateUsingFactoryMethod(String,
RootBeanDefinition, Object[]) line: 435
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).instantiateUsingFactoryMethod(String,
RootBeanDefinition, Object[]) line: 903
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBeanInstance(String,
RootBeanDefinition, Object[]) line: 817
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,
RootBeanDefinition, Object[]) line: 440
AbstractAutowireCapableBeanFactory$1.run() line: 409
AccessController.doPrivileged(PrivilegedAction<T>,
AccessControlContext) line: not available [native method]
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,
RootBeanDefinition, Object[]) line: 380
AbstractBeanFactory$1.getObject() line: 264
DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,
ObjectFactory) line: 222
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
Class, Object[], boolean) line: 261
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class,
Object[]) line: 185
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line:
164
DefaultListableBeanFactory.preInstantiateSingletons() line: 429
ClassPathXmlApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory)
line: 728
ClassPathXmlApplicationContext(AbstractApplicationContext).refresh()
line: 380
ClassPathXmlApplicationContext.<init>(String[], boolean,
ApplicationContext) line: 139
ClassPathXmlApplicationContext.<init>(String[]) line: 93
NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line:
not available [native method]
NativeConstructorAccessorImpl.newInstance(Object[]) line: 39
DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27
Constructor<T>.newInstance(Object...) line: 513
BeanUtils.instantiateClass(Constructor, Object[]) line: 100
CglibSubclassingInstantiationStrategy(SimpleInstantiationStrategy).instantiate(RootBeanDefinition,
String, BeanFactory, Constructor, Object[]) line: 87
ConstructorResolver.autowireConstructor(String, RootBeanDefinition,
Constructor[], Object[]) line: 248
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).autowireConstructor(String,
RootBeanDefinition, Constructor[], Object[]) line: 925
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBeanInstance(String,
RootBeanDefinition, Object[]) line: 835
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,
RootBeanDefinition, Object[]) line: 440
AbstractAutowireCapableBeanFactory$1.run() line: 409
AccessController.doPrivileged(PrivilegedAction<T>,
AccessControlContext) line: not available [native method]
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,
RootBeanDefinition, Object[]) line: 380
AbstractBeanFactory$1.getObject() line: 264
DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,
ObjectFactory) line: 222
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
Class, Object[], boolean) line: 261
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class,
Object[]) line: 185
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class)
line: 168
ClassPathXmlApplicationContext(AbstractApplicationContext).getBean(String,
Class) line: 884
ContextSingletonBeanFactoryLocator(SingletonBeanFactoryLocator).useBeanFactory(String)
line: 397
ContextLoader.loadParentContext(ServletContext) line: 341
ContextLoader.initWebApplicationContext(ServletContext) line: 195
ContextLoaderListener.contextInitialized(ServletContextEvent) line: 45
With 2.2.5 there is no call at startup time, but each time bf.getBean is called
ReflectionServiceFactoryBean.buildServiceFromClass() line: 432
ReflectionServiceFactoryBean.initializeServiceModel() line: 523
ReflectionServiceFactoryBean.create() line: 271
ClientFactoryBean(AbstractWSDLBasedEndpointFactory).createEndpoint()
line: 100
ClientFactoryBean.create() line: 51
ClientProxyFactoryBeanDefinitionParser$SpringClientProxyFactoryBean(ClientProxyFactoryBean).create()
line: 102
ClientProxyFactoryBeanDefinitionParser$SpringClientProxyFactoryBean.getObject()
line: 111
FactoryBeanRegistrySupport$1.run() line: 121
AccessController.doPrivileged(PrivilegedAction<T>,
AccessControlContext) line: not available [native method]
DefaultListableBeanFactory(FactoryBeanRegistrySupport).doGetObjectFromFactoryBean(FactoryBean,
String, boolean) line: 116
DefaultListableBeanFactory(FactoryBeanRegistrySupport).getObjectFromFactoryBean(FactoryBean,
String, boolean) line: 98
DefaultListableBeanFactory(AbstractBeanFactory).getObjectForBeanInstance(Object,
String, String, RootBeanDefinition) line: 1288
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
Class, Object[], boolean) line: 217
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class,
Object[]) line: 185
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class)
line: 168
ClassPathXmlApplicationContext(AbstractApplicationContext).getBean(String,
Class) line: 884
After some time this leads to a OutOfMemoryError:
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'accountService': FactoryBean threw exception on
object creation; nested exception is java.lang.OutOfMemoryError: Java heap
space
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.