@@ -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
@@ -142,14 +147,13 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
142
147
143
148
final class DataSourceSchemaCreatedPublisher implements JpaVendorAdapter {
144
149
145
- private final AsyncTaskExecutor bootstrapExecutor ;
150
+ private final LocalContainerEntityManagerFactoryBean factoryBean ;
146
151
147
152
private final JpaVendorAdapter delegate ;
148
153
149
- private DataSourceSchemaCreatedPublisher (AsyncTaskExecutor bootstrapExecutor ,
150
- JpaVendorAdapter jpaVendorAdapter ) {
151
- this .bootstrapExecutor = bootstrapExecutor ;
152
- this .delegate = jpaVendorAdapter ;
154
+ private DataSourceSchemaCreatedPublisher (LocalContainerEntityManagerFactoryBean factoryBean ) {
155
+ this .factoryBean = factoryBean ;
156
+ this .delegate = factoryBean .getJpaVendorAdapter ();
153
157
}
154
158
155
159
@ Override
@@ -188,10 +192,12 @@ public Class<? extends EntityManager> getEntityManagerInterface() {
188
192
}
189
193
190
194
@ Override
191
- public void postProcessEntityManagerFactory (EntityManagerFactory emf ) {
192
- this .delegate .postProcessEntityManagerFactory (emf );
193
- if (this .bootstrapExecutor != null ) {
194
- this .bootstrapExecutor .execute (() -> DataSourceInitializedPublisher .this .publishEventIfRequired (emf ));
195
+ public void postProcessEntityManagerFactory (EntityManagerFactory entityManagerFactory ) {
196
+ this .delegate .postProcessEntityManagerFactory (entityManagerFactory );
197
+ AsyncTaskExecutor bootstrapExecutor = this .factoryBean .getBootstrapExecutor ();
198
+ if (bootstrapExecutor != null ) {
199
+ bootstrapExecutor .execute (() -> DataSourceInitializedPublisher .this
200
+ .publishEventIfRequired (this .factoryBean , entityManagerFactory ));
195
201
}
196
202
}
197
203
0 commit comments