@@ -65,8 +65,7 @@ public Object postProcessBeforeInitialization(Object bean, String beanName) thro
65
65
if (bean instanceof LocalContainerEntityManagerFactoryBean ) {
66
66
LocalContainerEntityManagerFactoryBean factory = (LocalContainerEntityManagerFactoryBean ) bean ;
67
67
if (factory .getBootstrapExecutor () != null && factory .getJpaVendorAdapter () != null ) {
68
- this .schemaCreatedPublisher = new DataSourceSchemaCreatedPublisher (factory .getBootstrapExecutor (),
69
- factory .getJpaVendorAdapter ());
68
+ this .schemaCreatedPublisher = new DataSourceSchemaCreatedPublisher (factory );
70
69
factory .setJpaVendorAdapter (this .schemaCreatedPublisher );
71
70
}
72
71
}
@@ -86,21 +85,27 @@ public Object postProcessAfterInitialization(Object bean, String beanName) throw
86
85
this .hibernateProperties = (HibernateProperties ) bean ;
87
86
}
88
87
if (bean instanceof LocalContainerEntityManagerFactoryBean && this .schemaCreatedPublisher == null ) {
89
- LocalContainerEntityManagerFactoryBean factory = (LocalContainerEntityManagerFactoryBean ) bean ;
90
- publishEventIfRequired (factory .getNativeEntityManagerFactory ());
88
+ LocalContainerEntityManagerFactoryBean factoryBean = (LocalContainerEntityManagerFactoryBean ) bean ;
89
+ EntityManagerFactory entityManagerFactory = factoryBean .getNativeEntityManagerFactory ();
90
+ publishEventIfRequired (factoryBean , entityManagerFactory );
91
91
}
92
92
return bean ;
93
93
}
94
94
95
- private void publishEventIfRequired (EntityManagerFactory entityManagerFactory ) {
96
- DataSource dataSource = findDataSource (entityManagerFactory );
95
+ private void publishEventIfRequired (LocalContainerEntityManagerFactoryBean factoryBean ,
96
+ EntityManagerFactory entityManagerFactory ) {
97
+ DataSource dataSource = findDataSource (factoryBean , entityManagerFactory );
97
98
if (dataSource != null && isInitializingDatabase (dataSource )) {
98
99
this .applicationContext .publishEvent (new DataSourceSchemaCreatedEvent (dataSource ));
99
100
}
100
101
}
101
102
102
- private DataSource findDataSource (EntityManagerFactory entityManagerFactory ) {
103
+ private DataSource findDataSource (LocalContainerEntityManagerFactoryBean factoryBean ,
104
+ EntityManagerFactory entityManagerFactory ) {
103
105
Object dataSource = entityManagerFactory .getProperties ().get ("javax.persistence.nonJtaDataSource" );
106
+ if (dataSource == null ) {
107
+ dataSource = factoryBean .getPersistenceUnitInfo ().getNonJtaDataSource ();
108
+ }
104
109
return (dataSource instanceof DataSource ) ? (DataSource ) dataSource : this .dataSource ;
105
110
}
106
111
@@ -145,14 +150,13 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
145
150
146
151
final class DataSourceSchemaCreatedPublisher implements JpaVendorAdapter {
147
152
148
- private final AsyncTaskExecutor bootstrapExecutor ;
153
+ private final LocalContainerEntityManagerFactoryBean factoryBean ;
149
154
150
155
private final JpaVendorAdapter delegate ;
151
156
152
- private DataSourceSchemaCreatedPublisher (AsyncTaskExecutor bootstrapExecutor ,
153
- JpaVendorAdapter jpaVendorAdapter ) {
154
- this .bootstrapExecutor = bootstrapExecutor ;
155
- this .delegate = jpaVendorAdapter ;
157
+ private DataSourceSchemaCreatedPublisher (LocalContainerEntityManagerFactoryBean factoryBean ) {
158
+ this .factoryBean = factoryBean ;
159
+ this .delegate = factoryBean .getJpaVendorAdapter ();
156
160
}
157
161
158
162
@ Override
@@ -191,10 +195,12 @@ public Class<? extends EntityManager> getEntityManagerInterface() {
191
195
}
192
196
193
197
@ Override
194
- public void postProcessEntityManagerFactory (EntityManagerFactory emf ) {
195
- this .delegate .postProcessEntityManagerFactory (emf );
196
- if (this .bootstrapExecutor != null ) {
197
- this .bootstrapExecutor .execute (() -> DataSourceInitializedPublisher .this .publishEventIfRequired (emf ));
198
+ public void postProcessEntityManagerFactory (EntityManagerFactory entityManagerFactory ) {
199
+ this .delegate .postProcessEntityManagerFactory (entityManagerFactory );
200
+ AsyncTaskExecutor bootstrapExecutor = this .factoryBean .getBootstrapExecutor ();
201
+ if (bootstrapExecutor != null ) {
202
+ bootstrapExecutor .execute (() -> DataSourceInitializedPublisher .this
203
+ .publishEventIfRequired (this .factoryBean , entityManagerFactory ));
198
204
}
199
205
}
200
206
0 commit comments