You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2016/02/13 06:35:05 UTC

olingo-odata2 git commit: [OLINGO-882] Added option to set CMP to prevent EM close.

Repository: olingo-odata2
Updated Branches:
  refs/heads/OLINGO-882_EnableContainerManagedPersistence [created] 185e97f28


[OLINGO-882] Added option to set CMP to prevent EM close.


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/185e97f2
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/185e97f2
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/185e97f2

Branch: refs/heads/OLINGO-882_EnableContainerManagedPersistence
Commit: 185e97f2854a52fd0f1e7cb6ddb12d21c7aa65a6
Parents: f582a80
Author: mibo <mi...@mirb.de>
Authored: Sat Feb 13 06:34:40 2016 +0100
Committer: mibo <mi...@mirb.de>
Committed: Sat Feb 13 06:34:40 2016 +0100

----------------------------------------------------------------------
 .../odata2/jpa/processor/api/ODataJPAContext.java  | 16 ++++++++++++++++
 .../jpa/processor/api/ODataJPAProcessor.java       | 17 +++++++++++------
 .../jpa/processor/core/ODataJPAContextImpl.java    | 11 +++++++++++
 .../core/ODataJPAProcessorDefaultTest.java         |  2 ++
 4 files changed, 40 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/185e97f2/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java
----------------------------------------------------------------------
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 @@ public interface ODataJPAContext {
    * @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();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/185e97f2/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java
----------------------------------------------------------------------
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 @@ public abstract class ODataJPAProcessor extends ODataSingleProcessor {
   }
 
   /**
-   * 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();
+        }
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/185e97f2/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java
----------------------------------------------------------------------
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 @@ public class ODataJPAContextImpl implements ODataJPAContext {
   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 @@ public class ODataJPAContextImpl implements ODataJPAContext {
   }
 
   @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;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/185e97f2/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefaultTest.java
----------------------------------------------------------------------
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 @@ public class ODataJPAProcessorDefaultTest extends JPAEdmTestModelView {
     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;
   }