Update to implement the new methods on EntityManagerFactoryBuilder, add tests for a more recent Hibernate
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerEclipseLinkTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerEclipseLinkTest.java
index 6ed52fb..1eef995 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerEclipseLinkTest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerEclipseLinkTest.java
@@ -24,6 +24,7 @@
 import org.junit.Test;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
+import org.osgi.framework.Bundle;
 
 public class JPAContainerEclipseLinkTest extends JPAContainerTest {
 
@@ -44,4 +45,14 @@
         assertTrue("Not PersistenceCapable",
                    Arrays.asList(Car.class.getInterfaces()).contains(PersistenceWeaved.class));
     }
+    
+	@Override
+	protected String getProviderClassName() {
+		return "org.eclipse.persistence.jpa.PersistenceProvider";
+	}
+
+	@Override
+	protected Bundle getProviderBundle() {
+		return getBundleByName("org.apache.aries.jpa.eclipselink.adapter");
+	}
 }
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernate5_2Test.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernate5_2Test.java
new file mode 100644
index 0000000..31849eb
--- /dev/null
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernate5_2Test.java
@@ -0,0 +1,47 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.aries.jpa.container.itest;
+
+import org.hibernate.osgi.HibernateBundleActivator;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
+
+public class JPAContainerHibernate5_2Test extends JPAContainerTest {
+
+    @Configuration
+    public Option[] configuration() {
+        return new Option[] {
+            baseOptions(), //
+            ariesJpa21(), //
+            derbyDSF(), //
+            jta12Bundles(), //
+            hibernate5_2(), //
+            testBundle(), //
+        };
+    }
+    
+	@Override
+	protected String getProviderClassName() {
+		return "org.hibernate.jpa.HibernatePersistenceProvider";
+	}
+
+	@Override
+	protected Bundle getProviderBundle() {
+		return FrameworkUtil.getBundle(HibernateBundleActivator.class);
+	}
+}
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernateTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernateTest.java
index da7ccf2..846c6bd 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernateTest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerHibernateTest.java
@@ -15,8 +15,11 @@
  */
 package org.apache.aries.jpa.container.itest;
 
+import org.hibernate.osgi.HibernateBundleActivator;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
 
 public class JPAContainerHibernateTest extends JPAContainerTest {
 
@@ -31,4 +34,14 @@
             testBundle(), //
         };
     }
+    
+	@Override
+	protected String getProviderClassName() {
+		return "org.hibernate.ejb.HibernatePersistence";
+	}
+
+	@Override
+	protected Bundle getProviderBundle() {
+		return FrameworkUtil.getBundle(HibernateBundleActivator.class);
+	}
 }
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerOpenJPATest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerOpenJPATest.java
index afc83b5..457529c 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerOpenJPATest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerOpenJPATest.java
@@ -24,6 +24,8 @@
 import org.junit.Test;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
 
 public class JPAContainerOpenJPATest extends JPAContainerTest {
     
@@ -46,4 +48,14 @@
 
     }
 
+	@Override
+	protected String getProviderClassName() {
+		return "org.apache.openjpa.persistence.PersistenceProviderImpl";
+	}
+
+	@Override
+	protected Bundle getProviderBundle() {
+		return FrameworkUtil.getBundle(PersistenceCapable.class);
+	}
+
 }
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java
index c5c0edd..463338a 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/container/itest/JPAContainerTest.java
@@ -35,6 +35,7 @@
 import org.apache.aries.jpa.itest.AbstractCarJPAITest;
 import org.apache.aries.jpa.supplier.EmSupplier;
 import org.junit.Test;
+import org.osgi.framework.Bundle;
 import org.osgi.service.coordinator.Coordination;
 import org.osgi.service.coordinator.Coordinator;
 import org.osgi.service.jdbc.DataSourceFactory;
@@ -44,10 +45,17 @@
     @Inject
     Coordinator coordinator;
 
+    protected abstract String getProviderClassName();
+    protected abstract Bundle getProviderBundle();
+    
     @Test
     public void testCarEMFBuilder() throws Exception {
         EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
                                                             "(osgi.unit.name=" + DSF_TEST_UNIT + ")");
+        
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
         Map<String, Object> props = new HashMap<String, Object>();
         EntityManagerFactory emf = emfBuilder.createEntityManagerFactory(props);
         carLifecycleRL(emf.createEntityManager());
@@ -57,6 +65,10 @@
     public void testTruckEMFBuilder() throws Exception {
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + DSF_TEST_UNIT + ")");
+
+    	assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+    	
     	Map<String, Object> props = new HashMap<String, Object>();
     	EntityManagerFactory emf = emfBuilder.createEntityManagerFactory(props);
     	truckLifecycleRL(emf.createEntityManager());
