in tx-control-providers/jpa/tx-control-provider-jpa-local/src/main/java/org/apache/aries/tx/control/jpa/local/impl/JPAEntityManagerProviderFactoryImpl.java [50:91]
public AbstractJPAEntityManagerProvider getProviderFor(EntityManagerFactoryBuilder emfb, Map<String, Object> jpaProperties,
Map<String, Object> resourceProviderProperties) {
Map<String, Object> jpaPropsToUse = jpaProperties == null ? new HashMap<>() : new HashMap<>(jpaProperties);
Map<String, Object> resourceProviderPropertiesToUse = resourceProviderProperties == null ? new HashMap<>() : new HashMap<>(resourceProviderProperties);
checkEnlistment(resourceProviderPropertiesToUse);
if(resourceProviderPropertiesToUse.containsKey(TRANSACTIONAL_DB_CONNECTION)) {
return delegateTransactionality(emfb, jpaPropsToUse, resourceProviderPropertiesToUse);
}
Object found = jpaPropsToUse.get("javax.persistence.dataSource");
if(found == null) {
found = jpaPropsToUse.get("javax.persistence.nonJtaDataSource");
}
if(found == null) {
throw new IllegalArgumentException("No datasource was found when checking the javax.persistence.dataSource and javax.persistence.nonJtaDataSource.");
}
DataSource unpooled;
if(found instanceof DataSource) {
unpooled = (DataSource) found;
} else {
throw new IllegalArgumentException("The object found when checking the javax.persistence.dataSource and javax.persistence.nonJtaDataSource properties was not a DataSource.");
}
DataSource toUse = JPADataSourceHelper.poolIfNecessary(resourceProviderPropertiesToUse, unpooled);
jpaPropsToUse.put("javax.persistence.dataSource", toUse);
jpaPropsToUse.put("javax.persistence.nonJtaDataSource", toUse);
EntityManagerFactory emf = emfb.createEntityManagerFactory(jpaPropsToUse);
validateEMF(emf);
return new JPAEntityManagerProviderImpl(emf, false, () -> {
emf.close();
if (toUse instanceof HikariDataSource) {
((HikariDataSource)toUse).close();
}
});
}