Closed
Description
Victor Bronstein opened SPR-14551 and commented
StackOverflowError happens when powering up an application context that includes JPA Hibernate entity manager, defines tx:annotation-driven/ and Hibernate statistics bean.
The minimal project reproducing the issue is attached. Here's the snippet of the XML:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- Comment this line to make the test pass -->
<tx:annotation-driven/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.mycompany.*"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
</bean>
</property>
</bean>
<bean name="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:test"/>
<property name="username" value="sa"/>
</bean>
<bean id="sessionFactory" factory-bean="entityManagerFactory" factory-method="getSessionFactory" scope="prototype"/>
<!-- Or comment this line to make the test pass -->
<bean id="hibernateStatistics" factory-bean="sessionFactory" factory-method="getStatistics" scope="prototype"/>
</beans>
Affects: 3.2.17, 4.1.9, 4.2.7, 4.3.2
Attachments:
- stack-overflow-error.jar (3.54 kB)
Issue Links:
- FactoryBean bean type detection can causes fatal early instantiation [SPR-11202] #15828 FactoryBean bean type detection can causes fatal early instantiation
- Plain FactoryBean declaration on @Bean method leads to early call (pre injection) [SPR-12141] #16755 Plain FactoryBean declaration on
@Bean
method leads to early call (pre injection) - findDefaultEntityManagerFactory should consider EMF bean's primary flag [SPR-7549] #12206 findDefaultEntityManagerFactory should consider EMF bean's primary flag
- HttpInvokerProxyFactoryBean and co do not reliably expose correct type when declared via @Bean [SPR-11842] #16461 HttpInvokerProxyFactoryBean and co do not reliably expose correct type when declared via
@Bean
- Modification in AbstractAutowireCapableBeanFactory to prevent stackoverflow errors causes context not to load. [SPR-15125] #19692 Modification in AbstractAutowireCapableBeanFactory to prevent stackoverflow errors causes context not to load.