Repository: olingo-odata2 Updated Branches: refs/heads/master 768bc4c65 -> a838b6960
[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/master Commit: 185e97f2854a52fd0f1e7cb6ddb12d21c7aa65a6 Parents: f582a80 Author: mibo <[email protected]> Authored: Sat Feb 13 06:34:40 2016 +0100 Committer: mibo <[email protected]> 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; }
