diff --git a/pom.xml b/pom.xml
index cd37e22..f43aa0c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,6 +42,7 @@
 		<maven.compiler.source>1.8</maven.compiler.source>
 		<maven.compiler.target>1.8</maven.compiler.target>
 		<logback.version>1.2.3</logback.version>
+		<javax.persistence.api.version>1.0.2</javax.persistence.api.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<nexusproxy>https://nexus.onap.org</nexusproxy>
                 <sitePath>/content/sites/site/${project.groupId}/${project.artifactId}/${project.version}</sitePath>
@@ -53,6 +54,7 @@
 
 	<modules>
 		<module>utils-test</module>
+		<module>utils</module>
 		<module>common-logging</module>
 		<module>integrity-audit</module>
 		<module>integrity-monitor</module>
diff --git a/utils-test/pom.xml b/utils-test/pom.xml
index 31a2736..7df85eb 100644
--- a/utils-test/pom.xml
+++ b/utils-test/pom.xml
@@ -37,6 +37,7 @@
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
 			<version>4.11</version>
+			<scope>provided</scope>
 		</dependency>
 		<dependency>
 			<groupId>ch.qos.logback</groupId>
diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/test/ConstructionError.java b/utils-test/src/main/java/org/onap/policy/common/utils/test/ConstructionError.java
index 336dc60..2cab0f9 100644
--- a/utils-test/src/main/java/org/onap/policy/common/utils/test/ConstructionError.java
+++ b/utils-test/src/main/java/org/onap/policy/common/utils/test/ConstructionError.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Audit
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/test/ErrorsTester.java b/utils-test/src/main/java/org/onap/policy/common/utils/test/ErrorsTester.java
index 12b4844..1a69e58 100644
--- a/utils-test/src/main/java/org/onap/policy/common/utils/test/ErrorsTester.java
+++ b/utils-test/src/main/java/org/onap/policy/common/utils/test/ErrorsTester.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Monitor
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/test/ExceptionsTester.java b/utils-test/src/main/java/org/onap/policy/common/utils/test/ExceptionsTester.java
index 156fca8..b409108 100644
--- a/utils-test/src/main/java/org/onap/policy/common/utils/test/ExceptionsTester.java
+++ b/utils-test/src/main/java/org/onap/policy/common/utils/test/ExceptionsTester.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Monitor
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/test/ThrowablesTester.java b/utils-test/src/main/java/org/onap/policy/common/utils/test/ThrowablesTester.java
index bd8db4f..8c997d5 100644
--- a/utils-test/src/main/java/org/onap/policy/common/utils/test/ThrowablesTester.java
+++ b/utils-test/src/main/java/org/onap/policy/common/utils/test/ThrowablesTester.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Monitor
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
@@ -485,7 +485,7 @@
 
 		} catch (NoSuchMethodException | SecurityException e) {
 			// this constructor is not defined so nothing to test
-			logger.debug("skipped test due to no " + testType + " constructor for: " + claz);
+			logger.debug("skipped test, no constructor for: " + claz + " due to: " + e);
 			return null;
 		}
 	}
diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/test/log/logback/ExtractAppender.java b/utils-test/src/main/java/org/onap/policy/common/utils/test/log/logback/ExtractAppender.java
index f012464..13031cf 100644
--- a/utils-test/src/main/java/org/onap/policy/common/utils/test/log/logback/ExtractAppender.java
+++ b/utils-test/src/main/java/org/onap/policy/common/utils/test/log/logback/ExtractAppender.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Audit
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/test/ConstructionErrorTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/test/ConstructionErrorTest.java
index 4a6cd90..e88180b 100644
--- a/utils-test/src/test/java/org/onap/policy/common/utils/test/ConstructionErrorTest.java
+++ b/utils-test/src/test/java/org/onap/policy/common/utils/test/ConstructionErrorTest.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Audit
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/test/ErrorsTesterTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/test/ErrorsTesterTest.java
index ae684d5..2d76f75 100644
--- a/utils-test/src/test/java/org/onap/policy/common/utils/test/ErrorsTesterTest.java
+++ b/utils-test/src/test/java/org/onap/policy/common/utils/test/ErrorsTesterTest.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Monitor
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/test/ExceptionsTesterTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/test/ExceptionsTesterTest.java
index 3848acd..b997522 100644
--- a/utils-test/src/test/java/org/onap/policy/common/utils/test/ExceptionsTesterTest.java
+++ b/utils-test/src/test/java/org/onap/policy/common/utils/test/ExceptionsTesterTest.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Monitor
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/test/ThrowablesTesterTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/test/ThrowablesTesterTest.java
index cb96e98..ea79dba 100644
--- a/utils-test/src/test/java/org/onap/policy/common/utils/test/ThrowablesTesterTest.java
+++ b/utils-test/src/test/java/org/onap/policy/common/utils/test/ThrowablesTesterTest.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Monitor
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/test/log/logback/ExtractAppenderTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/test/log/logback/ExtractAppenderTest.java
index a9a6925..6ef3682 100644
--- a/utils-test/src/test/java/org/onap/policy/common/utils/test/log/logback/ExtractAppenderTest.java
+++ b/utils-test/src/test/java/org/onap/policy/common/utils/test/log/logback/ExtractAppenderTest.java
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * Integrity Audit
+ * Common Utils-Test
  * ================================================================================
  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