@@ -186,6 +198,9 @@
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
     	
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+    	
     	Properties jdbcProps = new Properties();
     	jdbcProps.setProperty("url", "jdbc:derby:memory:DSFTEST;create=true");
     	
@@ -204,7 +219,10 @@
     	
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
-    	
+    	 
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
     	Properties jdbcProps = new Properties();
     	jdbcProps.setProperty("url", "jdbc:derby:memory:DSFTEST;create=true");
     	
@@ -220,7 +238,10 @@
     public void testCarEMFBuilderExternalDSXA() throws Exception {
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
-
+    	 
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
     	Map<String, Object> props = new HashMap<String, Object>();
     	props.put("javax.persistence.jtaDataSource", ds);
     	props.put("javax.persistence.transactionType", JTA.name());
@@ -234,7 +255,10 @@
     public void testTruckEMFBuilderExternalDSXA() throws Exception {
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
-    	
+    	 
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
     	Map<String, Object> props = new HashMap<String, Object>();
     	props.put("javax.persistence.jtaDataSource", ds);
     	props.put("javax.persistence.transactionType", JTA.name());
@@ -249,6 +273,9 @@
         EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
                         "(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
         
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
         Map<String, Object> props = new HashMap<String, Object>();
         Properties jdbcProps = new Properties();
         jdbcProps.setProperty("url", "jdbc:derby:memory:TESTNOJTA;create=true");
@@ -263,7 +290,10 @@
     public void testTruckEMFBuilderNoNonJTADataSource() throws Exception {
     	EntityManagerFactoryBuilder emfBuilder = getService(EntityManagerFactoryBuilder.class,
     			"(osgi.unit.name=" + EXTERNAL_TEST_UNIT + ")");
-    	
+    	 
+        assertEquals(getProviderClassName(), emfBuilder.getPersistenceProviderName());
+    	assertEquals(getProviderBundle(), emfBuilder.getPersistenceProviderBundle());
+        
     	Map<String, Object> props = new HashMap<String, Object>();
     	Properties jdbcProps = new Properties();
     	jdbcProps.setProperty("url", "jdbc:derby:memory:TESTNOJTA;create=true");
diff --git a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
index d3eb4cf..c0a2692 100644
--- a/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
+++ b/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/itest/AbstractJPAItest.java
@@ -19,6 +19,7 @@
 import static org.ops4j.pax.exam.CoreOptions.frameworkProperty;
 import static org.ops4j.pax.exam.CoreOptions.junitBundles;
 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 static org.ops4j.pax.exam.CoreOptions.vmOption;
 import static org.ops4j.pax.exam.CoreOptions.when;
@@ -269,6 +270,23 @@
                          mvnBundle("org.hibernate", "hibernate-osgi")
             );
     }
+    
+    protected Option hibernate5_2() {
+    	return composite(
+    			systemPackage("javax.xml.stream;version=1.0"), 
+    			systemPackage("javax.xml.stream.events;version=1.0"),
+				systemPackage("javax.xml.stream.util;version=1.0"),
+    			mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.antlr", "2.7.7_5"),
+				mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.dom4j", "1.6.1_5"),
+				mavenBundle("com.fasterxml", "classmate", "1.3.0"),
+				mavenBundle("org.javassist", "javassist", "3.20.0-GA"),
+				mavenBundle("org.jboss.logging", "jboss-logging", "3.3.0.Final"),
+				mavenBundle("org.jboss", "jandex", "2.0.3.Final"),
+				mavenBundle("org.hibernate.common", "hibernate-commons-annotations", "5.0.1.Final"),
+				mavenBundle("org.hibernate", "hibernate-core", "5.2.10.Final"),
+				mavenBundle("org.hibernate", "hibernate-osgi", "5.2.10.Final")
+    			);
+    }
 
     protected Option derbyDSF() {
         return composite(
diff --git a/javax-persistence/README.md b/javax-persistence/README.md
new file mode 100644
index 0000000..d663a0c
--- /dev/null
+++ b/javax-persistence/README.md
@@ -0,0 +1,15 @@
+# Aries JPA Specification Jars
+
+These projects contain the JPA API at various versions, providing proper OSGi packaging and contracts so that they can be used easily in OSGi.
+
+##Using the JPA API with your OSGi bundles
+
+If you are using a bnd based plugin (e.g. the bnd-maven-plugin or the maven-bundle-plugin) then you should make sure to set the following:
+
+    -contract: *
+
+or
+
+    -contract: JavaJPA
+
+in your bnd configuration. This will ensure that your bundle is built depending on the JPA contract, and therefore that it will not need to be repackaged to use future, backward compatible versions of the JPA specification.
\ No newline at end of file
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java
index 56ad2c2..dca7270 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/AriesEntityManagerFactoryBuilder.java
@@ -67,6 +67,7 @@
 	private boolean closed;
 
 	private final PersistenceProvider provider;
+	private final Bundle providerBundle;
 	private final PersistenceUnit persistenceUnit;
 	private final BundleContext containerContext;
 	private final PersistenceUnitTransactionType originalTxType;
@@ -83,8 +84,10 @@
 	private boolean complete;
 
 
-	public AriesEntityManagerFactoryBuilder(BundleContext containerContext, PersistenceProvider provider, PersistenceUnit persistenceUnit) {
+
+	public AriesEntityManagerFactoryBuilder(BundleContext containerContext, PersistenceProvider provider, Bundle providerBundle, PersistenceUnit persistenceUnit) {
 		this.provider = provider;
+		this.providerBundle = providerBundle;
 		this.persistenceUnit = persistenceUnit;
 		this.containerContext = containerContext;
 		this.originalTxType = persistenceUnit.getTransactionType();
@@ -139,6 +142,17 @@
     }
 
 	@Override
+	public String getPersistenceProviderName() {
+		String name = persistenceUnit.getPersistenceProviderClassName();
+		return name == null ? provider.getClass().getName() : name;
+	}
+
+	@Override
+	public Bundle getPersistenceProviderBundle() {
+		return providerBundle;
+	}
+
+	@Override
 	public EntityManagerFactory createEntityManagerFactory(Map<String, Object> props) {
 		
 		synchronized (this) {
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceProviderTracker.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceProviderTracker.java
index ac7e96d..540a792 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceProviderTracker.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceProviderTracker.java
@@ -85,7 +85,7 @@
 
         createAndCloseDummyEMF(provider);
 
-        stored.builder = new AriesEntityManagerFactoryBuilder(context, provider, punit);
+        stored.builder = new AriesEntityManagerFactoryBuilder(context, provider, reference.getBundle(), punit);
         Dictionary<String, ?> props = AriesEntityManagerFactoryBuilder.createBuilderProperties(punit, punit.getBundle());
         stored.reg = context.registerService(EntityManagerFactoryBuilder.class, stored.builder , props);
         return stored;
diff --git a/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/PropsConfigurationTest.java b/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/PropsConfigurationTest.java
index b0f1f7e..4b94f7f 100644
--- a/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/PropsConfigurationTest.java
+++ b/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/PropsConfigurationTest.java
@@ -21,6 +21,7 @@
 import static java.util.Collections.singletonMap;

 import static javax.persistence.spi.PersistenceUnitTransactionType.JTA;

 import static javax.persistence.spi.PersistenceUnitTransactionType.RESOURCE_LOCAL;

+import static org.junit.Assert.assertEquals;

 import static org.junit.Assert.assertSame;

 import static org.junit.Assert.fail;

 import static org.mockito.AdditionalMatchers.and;

@@ -29,7 +30,6 @@
 import static org.mockito.Matchers.anyMap;

 import static org.mockito.Matchers.argThat;

 import static org.mockito.Matchers.eq;

-import static org.mockito.Mockito.atLeastOnce;

 import static org.mockito.Mockito.verify;

 import static org.mockito.Mockito.verifyZeroInteractions;

 import static org.mockito.Mockito.when;

@@ -75,6 +75,8 @@
 @RunWith(MockitoJUnitRunner.class)

 public class PropsConfigurationTest {

 

+	private static final String ECLIPSE_PERSISTENCE_PROVIDER = "org.eclipse.persistence.jpa.PersistenceProvider";

+

 	private static final String JDBC_PASSWORD = "123456";

 

 	private static final String JDBC_USER = "bob";

@@ -94,7 +96,7 @@
 	BundleContext containerContext, punitContext;

 	

 	@Mock

-	Bundle punitBundle;

+	Bundle punitBundle, providerBundle;

 	

 	@Mock

 	EntityManagerFactory emf;

@@ -122,7 +124,7 @@
 		

 		when(punit.getPersistenceUnitName()).thenReturn("test-props");

 		when(punit.getPersistenceProviderClassName())

-			.thenReturn("org.eclipse.persistence.jpa.PersistenceProvider");

+			.thenReturn(ECLIPSE_PERSISTENCE_PROVIDER);

 		when(punit.getTransactionType()).thenReturn(PersistenceUnitTransactionType.JTA);

 		when(punit.getBundle()).thenReturn(punitBundle);

 		when(punit.getProperties()).thenReturn(punitProperties);

@@ -161,7 +163,7 @@
 	public void testRegistersManagedEMF() throws InvalidSyntaxException, ConfigurationException {

 		

 		AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-				containerContext, provider, punit);

+				containerContext, provider, providerBundle, punit);

 		

 		verify(containerContext).registerService(eq(ManagedService.class),

 				any(ManagedService.class), argThat(servicePropsMatcher(

@@ -201,7 +203,10 @@
     		.thenReturn(emf);

     	

     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-        		containerContext, provider, punit);

+        		containerContext, provider, providerBundle, punit);

+    	

+    	assertEquals(ECLIPSE_PERSISTENCE_PROVIDER, emfb.getPersistenceProviderName());

+    	assertEquals(providerBundle, emfb.getPersistenceProviderBundle());

     	

     	try {

     		emfb.createEntityManagerFactory(null);

@@ -230,9 +235,12 @@
 		props.put("javax.persistence.dataSource", ds);

 		

 		AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-				containerContext, provider, punit);

-		emfb.createEntityManagerFactory(props);

+				containerContext, provider, providerBundle, punit);

 		

+		assertEquals(ECLIPSE_PERSISTENCE_PROVIDER, emfb.getPersistenceProviderName());

+    	assertEquals(providerBundle, emfb.getPersistenceProviderBundle());

+		

+		emfb.createEntityManagerFactory(props);

 		

 		verify(punit).setNonJtaDataSource(ds);

 		verify(punitContext).registerService(eq(EntityManagerFactory.class),

@@ -259,7 +267,7 @@
         props.put("javax.persistence.dataSource", ds);

        

         AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-        		containerContext, provider, punit);

+        		containerContext, provider, providerBundle, punit);

         emfb.createEntityManagerFactory(props);

         

         

@@ -289,7 +297,7 @@
     			any(Map.class))).thenReturn(emf);

     	

     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-    			containerContext, provider, punit);

+    			containerContext, provider, providerBundle, punit);

     	

     	verify(punit).setJtaDataSource(ds);

     	verify(punitContext).registerService(eq(EntityManagerFactory.class),

@@ -317,7 +325,7 @@
     			any(Map.class))).thenReturn(emf);

     	

     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-    			containerContext, provider, punit);

