You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2018/01/24 14:00:35 UTC

[aries-tx-control] branch master updated: Tx Control spec compliance - avoid NPEs when null Maps are passed, throw thw correct exception from joinTransaction

This is an automated email from the ASF dual-hosted git repository.

timothyjward pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-tx-control.git


The following commit(s) were added to refs/heads/master by this push:
     new 2d64bd6  Tx Control spec compliance - avoid NPEs when null Maps are passed, throw thw correct exception from joinTransaction
2d64bd6 is described below

commit 2d64bd67626a5b311dcd2d326532085313ff59dc
Author: Tim Ward <ti...@apache.org>
AuthorDate: Wed Jan 24 08:59:36 2018 -0500

    Tx Control spec compliance - avoid NPEs when null Maps are passed, throw thw correct exception from joinTransaction
---
 .../apache/aries/tx/control/jpa/common/impl/JPADataSourceHelper.java | 5 ++++-
 .../aries/tx/control/jpa/common/impl/ScopedEntityManagerWrapper.java | 5 +++--
 .../tx/control/jpa/xa/impl/JPAEntityManagerProviderFactoryImpl.java  | 5 +++--
 3 files changed, 10 insertions(+), 5 deletions(-)

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 @@ public class JPADataSourceHelper {
 			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 @@ public class ScopedEntityManagerWrapper extends EntityManagerWrapper {
 
 	@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 class JPAEntityManagerProviderFactoryImpl implements InternalJPAEntityMan
 	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);

-- 
To stop receiving notification emails like this one, please contact
timothyjward@apache.org.