diff --git a/utils-test/src/test/resources/logback-test.xml b/utils-test/src/test/resources/logback-test.xml
index 20869a4..c99cd4a 100644
--- a/utils-test/src/test/resources/logback-test.xml
+++ b/utils-test/src/test/resources/logback-test.xml
@@ -1,6 +1,6 @@
 <!--
   ============LICENSE_START=======================================================
-  integrity-monitor
+  ONAP Policy Engine - Common Modules
   ================================================================================
   Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
   ================================================================================
diff --git a/utils/pom.xml b/utils/pom.xml
new file mode 100644
index 0000000..a9aff9e
--- /dev/null
+++ b/utils/pom.xml
@@ -0,0 +1,120 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP Policy Engine - Common Modules
+  ================================================================================
+  Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed 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.
+  ============LICENSE_END=========================================================
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	
+  	<parent>
+		<groupId>org.onap.policy.common</groupId>
+		<artifactId>common-modules</artifactId>
+		<version>1.2.0-SNAPSHOT</version>
+	</parent>
+	
+	<artifactId>utils</artifactId>
+	<description>Common Utilities</description>
+	<packaging>jar</packaging>
+	
+	<properties>
+		<powermock.version>1.6.6</powermock.version>
+	</properties>
+  
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.persistence</groupId>
+			<artifactId>persistence-api</artifactId>
+			<version>${javax.persistence.api.version}</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.powermock</groupId>
+			<artifactId>powermock-api-mockito</artifactId>
+			<version>${powermock.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.powermock</groupId>
+			<artifactId>powermock-module-junit4</artifactId>
+			<version>${powermock.version}</version>
+			<scope>test</scope>
+			<exclusions>
+				<exclusion>
+					<groupId>junit</groupId>
+					<artifactId>junit</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.powermock</groupId>
+					<artifactId>powermock-core</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.powermock</groupId>
+					<artifactId>powermock-reflect</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.javassist</groupId>
+					<artifactId>javassist</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<!--This plugin's configuration is used to store Eclipse m2e settings 
+					only. It has no influence on the Maven build itself. -->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>org.jacoco</groupId>
+										<artifactId>
+											jacoco-maven-plugin
+										</artifactId>
+										<versionRange>
+											[0.7.1.201405082137,)
+										</versionRange>
+										<goals>
+											<goal>prepare-agent</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore></ignore>
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+</project>
diff --git a/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityMgrCloser.java b/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityMgrCloser.java
new file mode 100644
index 0000000..2ed5419
--- /dev/null
+++ b/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityMgrCloser.java
@@ -0,0 +1,59 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Common Utils
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.jpa;
+
+import javax.persistence.EntityManager;
+
+/**
+ * Wrapper for an <i>EntityManager</i>, providing auto-close functionality. This
+ * is useful in try-with-resources statements.
+ */
+public class EntityMgrCloser implements AutoCloseable {
+
+	/**
+	 * The wrapped manager.
+	 */
+	private final EntityManager em;
+
+	/**
+	 * 
+	 * @param em
+	 *            manager to be auto-closed
+	 */
+	public EntityMgrCloser(EntityManager em) {
+		this.em = em;
+	}
+
+	/**
+	 * Gets the EntityManager wrapped within this object.
+	 * 
+	 * @return the associated EntityManager
+	 */
+	public EntityManager getManager() {
+		return em;
+	}
+
+	@Override
+	public void close() {
+		em.close();
+	}
+
+}
diff --git a/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityMgrFactoryCloser.java b/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityMgrFactoryCloser.java
new file mode 100644
index 0000000..8910c08
--- /dev/null
+++ b/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityMgrFactoryCloser.java
@@ -0,0 +1,59 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Common Utils
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.jpa;
+
+import javax.persistence.EntityManagerFactory;
+
+/**
+ * Wrapper for an <i>EntityManagerFactory</i>, providing auto-close
+ * functionality. This is useful in try-with-resources statements.
+ */
+public class EntityMgrFactoryCloser implements AutoCloseable {
+
+	/**
+	 * The wrapped factory.
+	 */
+	private final EntityManagerFactory emf;
+
+	/**
+	 * 
+	 * @param emf
+	 *            manager to be auto-closed
+	 */
+	public EntityMgrFactoryCloser(EntityManagerFactory emf) {
+		this.emf = emf;
+	}
+
+	/**
+	 * Gets the EntityManagerFactory wrapped within this object.
+	 * 
+	 * @return the associated EntityManagerFactory
+	 */
+	public EntityManagerFactory getFactory() {
+		return emf;
+	}
+
+	@Override
+	public void close() {
+		emf.close();
+	}
+
+}
diff --git a/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityTransCloser.java b/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityTransCloser.java
new file mode 100644
index 0000000..ce30074
--- /dev/null
+++ b/utils/src/main/java/org/onap/policy/common/utils/jpa/EntityTransCloser.java
@@ -0,0 +1,77 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Common Utils
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.jpa;
+
+import javax.persistence.EntityTransaction;
+
+/**
+ * Wrapper for an <i>EntityTransaction</i> that is auto-rolled back when closed.
+ * This is useful in try-with-resources statements.
+ */
+public class EntityTransCloser implements AutoCloseable {
+
+	/**
+	 * Transaction to be rolled back.
+	 */
+	private final EntityTransaction trans;
+
+	/**
+	 * Begins a transaction.
+	 * 
+	 * @param et
+	 *            transaction to wrap/begin
+	 */
+	public EntityTransCloser(EntityTransaction et) {
+		trans = et;
+		trans.begin();
+	}
+
+	/**
+	 * Gets the wrapped transaction.
+	 * 
+	 * @return the transaction
+	 */
+	public EntityTransaction getTransation() {
+		return trans;
+	}
+
+	/**
+	 * Commits the transaction.
+	 */
+	public void commit() {
+		trans.commit();
+	}
+
+	/**
+	 * Rolls back the transaction.
+	 */
+	public void rollback() {
+		trans.rollback();
+	}
+
+	@Override
+	public void close() {
+		if (trans.isActive()) {
+			trans.rollback();
+		}
+	}
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityMgrCloserTest.java b/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityMgrCloserTest.java
new file mode 100644
index 0000000..abc8d93
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityMgrCloserTest.java
@@ -0,0 +1,112 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Common Utils
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.jpa;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import javax.persistence.EntityManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.jpa.EntityMgrCloser;
+
+public class EntityMgrCloserTest {
+	
+	private EntityManager mgr;
+	
+
+	@Before
+	public void setUp() throws Exception {
+		mgr = mock(EntityManager.class);
+	}
+
+
+	/**
+	 * Verifies that the constructor does not do anything extra before
+	 * being closed.
+	 */
+	@Test
+	public void testEntityMgrCloser() {
+		EntityMgrCloser c = new EntityMgrCloser(mgr);
+		
+		assertEquals(mgr, c.getManager());
+
+		// verify not closed yet
+		verify(mgr, never()).close();
+		
+		c.close();
+
+		verify(mgr).close();
+	}
+
+	@Test
+	public void testGetManager() {
+		try(EntityMgrCloser c = new EntityMgrCloser(mgr)) {
+			assertEquals(mgr, c.getManager());
+		}
+	}
+	
+	/**
+	 * Verifies that the manager gets closed when close() is invoked.
+	 */
+	@Test
+	public void testClose() {
+		EntityMgrCloser c = new EntityMgrCloser(mgr);
+		
+		c.close();
+		
+		// should be closed
+		verify(mgr).close();
+	}
+
+	/**
+	 * Ensures that the manager gets closed when "try" block exits normally.
+	 */
+	@Test
+	public void testClose_TryWithoutExcept() {
+		try(EntityMgrCloser c = new EntityMgrCloser(mgr)) {
+			
+		}
+		
+		verify(mgr).close();
+	}
+
+	/**
+	 * Ensures that the manager gets closed when "try" block throws an
+	 * exception.
+	 */
+	@Test
+	public void testClose_TryWithExcept() {
+		try {
+			try(EntityMgrCloser c = new EntityMgrCloser(mgr)) {
+				throw new Exception("expected exception");
+			}
+			
+		} catch (Exception e) {
+		}
+		
+		verify(mgr).close();
+	}
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityMgrFactoryCloserTest.java b/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityMgrFactoryCloserTest.java
new file mode 100644
index 0000000..60ed27d
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityMgrFactoryCloserTest.java
@@ -0,0 +1,112 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Common Utils
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.jpa;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import javax.persistence.EntityManagerFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.jpa.EntityMgrFactoryCloser;
+
+public class EntityMgrFactoryCloserTest {
+	
+	private EntityManagerFactory factory;
+	
+
+	@Before
+	public void setUp() throws Exception {
+		factory = mock(EntityManagerFactory.class);
+	}
+
+
+	/**
+	 * Verifies that the constructor does not do anything extra before
+	 * being closed.
+	 */
+	@Test
+	public void testEntityMgrFactoryCloser() {
+		EntityMgrFactoryCloser c = new EntityMgrFactoryCloser(factory);
+		
+		assertEquals(factory, c.getFactory());
+
+		// verify not closed yet
+		verify(factory, never()).close();
+		
+		c.close();
+
+		verify(factory).close();
+	}
+
+	@Test
+	public void testgetFactory() {
+		try(EntityMgrFactoryCloser c = new EntityMgrFactoryCloser(factory)) {
+			assertEquals(factory, c.getFactory());
+		}
+	}
+	
+	/**
+	 * Verifies that the manager gets closed when close() is invoked.
+	 */
+	@Test
+	public void testClose() {
+		EntityMgrFactoryCloser c = new EntityMgrFactoryCloser(factory);
+		
+		c.close();
+		
+		// should be closed
+		verify(factory).close();
+	}
+
+	/**
+	 * Ensures that the manager gets closed when "try" block exits normally.
+	 */
+	@Test
+	public void testClose_TryWithoutExcept() {
+		try(EntityMgrFactoryCloser c = new EntityMgrFactoryCloser(factory)) {
+			
+		}
+		
+		verify(factory).close();
+	}
+
+	/**
+	 * Ensures that the manager gets closed when "try" block throws an
+	 * exception.
+	 */
+	@Test
+	public void testClose_TryWithExcept() {
+		try {
+			try(EntityMgrFactoryCloser c = new EntityMgrFactoryCloser(factory)) {
+				throw new Exception("expected exception");
+			}
+			
+		} catch (Exception e) {
+		}
+		
+		verify(factory).close();
+	}
+
+}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityTransCloserTest.java b/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityTransCloserTest.java
new file mode 100644
index 0000000..e7dcf11
--- /dev/null
+++ b/utils/src/test/java/org/onap/policy/common/utils/jpa/EntityTransCloserTest.java
@@ -0,0 +1,231 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Common Utils
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.common.utils.jpa;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import javax.persistence.EntityTransaction;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.jpa.EntityTransCloser;
+
+public class EntityTransCloserTest {
+	
+	private EntityTransaction trans;
+
+	@Before
+	public void setUp() throws Exception {
+		trans = mock(EntityTransaction.class);
+		
+		when(trans.isActive()).thenReturn(true);
+	}
+
+
+
+	/**
+	 * Verifies that the constructor starts a transaction, but does not do
+	 * anything extra before being closed.
+	 */
+	@Test
+	public void testEntityTransCloser() {
+		EntityTransCloser t = new EntityTransCloser(trans);
+		
+		assertEquals(trans, t.getTransation());
+		
+		// verify that transaction was started
+		verify(trans).begin();
+
+		// verify not closed, committed, or rolled back yet
+		verify(trans, never()).commit();
+		verify(trans, never()).rollback();
+		
+		t.close();
+
+		verify(trans).rollback();
+	}
+	
+	@Test
+	public void testGetTransation() {
+		try(EntityTransCloser t = new EntityTransCloser(trans)) {
+			assertEquals(trans, t.getTransation());
+		}
+	}
+
+	/**
+	 * Verifies that the transaction is rolled back and the manager is
+	 * closed when and a transaction is active.
+	 */
+	@Test
+	public void testClose_Active() {
+		EntityTransCloser t = new EntityTransCloser(trans);
+
+		when(trans.isActive()).thenReturn(true);
+		
+		t.close();
+
+		// closed and rolled back, but not committed
+		verify(trans, never()).commit();
+		verify(trans).rollback();
+	}
+
+	/**
+	 * Verifies that the manager is closed, but that the transaction is
+	 * <i>not</i> rolled back and when and no transaction is active.
+	 */
+	@Test
+	public void testClose_Inactive() {
+		EntityTransCloser t = new EntityTransCloser(trans);
+
+		when(trans.isActive()).thenReturn(false);
+		
+		t.close();
+
+		// closed, but not committed or rolled back
+		verify(trans, never()).commit();
+		verify(trans, never()).rollback();
+	}
+
+	/**
+	 * Verifies that the manager is closed and the transaction rolled back
+	 * when "try" block exits normally and a transaction is active.
+	 */
+	@Test
+	public void testClose_TryWithoutExcept_Active() {
+		when(trans.isActive()).thenReturn(true);
+		
+		try(EntityTransCloser t = new EntityTransCloser(trans)) {
+			
+		}
+
+		// closed and rolled back, but not committed
+		verify(trans, never()).commit();
+		verify(trans).rollback();
+	}
+
+	/**
+	 * Verifies that the manager is closed, but that the transaction is
+	 * <i>not</i> rolled back when "try" block exits normally and no
+	 * transaction is active.
+	 */
+	@Test
+	public void testClose_TryWithoutExcept_Inactive() {
+		when(trans.isActive()).thenReturn(false);
+		
+		try(EntityTransCloser t = new EntityTransCloser(trans)) {
+			
+		}
+
+		// closed, but not rolled back or committed
+		verify(trans, never()).commit();
+		verify(trans, never()).rollback();
+	}
+
+	/**
+	 * Verifies that the manager is closed and the transaction rolled back
+	 * when "try" block throws an exception and a transaction is active.
+	 */
+	@Test
+	public void testClose_TryWithExcept_Active() {
+		when(trans.isActive()).thenReturn(true);
+		
+		try {
+			try(EntityTransCloser t = new EntityTransCloser(trans)) {
+				throw new Exception("expected exception");
+			}
+			
+		} catch (Exception e) {
+		}
+
+		// closed and rolled back, but not committed
+		verify(trans, never()).commit();
+		verify(trans).rollback();
+	}
+
+	/**
+	 * Verifies that the manager is closed, but that the transaction is
+	 * <i>not</i> rolled back when "try" block throws an exception and no
+	 * transaction is active.
+	 */
+	@Test
+	public void testClose_TryWithExcept_Inactive() {
+		when(trans.isActive()).thenReturn(false);
+		
+		try {
+			try(EntityTransCloser t = new EntityTransCloser(trans)) {
+				throw new Exception("expected exception");
+			}
+			
+		} catch (Exception e) {
+		}
+
+		// closed, but not rolled back or committed
+		verify(trans, never()).commit();
+		verify(trans, never()).rollback();
+	}
+
+	/**
+	 * Verifies that commit() only commits, and that the subsequent close()
+	 * does not re-commit.
+	 */
+	@Test
+	public void testCommit() {
+		EntityTransCloser t = new EntityTransCloser(trans);
+		
+		t.commit();
+		
+		// committed, but not closed or rolled back
+		verify(trans).commit();
+		verify(trans, never()).rollback();
+		
+		// closed, but not re-committed
+		t.close();
+
+		verify(trans, times(1)).commit();
+	}
+
+	/**
+	 * Verifies that rollback() only rolls back, and that the subsequent
+	 * close() does not re-roll back.
+	 */
+	@Test
+	public void testRollback() {
+		EntityTransCloser t = new EntityTransCloser(trans);
+		
+		t.rollback();
+		
+		// rolled back, but not closed or committed
+		verify(trans, never()).commit();
+		verify(trans).rollback();
+		
+		// closed, but not re-rolled back
+		when(trans.isActive()).thenReturn(false);
+		t.close();
+
+		verify(trans, times(1)).rollback();
+	}
+
+}