+    			containerContext, provider, providerBundle, punit);

     	

     	verify(punit).setJtaDataSource(ds);

     	verify(punitContext).registerService(eq(EntityManagerFactory.class),

@@ -351,7 +359,7 @@
     			any(Map.class))).thenReturn(emf);

     	

     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-    			containerContext, provider, punit);

+    			containerContext, provider, providerBundle, punit);

 

     	verifyZeroInteractions(provider);

     	

@@ -393,7 +401,7 @@
     			any(Map.class))).thenReturn(emf);

     	

     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-    			containerContext, provider, punit);

+    			containerContext, provider, providerBundle, punit);

     	

     	verify(punit).setJtaDataSource(ds);

     	verify(punitContext).registerService(eq(EntityManagerFactory.class),

@@ -418,7 +426,7 @@
     			any(Map.class))).thenReturn(emf);

     	

     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-    			containerContext, provider, punit);

+    			containerContext, provider, providerBundle, punit);

     	

     	verify(punit).setNonJtaDataSource(ds);

     	verify(punitContext).registerService(eq(EntityManagerFactory.class),

@@ -438,7 +446,7 @@
 		props.put("javax.persistence.dataSource", ds);

 		

 		AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-				containerContext, provider, punit);

+				containerContext, provider, providerBundle, punit);

 		

 		EntityManagerFactory returnedEMF = emfb.createEntityManagerFactory(props);

 		

@@ -466,7 +474,7 @@
     	props.put("javax.persistence.dataSource", ds);

     	

     	AriesEntityManagerFactoryBuilder emfb = new AriesEntityManagerFactoryBuilder(

-    			containerContext, provider, punit);

+    			containerContext, provider, providerBundle, punit);

     	

     	emfb.createEntityManagerFactory(props);

     	

diff --git a/jpa-support/README.md b/jpa-support/README.md
new file mode 100644
index 0000000..14d50e9
--- /dev/null
+++ b/jpa-support/README.md
@@ -0,0 +1,3 @@
+#Aries JPA Helper services
+
+These services are deprecated in favour of the standard OSGi Transaction Control Service, which provides a much fuller set of available functions.
\ No newline at end of file