[OLINGO-882] Merge branch 'master' into OLINGO-882_EnableContainerManagedPersistence
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java
index 220c08f..7cb54d9 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java
@@ -239,4 +239,20 @@
* @return ODataJPATransaction
*/
public ODataJPATransaction getODataJPATransaction();
+
+ /**
+ * Set the state whether the underlying entity manager is container managed (or not).
+ * (Default is <code>false</code>)
+ *
+ * @param containerManaged <code>true</code> for container managed entity manager
+ */
+ void setContainerManaged(boolean containerManaged);
+
+ /**
+ * The method returns <code>true</code> if the underlying entity manager is container managed.
+ * (Default is <code>false</code>)
+ *
+ * @return <code>true</code> if the underlying entity manger is container manged.
+ */
+ boolean isContainerManaged();
}
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java
index dc29caa..0c355f5 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java
@@ -77,15 +77,20 @@
}
/**
- * The method closes ThreadContext. It is mandatory to call this method to
- * avoid memory leaks.
+ * The method closes ThreadContext.
+ * It is mandatory to call this method to avoid memory leaks.
+ * <p/>
+ * <b>ATTENTION:</b> If <code>isContainerManaged</code> is set to <code>true</code> at
+ * the ODataJPAContext only the cleanup is run but the EntityManager is not closed.
*/
public void close(boolean forceClose) {
ODataJPATombstoneContext.cleanup();
- EntityManager em = oDataJPAContext.getEntityManager();
- if (!oDataJPAContext.getODataContext().isInBatchMode() || forceClose) {
- if (em.isOpen()) {
- em.close();
+ if(!oDataJPAContext.isContainerManaged()) {
+ EntityManager em = oDataJPAContext.getEntityManager();
+ if (!oDataJPAContext.getODataContext().isInBatchMode() || forceClose) {
+ if (em.isOpen()) {
+ em.close();
+ }
}
}
}
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java
index 5fd9ab3..75e5174 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java
@@ -44,6 +44,7 @@
private static final ThreadLocal<ODataContext> oDataContextThreadLocal = new ThreadLocal<ODataContext>();
private boolean defaultNaming = true;
private ODataJPATransaction transaction = null;
+ private boolean containerManaged = false;
@Override
public String getPersistenceUnitName() {
@@ -181,6 +182,16 @@
}
@Override
+ public boolean isContainerManaged() {
+ return this.containerManaged;
+ }
+
+ @Override
+ public void setContainerManaged(boolean containerManaged) {
+ this.containerManaged = containerManaged;
+ }
+
+ @Override
public void setEntityManager(EntityManager em) {
this.em = em;
}
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefaultTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefaultTest.java
index 9e4ced5..14cb5d3 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefaultTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefaultTest.java
@@ -333,6 +333,8 @@
odataJPAContext.setODataContext((ODataContext) EasyMock.anyObject());
EasyMock.expectLastCall().anyTimes();
EasyMock.expect(odataJPAContext.getEntityManager()).andStubReturn(getLocalEntityManager());
+ EasyMock.expect(odataJPAContext.isContainerManaged()).andReturn(false);
+ EasyMock.expectLastCall().anyTimes();
EasyMock.replay(odataJPAContext);
return odataJPAContext;
}