[tx-control] Add tests for OpenJPA 2.4.1

git-svn-id: https://svn.apache.org/repos/asf/aries/trunk/tx-control@1738125 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java b/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java
index dfb02e2..a778fd2 100644
--- a/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java
+++ b/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/AbstractJPATransactionTest.java
@@ -30,11 +30,8 @@
 import java.util.Hashtable;

 

 import javax.persistence.EntityManager;

-import javax.persistence.criteria.CriteriaBuilder;

-import javax.persistence.criteria.CriteriaDelete;

 

 import org.apache.aries.itest.AbstractIntegrationTest;

-import org.apache.aries.tx.control.itests.entity.Message;

 import org.h2.tools.Server;

 import org.junit.After;

 import org.junit.Before;

@@ -91,7 +88,7 @@
 

 	private EntityManager configuredEntityManager(String jdbcUrl) throws IOException {

 		

-		Dictionary<String, Object> props = new Hashtable<>();

+		Dictionary<String, Object> props = getBaseProperties();

 		

 		props.put(DataSourceFactory.OSGI_JDBC_DRIVER_CLASS, "org.h2.Driver");

 		props.put(DataSourceFactory.JDBC_URL, jdbcUrl);

@@ -115,23 +112,14 @@
 		

 		return context().getService(JPAEntityManagerProvider.class, 5000).getResource(txControl);

 	}

+

+	protected Dictionary<String, Object> getBaseProperties() {

+		return new Hashtable<>();

+	}

 	

 	@After

 	public void tearDown() {

 

-		try {

-			txControl.required(() -> 

-				{

-					CriteriaBuilder cb = em.getCriteriaBuilder();

-					CriteriaDelete<Message> delete = cb.createCriteriaDelete(Message.class);

-					delete.from(Message.class);

-					return em.createQuery(delete).executeUpdate();

-				});

-		} catch (Exception e) {

-			e.printStackTrace();

-		}

-		

-		

 		clearConfiguration();

 		

 		if(server != null) {

@@ -192,7 +180,7 @@
 				mavenBundle("org.ops4j.pax.logging", "pax-logging-api").versionAsInProject(),

 				mavenBundle("org.ops4j.pax.logging", "pax-logging-service").versionAsInProject()

 				

-//				,CoreOptions.vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005")

+				,CoreOptions.vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005")

 				);

 	}

 

diff --git a/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleOpenJPA_2_4_1_Test.java b/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleOpenJPA_2_4_1_Test.java
new file mode 100644
index 0000000..85c4bae
--- /dev/null
+++ b/tx-control-jpa-itests/src/test/java/org/apache/aries/tx/control/itests/SimpleOpenJPA_2_4_1_Test.java
@@ -0,0 +1,54 @@
+package org.apache.aries.tx.control.itests;
+
+import static org.ops4j.pax.exam.CoreOptions.bootClasspathLibrary;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.systemPackage;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.ops4j.pax.exam.CoreOptions;
+import org.ops4j.pax.exam.Option;
+
+public class SimpleOpenJPA_2_4_1_Test extends AbstractSimpleTransactionTest {
+
+	protected String ariesJPAVersion() {
+		return "2.4.0-SNAPSHOT";
+	}
+	
+	protected Dictionary<String, Object> getBaseProperties() {
+		Dictionary<String, Object> base = new Hashtable<>();
+		//This is necessary due to https://issues.apache.org/jira/browse/OPENJPA-2521
+		base.put("openjpa.MetaDataFactory", "jpa(Types=org.apache.aries.tx.control.itests.entity.Message)");
+		base.put("openjpa.RuntimeUnenhancedClasses", "supported");
+		
+		//This is necessary as OpenJPA is only JPA 2.0 compliant and does not understand the standard properties
+		base.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true, SchemaAction='add,deleteTableContents')");
+		
+		base.put("openjpa.Log", "DefaultLevel=TRACE");
+		return base;
+	}
+	
+	@Override
+	protected Option jpaProvider() {
+		return CoreOptions.composite(
+			// Add JTA 1.1 as a system package because of the link to javax.sql
+			
+			systemProperty(ARIES_EMF_BUILDER_TARGET_FILTER)
+				.value("(osgi.unit.provider=org.apache.openjpa.persistence.PersistenceProviderImpl)"),
+			systemPackage("javax.transaction;version=1.1"),
+			systemPackage("javax.transaction.xa;version=1.1"),
+			bootClasspathLibrary(mavenBundle("org.apache.geronimo.specs", "geronimo-jta_1.1_spec", "1.1.1")).beforeFramework(),
+			
+			// OpenJPA bundles and their dependencies (JPA API is available from the tx-control)
+			mavenBundle("commons-pool", "commons-pool", "1.5.4"),
+			mavenBundle("commons-lang", "commons-lang", "2.4"),
+			mavenBundle("commons-collections", "commons-collections", "3.2.2"),
+			mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.serp", "1.15.1_1"),
+			mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-dbcp", "1.4_3"),
+			mavenBundle("org.apache.xbean", "xbean-asm5-shaded", "3.17"),
+			mavenBundle("org.apache.openjpa", "openjpa", "2.4.1"));
+	}
+
+}
diff --git a/tx-control-provider-jpa-local/src/main/java/org/apache/aries/tx/control/jpa/local/impl/JPAEntityManagerProviderFactoryImpl.java b/tx-control-provider-jpa-local/src/main/java/org/apache/aries/tx/control/jpa/local/impl/JPAEntityManagerProviderFactoryImpl.java
index 5eb6158..93bb9f0 100644
--- a/tx-control-provider-jpa-local/src/main/java/org/apache/aries/tx/control/jpa/local/impl/JPAEntityManagerProviderFactoryImpl.java
+++ b/tx-control-provider-jpa-local/src/main/java/org/apache/aries/tx/control/jpa/local/impl/JPAEntityManagerProviderFactoryImpl.java
@@ -37,7 +37,7 @@
 			tranType = PersistenceUnitTransactionType.valueOf(o.toString());
 		} else {
 			//TODO log this?
-			tranType = null;
+			tranType = RESOURCE_LOCAL;
 		}
 		
 		if(RESOURCE_LOCAL != tranType) {