Tx Control spec compliance - avoid NPEs when null Maps are passed, throw thw correct exception from joinTransaction
diff --git a/tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/JPADataSourceHelper.java b/tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/JPADataSourceHelper.java
index d5e335b..779e4ab 100644
--- a/tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/JPADataSourceHelper.java
+++ b/tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/JPADataSourceHelper.java
@@ -38,7 +38,10 @@
 			hcfg.setIdleTimeout(toLong(resourceProviderProperties, IDLE_TIMEOUT, TimeUnit.MINUTES.toMillis(3)));
 			hcfg.setMaxLifetime(toLong(resourceProviderProperties, CONNECTION_LIFETIME, HOURS.toMillis(3)));
 	
-			hcfg.setConnectionTestQuery((String)resourceProviderProperties.get(CONNECTION_TEST_QUERY));
+			ofNullable(resourceProviderProperties)
+				.map(m -> m.get(CONNECTION_TEST_QUERY))
+				.map(String::valueOf)
+				.ifPresent(q -> hcfg.setConnectionTestQuery(q));
 			
 			toUse = new HikariDataSource(hcfg);
 
diff --git a/tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/ScopedEntityManagerWrapper.java b/tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/ScopedEntityManagerWrapper.java
index d654bf2..c89fa64 100644
--- a/tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/ScopedEntityManagerWrapper.java
+++ b/tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/ScopedEntityManagerWrapper.java
@@ -19,7 +19,8 @@
 package org.apache.aries.tx.control.jpa.common.impl;
 
 import javax.persistence.EntityManager;
-import javax.persistence.TransactionRequiredException;
+
+import org.osgi.service.transaction.control.TransactionException;
 
 public class ScopedEntityManagerWrapper extends EntityManagerWrapper {
 
@@ -41,7 +42,7 @@
 
 	@Override
 	public void joinTransaction() {
-		throw new TransactionRequiredException("This EntityManager is being used in the No Transaction scope. There is no transaction to join.");
+		throw new TransactionException("This EntityManager is being used in the No Transaction scope. There is no transaction to join.");
 	}
 
 	@Override
diff --git a/tx-control-providers/jpa/tx-control-provider-jpa-xa/src/main/java/org/apache/aries/tx/control/jpa/xa/impl/JPAEntityManagerProviderFactoryImpl.java b/tx-control-providers/jpa/tx-control-provider-jpa-xa/src/main/java/org/apache/aries/tx/control/jpa/xa/impl/JPAEntityManagerProviderFactoryImpl.java
index c4ce8f9..fec6bb8 100644
--- a/tx-control-providers/jpa/tx-control-provider-jpa-xa/src/main/java/org/apache/aries/tx/control/jpa/xa/impl/JPAEntityManagerProviderFactoryImpl.java
+++ b/tx-control-providers/jpa/tx-control-provider-jpa-xa/src/main/java/org/apache/aries/tx/control/jpa/xa/impl/JPAEntityManagerProviderFactoryImpl.java
@@ -84,11 +84,12 @@
 	public AbstractJPAEntityManagerProvider getProviderFor(EntityManagerFactoryBuilder emfb, Map<String, Object> jpaProperties,
 			Map<String, Object> resourceProviderProperties) {
 		
-		Map<String, Object> jpaPropsToUse = new HashMap<>(jpaProperties);
+		Map<String, Object> jpaPropsToUse = jpaProperties == null ? new HashMap<>() :
+			new HashMap<>(jpaProperties);
 		jpaPropsToUse.put(TRANSACTION_TYPE, JTA.name());
 		
 		Function<ThreadLocal<TransactionControl>, AbstractJPAEntityManagerProvider> create;
-		if(jpaProperties.containsKey("osgi.jdbc.provider")) {
+		if(jpaPropsToUse.containsKey("osgi.jdbc.provider")) {
 			create = handleJDBCResourceProvider(emfb, resourceProviderProperties, jpaPropsToUse);			
 		} else if(toBoolean(jpaPropsToUse, PRE_ENLISTED_DB_CONNECTION, false)) {
 			create = handlePreEnlistedConnection(emfb, resourceProviderProperties, jpaPropsToUse);