public AbstractJPAEntityManagerProvider getProviderFor()

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();
				}
			});
	}