You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/03/07 13:26:29 UTC

olingo-odata2 git commit: [OLINGO-580] Support for JTA based transaction

Repository: olingo-odata2
Updated Branches:
  refs/heads/master 313bbbabe -> 83313c1c6


[OLINGO-580] Support for JTA based transaction

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

Branch: refs/heads/master
Commit: 83313c1c6b986f219390284606bf0be89abb9694
Parents: 313bbba
Author: Chandan V A <ch...@sap.com>
Authored: Sat Mar 7 17:55:55 2015 +0530
Committer: Chandan V A <ch...@sap.com>
Committed: Sat Mar 7 17:55:55 2015 +0530

----------------------------------------------------------------------
 .../jpa/processor/api/ODataJPAContext.java      |   6 +-
 .../processor/api/ODataJPAServiceFactory.java   | 133 +++++++++----------
 .../jpa/processor/core/ODataJPAContextImpl.java |  12 +-
 .../core/ODataJPAProcessorDefault.java          |   6 +-
 .../core/ODataJPATransactionLocalDefault.java   |  55 ++++++++
 .../jpa/processor/core/access/data/JPALink.java |  20 +--
 .../core/access/data/JPAProcessorImpl.java      |  13 +-
 .../core/ODataJPAProcessorDefaultTest.java      |   2 +-
 .../core/access/data/JPAProcessorImplTest.java  |   2 +-
 .../ODataJPATransactionLocalDefault.java        |  54 --------
 .../ref/web/JPAReferenceServiceFactory.java     |   6 -
 11 files changed, 150 insertions(+), 159 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/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 0ec7ca7..373c2d7 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
