Skip to content

Commit 62595a5

Browse files
committed
DATAJPA-813 - Advanced integration test for DefaultJpaContext.
Added an integration test that shows how to refer to JpaContext from an ApplicationComponent.
1 parent 418fbec commit 62595a5

File tree

1 file changed

+54
-1
lines changed

1 file changed

+54
-1
lines changed

src/test/java/org/springframework/data/jpa/repository/support/DefaultJpaContextIntegrationTests.java

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,21 @@
3030
import org.junit.Rule;
3131
import org.junit.Test;
3232
import org.junit.rules.ExpectedException;
33+
import org.springframework.beans.factory.annotation.Autowired;
34+
import org.springframework.context.ConfigurableApplicationContext;
35+
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
36+
import org.springframework.context.annotation.Bean;
37+
import org.springframework.context.annotation.ComponentScan;
38+
import org.springframework.context.annotation.ComponentScan.Filter;
39+
import org.springframework.context.annotation.FilterType;
3340
import org.springframework.data.jpa.domain.sample.Category;
3441
import org.springframework.data.jpa.domain.sample.User;
3542
import org.springframework.data.jpa.repository.JpaContext;
43+
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
3644
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
3745
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
3846
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
47+
import org.springframework.stereotype.Component;
3948

4049
/**
4150
* Integration tests for {@link DefaultJpaContext}.
@@ -100,14 +109,58 @@ public void rejectsRequestForTypeManagedByMultipleEntityManagers() {
100109
jpaContext.getEntityManagerByManagedType(User.class);
101110
}
102111

103-
private static final EntityManagerFactory createEntityManagerFactory(String persistenceUnitName) {
112+
/**
113+
* @see DATAJPA-813
114+
*/
115+
@Test
116+
public void bootstrapsDefaultJpaContextInSpringContainer() {
117+
118+
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
119+
ApplicationComponent component = context.getBean(ApplicationComponent.class);
120+
121+
assertThat(component.context, is(notNullValue()));
122+
123+
context.close();
124+
}
125+
126+
private static final LocalContainerEntityManagerFactoryBean createEntityManagerFactoryBean(
127+
String persistenceUnitName) {
104128

105129
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
106130
factoryBean.setPersistenceProvider(new HibernatePersistence());
107131
factoryBean.setDataSource(new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL).build());
108132
factoryBean.setPersistenceUnitName(persistenceUnitName);
133+
134+
return factoryBean;
135+
}
136+
137+
private static final EntityManagerFactory createEntityManagerFactory(String persistenceUnitName) {
138+
139+
LocalContainerEntityManagerFactoryBean factoryBean = createEntityManagerFactoryBean(persistenceUnitName);
109140
factoryBean.afterPropertiesSet();
110141

111142
return factoryBean.getObject();
112143
}
144+
145+
@EnableJpaRepositories
146+
@ComponentScan(includeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, value = ApplicationComponent.class) ,
147+
useDefaultFilters = false)
148+
static class Config {
149+
150+
@Bean
151+
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
152+
return createEntityManagerFactoryBean("spring-data-jpa");
153+
}
154+
}
155+
156+
@Component
157+
static class ApplicationComponent {
158+
159+
JpaContext context;
160+
161+
@Autowired
162+
public ApplicationComponent(JpaContext context) {
163+
this.context = context;
164+
}
165+
}
113166
}

0 commit comments

Comments
 (0)