Ensure that "No configuration" callbacks don't delete an existing EntityManagerFactoryBuilder configured EMF
diff --git a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java
index 825cc8d..62b29cd 100644
--- a/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java
+++ b/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/ManagedEMF.java
@@ -22,6 +22,7 @@
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.cm.ManagedService;
@@ -40,6 +41,8 @@
 	private final AriesEntityManagerFactoryBuilder builder;
 	
 	private final String pUnitName;
+	
+	private final AtomicBoolean configured = new AtomicBoolean(false);
 
 	public ManagedEMF(AriesEntityManagerFactoryBuilder builder, String name) {
 		this.builder = builder;
@@ -48,6 +51,21 @@
 
 	@Override
 	public void updated(Dictionary<String, ?> properties) throws ConfigurationException {
+		
+		if(properties == null) {
+			if(configured.getAndSet(false)) {
+				if (LOGGER.isDebugEnabled()) {
+					LOGGER.debug("The configuration has been deleted for persistence unit {}. Destroying the EMF", pUnitName);
+				}
+				builder.closeEMF();
+			} else {
+				if (LOGGER.isDebugEnabled()) {
+					LOGGER.debug("Ignoring the unset configuration for persistence unit {}", pUnitName);
+				}
+				return;
+			}
+		}
+		
 		Map<String, Object> overrides = (properties != null) ? asMap(properties) : null;
 		LOGGER.info("Configuration received for persistence unit {}", pUnitName);
 		if (LOGGER.isDebugEnabled()) {
@@ -55,6 +73,7 @@
 		}
 		
 		builder.createEntityManagerFactory(overrides);
+		configured.set(true);
 	}
 
 	private Map<String, Object> asMap(Dictionary<String, ?> dict) {
diff --git a/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/ManagedEMFTest.java b/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/ManagedEMFTest.java
index 2d6d375..3ace0e9 100644
--- a/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/ManagedEMFTest.java
+++ b/jpa-container/src/test/java/org/apache/aries/jpa/container/impl/ManagedEMFTest.java
@@ -27,6 +27,7 @@
 import org.junit.Test;

 import org.junit.runner.RunWith;

 import org.mockito.Mock;

+import org.mockito.Mockito;

 import org.mockito.runners.MockitoJUnitRunner;

 import org.osgi.framework.InvalidSyntaxException;

 import org.osgi.service.cm.ConfigurationException;

@@ -41,7 +42,15 @@
     public void testEmfWithoutProps() throws InvalidSyntaxException, ConfigurationException {

     	ManagedEMF emf = new ManagedEMF(builder, "test");

         emf.updated(null);

-        verify(builder).createEntityManagerFactory(null);

+        Mockito.verifyZeroInteractions(builder);

+        

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

+		emf.updated(props);

+        verify(builder).createEntityManagerFactory(props);

+        

+        emf.updated(null);

+        verify(builder).closeEMF();

+        

     }

 

     @Test