@@ -229,8 +229,8 @@ public interface ODataJPAContext {
   public JPAPaging getPaging();
 
    /**
-    * The transaction context
-    * @return transaction context
+    * The method returns the ODataJPATransaction.
+    * @return ODataJPATransaction
     */
-   public ODataJPATransaction getODataJpaTransaction();
+   public ODataJPATransaction getODataJPATransaction();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java
index ba1248e..bb982b8 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java
@@ -84,6 +84,34 @@ public abstract class ODataJPAServiceFactory extends ODataServiceFactory {
   private ODataJPATransaction oDataJPATransaction = null;
 
   /**
+   * Implement this method and initialize OData JPA Context. It is mandatory
+   * to set an instance of type {@link javax.persistence.EntityManagerFactory} into the context. An exception of type
+   * {@link org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException} is thrown if
+   * EntityManagerFactory is not initialized. <br>
+   * <br>
+   * <b>Sample Code:</b> <code>
+   * <p>public class JPAReferenceServiceFactory extends ODataJPAServiceFactory{</p>
+   * 
+   * <blockquote>private static final String PUNIT_NAME = "punit";
+   * <br>
+   * public ODataJPAContext initializeODataJPAContext() {
+   * <blockquote>ODataJPAContext oDataJPAContext = this.getODataJPAContext();
+   * <br>
+   * EntityManagerFactory emf = Persistence.createEntityManagerFactory(PUNIT_NAME);
+   * <br>
+   * oDataJPAContext.setEntityManagerFactory(emf);
+   * oDataJPAContext.setPersistenceUnitName(PUNIT_NAME);
+   * <br> return oDataJPAContext;</blockquote>
+   * }</blockquote>
+   * } </code>
+   * <p>
+   * 
+   * @return an instance of type {@link org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext}
+   * @throws ODataJPARuntimeException
+   */
+  public abstract ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException;
+
+  /**
    * Creates an OData Service based on the values set in
    * {@link org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext} and
    * {@link org.apache.olingo.odata2.api.processor.ODataContext}.
@@ -114,42 +142,6 @@ public abstract class ODataJPAServiceFactory extends ODataServiceFactory {
     return createODataSingleProcessorService(edmProvider, odataJPAProcessor);
   }
 
-  private void validatePreConditions() throws ODataJPARuntimeException {
-
-    if (oDataJPAContext.getEntityManagerFactory() == null) {
-      throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.ENTITY_MANAGER_NOT_INITIALIZED, null);
-    }
-
-  }
-
-  /**
-   * Implement this method and initialize OData JPA Context. It is mandatory
-   * to set an instance of type {@link javax.persistence.EntityManagerFactory} into the context. An exception of type
-   * {@link org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException} is thrown if
-   * EntityManagerFactory is not initialized. <br>
-   * <br>
-   * <b>Sample Code:</b> <code>
-   * <p>public class JPAReferenceServiceFactory extends ODataJPAServiceFactory{</p>
-   * 
-   * <blockquote>private static final String PUNIT_NAME = "punit";
-   * <br>
-   * public ODataJPAContext initializeODataJPAContext() {
-   * <blockquote>ODataJPAContext oDataJPAContext = this.getODataJPAContext();
-   * <br>
-   * EntityManagerFactory emf = Persistence.createEntityManagerFactory(PUNIT_NAME);
-   * <br>
-   * oDataJPAContext.setEntityManagerFactory(emf);
-   * oDataJPAContext.setPersistenceUnitName(PUNIT_NAME);
-   * <br> return oDataJPAContext;</blockquote>
-   * }</blockquote>
-   * } </code>
-   * <p>
-   * 
-   * @return an instance of type {@link org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext}
-   * @throws ODataJPARuntimeException
-   */
-  public abstract ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException;
-
   /**
    * @return an instance of type {@link ODataJPAContext}
    * @throws ODataJPARuntimeException
@@ -165,29 +157,6 @@ public abstract class ODataJPAServiceFactory extends ODataServiceFactory {
 
   }
 
-  /**
-   * The method sets the context whether a detail error message should be thrown
-   * or a less detail error message should be thrown by the library.
-   * @param setDetailErrors takes
-   * <ul><li>true - to indicate that library should throw a detailed error message</li>
-   * <li>false - to indicate that library should not throw a detailed error message</li>
-   * </ul>
-   * 
-   */
-  protected void setDetailErrors(final boolean setDetailErrors) {
-    this.setDetailErrors = setDetailErrors;
-  }
-
-  /**
-   * The methods sets the context with a callback implementation for JPA provider specific content.
-   * For details refer to {@link org.apache.olingo.odata2.jpa.processor.api.OnJPAWriteContent}
-   * @param onJPAWriteContent is an instance of type
-   * {@link org.apache.olingo.odata2.jpa.processor.api.OnJPAWriteContent}
-   */
-  protected void setOnWriteJPAContent(final OnJPAWriteContent onJPAWriteContent) {
-    this.onJPAWriteContent = onJPAWriteContent;
-  }
-
   @SuppressWarnings("unchecked")
   @Override
   public <T extends ODataCallback> T getCallback(final Class<? extends ODataCallback> callbackInterface) {
@@ -196,21 +165,27 @@ public abstract class ODataJPAServiceFactory extends ODataServiceFactory {
         return (T) new ODataJPAErrorCallback();
       }
     }
-
     if (onJPAWriteContent != null) {
       if (callbackInterface.isAssignableFrom(OnJPAWriteContent.class)) {
         return (T) onJPAWriteContent;
       }
     }
-
-      if (oDataJPATransaction != null) {
-          if (callbackInterface.isAssignableFrom(ODataJPATransaction.class)) {
-              return (T) oDataJPATransaction;
-          }
+    if (oDataJPATransaction != null) {
+      if (callbackInterface.isAssignableFrom(ODataJPATransaction.class)) {
+        return (T) oDataJPATransaction;
       }
+    }
+    return null;
+  }
 
-
-      return null;
+  /**
+   * The methods sets the context with a callback implementation for JPA provider specific content.
+   * For details refer to {@link org.apache.olingo.odata2.jpa.processor.api.OnJPAWriteContent}
+   * @param onJPAWriteContent is an instance of type
+   * {@link org.apache.olingo.odata2.jpa.processor.api.OnJPAWriteContent}
+   */
+  protected void setOnWriteJPAContent(final OnJPAWriteContent onJPAWriteContent) {
+    this.onJPAWriteContent = onJPAWriteContent;
   }
 
   /**
@@ -220,15 +195,27 @@ public abstract class ODataJPAServiceFactory extends ODataServiceFactory {
    * {@link org.apache.olingo.odata2.jpa.processor.api.ODataJPATransaction}
    */
   protected void setODataJPATransaction(final ODataJPATransaction oDataJPATransaction) {
-      this.oDataJPATransaction = oDataJPATransaction;
+    this.oDataJPATransaction = oDataJPATransaction;
   }
 
   /**
-   * Simple method to retrieve the current ODataJPATransactionContext optimized for fast access
-   *
-   * @return the current ODataJPATransaction
+   * The method sets the context whether a detail error message should be thrown
+   * or a less detail error message should be thrown by the library.
+   * @param setDetailErrors takes
+   * <ul><li>true - to indicate that library should throw a detailed error message</li>
+   * <li>false - to indicate that library should not throw a detailed error message</li>
+   * </ul>
+   * 
    */
-  public ODataJPATransaction getDataJPATransaction() {
-      return oDataJPATransaction;
+  protected void setDetailErrors(final boolean setDetailErrors) {
+    this.setDetailErrors = setDetailErrors;
+  }
+
+  private void validatePreConditions() throws ODataJPARuntimeException {
+
+    if (oDataJPAContext.getEntityManagerFactory() == null) {
+      throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.ENTITY_MANAGER_NOT_INITIALIZED, null);
+    }
+
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/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 66d0ff0..0da67e1 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
@@ -43,6 +43,7 @@ public class ODataJPAContextImpl implements ODataJPAContext {
   private JPAPaging jpaPaging;
   private static final ThreadLocal<ODataContext> oDataContextThreadLocal = new ThreadLocal<ODataContext>();
   private boolean defaultNaming = true;
+  private ODataJPATransaction transaction = null;
 
   @Override
   public String getPersistenceUnitName() {
@@ -169,7 +170,14 @@ public class ODataJPAContextImpl implements ODataJPAContext {
   }
 
   @Override
-  public ODataJPATransaction getODataJpaTransaction() {
-      return odataContext.getServiceFactory().getCallback(ODataJPATransaction.class);
+  public ODataJPATransaction getODataJPATransaction() {
+    if (transaction == null) {
+      transaction = odataContext.getServiceFactory().getCallback(ODataJPATransaction.class);
+      // Fallback to RESOURCE_LOCAL based transaction
+      if (transaction == null) {
+        transaction = new ODataJPATransactionLocalDefault(getEntityManager());
+      }
+    }
+    return transaction;
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefault.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefault.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefault.java
index 2d4e37e..2bc2635 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefault.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAProcessorDefault.java
@@ -264,21 +264,21 @@ public class ODataJPAProcessorDefault extends ODataJPAProcessor {
       throws ODataException {
     List<ODataResponse> responses = new ArrayList<ODataResponse>();
     try {
-      oDataJPAContext.getODataJpaTransaction().begin();
+      oDataJPAContext.getODataJPATransaction().begin();
 
       for (ODataRequest request : requests) {
         oDataJPAContext.setODataContext(getContext());
         ODataResponse response = handler.handleRequest(request);
         if (response.getStatus().getStatusCode() >= HttpStatusCodes.BAD_REQUEST.getStatusCode()) {
           // Rollback
-          oDataJPAContext.getODataJpaTransaction().rollback();
+          oDataJPAContext.getODataJPATransaction().rollback();
           List<ODataResponse> errorResponses = new ArrayList<ODataResponse>(1);
           errorResponses.add(response);
           return BatchResponsePart.responses(errorResponses).changeSet(false).build();
         }
         responses.add(response);
       }
-      oDataJPAContext.getODataJpaTransaction().commit();
+      oDataJPAContext.getODataJPATransaction().commit();
 
 
       return BatchResponsePart.responses(responses).changeSet(true).build();

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPATransactionLocalDefault.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPATransactionLocalDefault.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPATransactionLocalDefault.java
new file mode 100644
index 0000000..532764c
--- /dev/null
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPATransactionLocalDefault.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ ******************************************************************************/
+package org.apache.olingo.odata2.jpa.processor.core;
+
+import org.apache.olingo.odata2.jpa.processor.api.ODataJPATransaction;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
+public class ODataJPATransactionLocalDefault implements ODataJPATransaction {
+
+  private EntityTransaction tx = null;
+
+  public ODataJPATransactionLocalDefault(EntityManager em) {
+    this.tx = em.getTransaction();
+  }
+
+  @Override
+  public void begin() {
+    if (!isActive()) {
+      tx.begin();
+    }
+  }
+
+  @Override
+  public void commit() {
+    tx.commit();
+  }
+
+  @Override
+  public void rollback() {
+    tx.rollback();
+  }
+
+  @Override
+  public boolean isActive() {
+    return tx.isActive();
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java
index 7e3ae73..72e32df 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java
@@ -149,19 +149,21 @@ public class JPALink {
 
   public void save() {
     EntityManager em = context.getEntityManager();
-    ODataJPATransaction tx = context.getODataJpaTransaction();
+    ODataJPATransaction tx = context.getODataJPATransaction();
+    boolean isLocalTransaction = false;
     if (!tx.isActive()) {
       tx.begin();
-      if (sourceJPAEntity != null) {
-        em.persist(sourceJPAEntity);
-      }
-      if (targetJPAEntity != null) {
-        em.persist(targetJPAEntity);
-        em.flush();
-      }
+      isLocalTransaction = true;
+    }
+    if (sourceJPAEntity != null) {
+      em.persist(sourceJPAEntity);
+    }
+    if (targetJPAEntity != null) {
+      em.persist(targetJPAEntity);
+    }
+    if (isLocalTransaction && (em.contains(sourceJPAEntity) || em.contains(targetJPAEntity))) {
       tx.commit();
     }
-
   }
 
   public void create(final EdmEntitySet entitySet, final ODataEntry oDataEntry,

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
index ef4d9dc..477edff 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
@@ -355,7 +355,7 @@ public class JPAProcessorImpl implements JPAProcessor {
         em.remove(selectedObject);
         em.flush();
         if (isLocalTransaction) {
-          oDataJPAContext.getODataJpaTransaction().commit();
+          oDataJPAContext.getODataJPATransaction().commit();
         }
 
       } catch (Exception e) {
@@ -456,7 +456,7 @@ public class JPAProcessorImpl implements JPAProcessor {
       em.persist(jpaEntity);
       if (em.contains(jpaEntity)) {
         if (isLocalTransaction) {
-          oDataJPAContext.getODataJpaTransaction().commit();
+          oDataJPAContext.getODataJPATransaction().commit();
         }
         return jpaEntity;
       }
@@ -507,7 +507,7 @@ public class JPAProcessorImpl implements JPAProcessor {
       }
       em.flush();
       if (isLocalTransaction) {
-        oDataJPAContext.getODataJpaTransaction().commit();
+        oDataJPAContext.getODataJPATransaction().commit();
       }
     } catch (Exception e) {
       throw ODataJPARuntimeException.throwException(
@@ -572,12 +572,11 @@ public class JPAProcessorImpl implements JPAProcessor {
   }
 
   private boolean setTransaction() {
-    ODataJPATransaction transactionContext = oDataJPAContext.getODataJpaTransaction();
-    if (!transactionContext.isActive()) {
-      transactionContext.begin();
+    ODataJPATransaction transaction = oDataJPAContext.getODataJPATransaction();
+    if (!transaction.isActive()) {
+      transaction.begin();
       return true;
     }
-
     return false;
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/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 195559e..ba43d37 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
@@ -321,7 +321,7 @@ public class ODataJPAProcessorDefaultTest extends JPAEdmTestModelView {
     ODataJPAContext odataJPAContext = EasyMock.createMock(ODataJPAContext.class);
     EasyMock.expect(odataJPAContext.getPersistenceUnitName()).andStubReturn("salesorderprocessing");
     EasyMock.expect(odataJPAContext.getEntityManagerFactory()).andStubReturn(mockEntityManagerFactory());
-    EasyMock.expect(odataJPAContext.getODataJpaTransaction()).andStubReturn(getLocalJpaTransaction());
+    EasyMock.expect(odataJPAContext.getODataJPATransaction()).andStubReturn(getLocalJpaTransaction());
     EasyMock.expect(odataJPAContext.getODataContext()).andStubReturn(getLocalODataContext());
     odataJPAContext.setODataContext((ODataContext) EasyMock.anyObject());
     EasyMock.expectLastCall().anyTimes();

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImplTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImplTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImplTest.java
index 05afa5f..01e726d 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImplTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImplTest.java
@@ -286,7 +286,7 @@ public class JPAProcessorImplTest {
     ODataJPAContext odataJPAContext = EasyMock.createMock(ODataJPAContext.class);
     EasyMock.expect(odataJPAContext.getPersistenceUnitName()).andStubReturn("salesorderprocessing");
     EasyMock.expect(odataJPAContext.getEntityManagerFactory()).andStubReturn(mockEntityManagerFactory());
-    EasyMock.expect(odataJPAContext.getODataJpaTransaction()).andStubReturn(getLocalJpaTransaction());
+    EasyMock.expect(odataJPAContext.getODataJPATransaction()).andStubReturn(getLocalJpaTransaction());
     EasyMock.expect(odataJPAContext.getODataContext()).andStubReturn(getLocalODataContext());
     EasyMock.expect(odataJPAContext.getEntityManager()).andStubReturn(getLocalEntityManager());
     EasyMock.expect(odataJPAContext.getPageSize()).andReturn(10).anyTimes();

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/extension/ODataJPATransactionLocalDefault.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/extension/ODataJPATransactionLocalDefault.java b/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/extension/ODataJPATransactionLocalDefault.java
deleted file mode 100644
index 9291962..0000000
--- a/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/extension/ODataJPATransactionLocalDefault.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- ******************************************************************************/
-package org.apache.olingo.odata2.jpa.processor.ref.extension;
-
-
-import org.apache.olingo.odata2.jpa.processor.api.ODataJPATransaction;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-
-public class ODataJPATransactionLocalDefault implements ODataJPATransaction {
-
-  private EntityTransaction tx = null;
-
-  public ODataJPATransactionLocalDefault(EntityManager em) {
-      this.tx = em.getTransaction();
-  }
-
-  @Override
-  public void begin() {
-      tx.begin();
-  }
-
-  @Override
-  public void commit() {
-      tx.commit();
-  }
-
-  @Override
-  public void rollback() {
-      tx.rollback();
-  }
-
-  @Override
-  public boolean isActive() {
-      return tx.isActive();
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/83313c1c/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java b/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java
index 9452535..c264f70 100644
--- a/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java
+++ b/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java
@@ -24,8 +24,6 @@ import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext;
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPAServiceFactory;
 import org.apache.olingo.odata2.jpa.processor.api.OnJPAWriteContent;
 import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;
-import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmExtension;
-import org.apache.olingo.odata2.jpa.processor.ref.extension.ODataJPATransactionLocalDefault;
 import org.apache.olingo.odata2.jpa.processor.ref.extension.OnDBWriteContent;
 import org.apache.olingo.odata2.jpa.processor.ref.extension.SalesOrderProcessingExtension;
 import org.apache.olingo.odata2.jpa.processor.ref.factory.JPAEntityManagerFactory;
@@ -50,10 +48,6 @@ public class JPAReferenceServiceFactory extends ODataJPAServiceFactory {
     oDataJPAContext.setDefaultNaming(false);
     setErrorLevel();
     setOnWriteJPAContent(onDBWriteContent);
-    if(getDataJPATransaction() == null) {
-        setODataJPATransaction(new ODataJPATransactionLocalDefault(getODataJPAContext().getEntityManager()));
-    }
-
     return oDataJPAContext;
   }