DELTASPIKE-607 EntityManagerDelegate interface for EM method access.

Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/b0233a20
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/b0233a20
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/b0233a20

Branch: refs/heads/master
Commit: b0233a20c2d220ff8734e765f5aa2f6dd46fd2cf
Parents: 900d570
Author: Thomas Hug <[email protected]>
Authored: Mon May 26 04:42:42 2014 -0700
Committer: Thomas Hug <[email protected]>
Committed: Mon May 26 07:41:58 2014 -0700

----------------------------------------------------------------------
 .../data/api/EntityManagerDelegate.java         | 179 +++++++++++++++
 .../handler/EntityManagerDelegateHandler.java   | 216 +++++++++++++++++++
 .../EntityManagerDelegateHandlerTest.java       |  63 ++++++
 .../handler/EntityRepositoryHandlerTest.java    |  64 +++---
 .../data/test/TransactionalTestCase.java        |   9 +
 .../service/ExtendedRepositoryInterface.java    |   3 +-
 .../deltaspike/data/test/util/TestData.java     |  48 +++++
 .../data/test/util/TestDeployments.java         |   5 +-
 8 files changed, 545 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b0233a20/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityManagerDelegate.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityManagerDelegate.java
 
b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityManagerDelegate.java
new file mode 100644
index 0000000..e98a322
--- /dev/null
+++ 
b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityManagerDelegate.java
@@ -0,0 +1,179 @@
+/*
+ * 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.deltaspike.data.api;
+
+import java.util.Map;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.FlushModeType;
+import javax.persistence.LockModeType;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.metamodel.Metamodel;
+
+
+/**
+ * Expose {@link javax.persistence.EntityManager} methods not present on 
repository base interfaces.
+ * Calls the corresponding method on the repository EntityManager.
+ *
+ * @param <E> The Entity type.
+ */
+public interface EntityManagerDelegate<E>
+{
+    /**
+     * See {@link javax.persistence.EntityManager#persist(Object)}.
+     */
+    void persist(E entity);
+
+    /**
+     * See {@link javax.persistence.EntityManager#merge(Object)}.
+     */
+    E merge(E entity);
+
+    /**
+     * See {@link javax.persistence.EntityManager#find(Class, Object, 
java.util.Map)}.
+     */
+    E find(Object primaryKey, Map<String, Object> properties);
+
+    /**
+     * See {@link javax.persistence.EntityManager#find(Class, Object, 
LockModeType)}.
+     */
+    E find(Object primaryKey, LockModeType lockMode);
+
+    /**
+     * See {@link javax.persistence.EntityManager#find(Class, Object, 
LockModeType, Map)}.
+     */
+    E find(Object primaryKey, LockModeType lockMode, Map<String, Object> 
properties);
+
+    /**
+     * See {@link javax.persistence.EntityManager#getReference(Class, Object)}.
+     */
+    E getReference(Object primaryKey);
+
+    /**
+     * See {@link javax.persistence.EntityManager#setFlushMode(FlushModeType)}.
+     */
+    void setFlushMode(FlushModeType flushMode);
+
+    /**
+     * See {@link javax.persistence.EntityManager#getFlushMode()}.
+     */
+    FlushModeType getFlushMode();
+
+    /**
+     * See {@link javax.persistence.EntityManager#lock(Object, LockModeType)}.
+     */
+    void lock(Object entity, LockModeType lockMode);
+
+    /**
+     * See {@link javax.persistence.EntityManager#lock(Object, LockModeType, 
Map)}.
+     */
+    void lock(Object entity, LockModeType lockMode, Map<String, Object> 
properties);
+
+    /**
+     * See {@link javax.persistence.EntityManager#refresh(Object, Map)}.
+     */
+    void refresh(E entity, Map<String, Object> properties);
+
+    /**
+     * See {@link javax.persistence.EntityManager#refresh(Object, 
LockModeType)}.
+     */
+    void refresh(E entity, LockModeType lockMode);
+
+    /**
+     * See {@link javax.persistence.EntityManager#refresh(Object, 
LockModeType, Map)}.
+     */
+    void refresh(E entity, LockModeType lockMode, Map<String, Object> 
properties);
+
+    /**
+     * See {@link javax.persistence.EntityManager#clear()}.
+     */
+    void clear();
+
+    /**
+     * See {@link javax.persistence.EntityManager#detach(Object)}.
+     */
+    void detach(E entity);
+
+    /**
+     * See {@link javax.persistence.EntityManager#contains(Object)}.
+     */
+    boolean contains(E entity);
+
+    /**
+     * See {@link javax.persistence.EntityManager#getLockMode(Object)}.
+     */
+    LockModeType getLockMode(E entity);
+
+    /**
+     * See {@link javax.persistence.EntityManager#setProperty(String, Object)}.
+     */
+    void setProperty(String propertyName, Object value);
+
+    /**
+     * See {@link javax.persistence.EntityManager#getProperties()}.
+     */
+    Map<String, Object> getProperties();
+
+    /**
+     * See {@link javax.persistence.EntityManager#joinTransaction()}.
+     */
+    void joinTransaction();
+
+    /**
+     * See {@link javax.persistence.EntityManager#unwrap(Class)}.
+     */
+    <T> T unwrap(Class<T> cls);
+
+    /**
+     * See {@link javax.persistence.EntityManager#getDelegate()}.
+     */
+    Object getDelegate();
+
+    /**
+     * See {@link javax.persistence.EntityManager#close()}.
+     */
+    void close();
+
+    /**
+     * See {@link javax.persistence.EntityManager#isOpen()}.
+     */
+    boolean isOpen();
+
+    /**
+     * See {@link javax.persistence.EntityManager#getTransaction()}.
+     */
+    EntityTransaction getTransaction();
+
+    /**
+     * See {@link javax.persistence.EntityManager#getEntityManagerFactory()}.
+     */
+    EntityManagerFactory getEntityManagerFactory();
+
+    /**
+     * See {@link javax.persistence.EntityManager#getCriteriaBuilder()}.
+     */
+    CriteriaBuilder getCriteriaBuilder();
+
+    /**
+     * See {@link javax.persistence.EntityManager#getMetamodel()}.
+     */
+    Metamodel getMetamodel();
+
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b0233a20/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityManagerDelegateHandler.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityManagerDelegateHandler.java
 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityManagerDelegateHandler.java
new file mode 100644
index 0000000..902645b
--- /dev/null
+++ 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityManagerDelegateHandler.java
@@ -0,0 +1,216 @@
+/*
+ * 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.deltaspike.data.impl.handler;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.FlushModeType;
+import javax.persistence.LockModeType;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.metamodel.Metamodel;
+
+import org.apache.deltaspike.data.api.EntityManagerDelegate;
+import org.apache.deltaspike.data.spi.DelegateQueryHandler;
+import org.apache.deltaspike.data.spi.QueryInvocationContext;
+
+@SuppressWarnings("unchecked")
+public class EntityManagerDelegateHandler<E> implements 
EntityManagerDelegate<E>, DelegateQueryHandler
+{
+
+    @Inject
+    private QueryInvocationContext context;
+
+    @Override
+    public void persist(E entity)
+    {
+        entityManager().persist(entity);
+    }
+
+    @Override
+    public E merge(E entity)
+    {
+        return entityManager().merge(entity);
+    }
+
+    @Override
+    public E find(Object primaryKey, Map<String, Object> properties)
+    {
+        return (E) entityManager().find(context.getEntityClass(), primaryKey, 
properties);
+    }
+
+    @Override
+    public E find(Object primaryKey, LockModeType lockMode)
+    {
+        return (E) entityManager().find(context.getEntityClass(), primaryKey, 
lockMode);
+    }
+
+    @Override
+    public E find(Object primaryKey, LockModeType lockMode, Map<String, 
Object> properties)
+    {
+        return (E) entityManager().find(context.getEntityClass(), primaryKey, 
lockMode, properties);
+    }
+
+    @Override
+    public E getReference(Object primaryKey)
+    {
+        return (E) entityManager().getReference(context.getEntityClass(), 
primaryKey);
+    }
+
+    @Override
+    public void setFlushMode(FlushModeType flushMode)
+    {
+        entityManager().setFlushMode(flushMode);
+    }
+
+    @Override
+    public FlushModeType getFlushMode()
+    {
+        return entityManager().getFlushMode();
+    }
+
+    @Override
+    public void lock(Object entity, LockModeType lockMode)
+    {
+        entityManager().lock(entity, lockMode);
+    }
+
+    @Override
+    public void lock(Object entity, LockModeType lockMode, Map<String, Object> 
properties)
+    {
+        entityManager().lock(entity, lockMode, properties);
+    }
+
+    @Override
+    public void refresh(E entity, Map<String, Object> properties)
+    {
+        entityManager().refresh(entity, properties);
+    }
+
+    @Override
+    public void refresh(E entity, LockModeType lockMode)
+    {
+        entityManager().refresh(entity, lockMode);
+    }
+
+    @Override
+    public void refresh(E entity, LockModeType lockMode, Map<String, Object> 
properties)
+    {
+        entityManager().refresh(entity, lockMode, properties);
+    }
+
+    @Override
+    public void clear()
+    {
+        entityManager().clear();
+    }
+
+    @Override
+    public void detach(E entity)
+    {
+        entityManager().detach(entity);
+    }
+
+    @Override
+    public boolean contains(E entity)
+    {
+        return entityManager().contains(entity);
+    }
+
+    @Override
+    public LockModeType getLockMode(E entity)
+    {
+        return entityManager().getLockMode(entity);
+    }
+
+    @Override
+    public void setProperty(String propertyName, Object value)
+    {
+        entityManager().setProperty(propertyName, value);
+    }
+
+    @Override
+    public Map<String, Object> getProperties()
+    {
+        return entityManager().getProperties();
+    }
+
+    @Override
+    public void joinTransaction()
+    {
+        entityManager().joinTransaction();
+    }
+
+    @Override
+    public <T> T unwrap(Class<T> cls)
+    {
+        return entityManager().unwrap(cls);
+    }
+
+    @Override
+    public Object getDelegate()
+    {
+        return entityManager().getDelegate();
+    }
+
+    @Override
+    public void close()
+    {
+        entityManager().close();
+    }
+
+    @Override
+    public boolean isOpen()
+    {
+        return entityManager().isOpen();
+    }
+
+    @Override
+    public EntityTransaction getTransaction()
+    {
+        return entityManager().getTransaction();
+    }
+
+    @Override
+    public EntityManagerFactory getEntityManagerFactory()
+    {
+        return entityManager().getEntityManagerFactory();
+    }
+
+    @Override
+    public CriteriaBuilder getCriteriaBuilder()
+    {
+        return entityManager().getCriteriaBuilder();
+    }
+
+    @Override
+    public Metamodel getMetamodel()
+    {
+        return entityManager().getMetamodel();
+    }
+
+    private EntityManager entityManager()
+    {
+        return context.getEntityManager();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b0233a20/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityManagerDelegateHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityManagerDelegateHandlerTest.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityManagerDelegateHandlerTest.java
new file mode 100644
index 0000000..cc91b8e
--- /dev/null
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityManagerDelegateHandlerTest.java
@@ -0,0 +1,63 @@
+package org.apache.deltaspike.data.impl.handler;
+
+import static 
org.apache.deltaspike.data.test.util.TestDeployments.finalizeDeployment;
+import static 
org.apache.deltaspike.data.test.util.TestDeployments.initDeployment;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.deltaspike.data.test.TransactionalTestCase;
+import org.apache.deltaspike.data.test.domain.Simple;
+import org.apache.deltaspike.data.test.service.ExtendedRepositoryInterface;
+import org.apache.deltaspike.test.category.WebProfileCategory;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.shrinkwrap.api.Archive;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(WebProfileCategory.class)
+public class EntityManagerDelegateHandlerTest extends TransactionalTestCase
+{
+    @Deployment
+    public static Archive<?> deployment()
+    {
+        return finalizeDeployment(EntityRepositoryHandlerTest.class,
+                initDeployment()
+                    .addClasses(ExtendedRepositoryInterface.class)
+                    .addPackage(Simple.class.getPackage()));
+    }
+
+    @Inject
+    private ExtendedRepositoryInterface repository;
+
+    @Produces
+    @PersistenceContext
+    private EntityManager entityManager;
+
+    @Test
+    public void should_delete_detached_entity() {
+        // given
+        Simple simple = testData.createSimple("should_merge_entity");
+        Long id = simple.getId();
+
+        // when
+        repository.detach(simple);
+        repository.remove(repository.merge(simple));
+
+        // then
+        assertNotNull(id);
+        Simple search = repository.findBy(id);
+        assertNull(search);
+    }
+
+    @Override
+    protected EntityManager getEntityManager()
+    {
+        return entityManager;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b0233a20/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
index 5f5d2a2..e0944b8 100644
--- 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
@@ -80,7 +80,7 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_merge() throws Exception
     {
         // given
-        Simple simple = createSimple("testMerge");
+        Simple simple = testData.createSimple("testMerge");
         Long id = simple.getId();
 
         // when
@@ -115,7 +115,7 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     {
         // given
         final String name = "testRefresh";
-        Simple simple = createSimple(name);
+        Simple simple = testData.createSimple(name);
 
         // when
         simple.setName("override");
@@ -129,7 +129,7 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_by_pk() throws Exception
     {
         // given
-        Simple simple = createSimple("testFindByPk");
+        Simple simple = testData.createSimple("testFindByPk");
 
         // when
         Simple find = repo.findBy(simple.getId());
@@ -143,7 +143,7 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_by_example() throws Exception
     {
         // given
-        Simple simple = createSimple("testFindByExample");
+        Simple simple = testData.createSimple("testFindByExample");
 
         // when
         List<Simple> find = repo.findBy(simple, Simple_.name);
@@ -159,8 +159,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_by_example_with_start_and_max() throws Exception
     {
         // given
-        Simple simple = createSimple("testFindByExample1", 
Integer.valueOf(10));
-        createSimple("testFindByExample1", Integer.valueOf(10));
+        Simple simple = testData.createSimple("testFindByExample1", 
Integer.valueOf(10));
+        testData.createSimple("testFindByExample1", Integer.valueOf(10));
 
         // when
         List<Simple> find = repo.findBy(simple, 0, 1, Simple_.name, 
Simple_.counter);
@@ -177,7 +177,7 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_by_example_with_no_attributes() throws Exception
     {
         // given
-        Simple simple = createSimple("testFindByExample");
+        Simple simple = testData.createSimple("testFindByExample");
         SingularAttribute<Simple, ?>[] attributes = new SingularAttribute[] {};
 
         // when
@@ -193,8 +193,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_all()
     {
         // given
-        createSimple("testFindAll1");
-        createSimple("testFindAll2");
+        testData.createSimple("testFindAll1");
+        testData.createSimple("testFindAll2");
 
         // when
         List<Simple> find = repo.findAll();
@@ -207,8 +207,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_by_all_with_start_and_max()
     {
         // given
-        createSimple("testFindAll1");
-        createSimple("testFindAll2");
+        testData.createSimple("testFindAll1");
+        testData.createSimple("testFindAll2");
 
         // when
         List<Simple> find = repo.findAll(0, 1);
@@ -222,8 +222,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_by_like()
     {
         // given
-        createSimple("testFindAll1");
-        createSimple("testFindAll2");
+        testData.createSimple("testFindAll1");
+        testData.createSimple("testFindAll2");
         Simple example = new Simple("test");
 
         // when
@@ -238,8 +238,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_by_like_with_start_and_max()
     {
         // given
-        createSimple("testFindAll1");
-        createSimple("testFindAll2");
+        testData.createSimple("testFindAll1");
+        testData.createSimple("testFindAll2");
         Simple example = new Simple("test");
 
         // when
@@ -254,8 +254,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_find_by_like_non_string()
     {
         // given
-        createSimple("testFindAll1", 1);
-        createSimple("testFindAll2", 2);
+        testData.createSimple("testFindAll1", 1);
+        testData.createSimple("testFindAll2", 2);
         Simple example = new Simple("test");
         example.setCounter(1);
 
@@ -270,7 +270,7 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_count_all()
     {
         // given
-        createSimple("testCountAll");
+        testData.createSimple("testCountAll");
 
         // when
         Long result = repo.count();
@@ -284,8 +284,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_count_with_attributes()
     {
         // given
-        Simple simple = createSimple("testFindAll1", Integer.valueOf(55));
-        createSimple("testFindAll2", Integer.valueOf(55));
+        Simple simple = testData.createSimple("testFindAll1", 
Integer.valueOf(55));
+        testData.createSimple("testFindAll2", Integer.valueOf(55));
 
         // when
         Long result = repo.count(simple, Simple_.name, Simple_.counter);
@@ -299,8 +299,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_count_with_no_attributes()
     {
         // given
-        Simple simple = createSimple("testFindAll1");
-        createSimple("testFindAll2");
+        Simple simple = testData.createSimple("testFindAll1");
+        testData.createSimple("testFindAll2");
         SingularAttribute<Simple, Object>[] attributes = new 
SingularAttribute[] {};
 
         // when
@@ -315,8 +315,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_count_by_like()
     {
         // given
-        createSimple("testFindAll1");
-        createSimple("testFindAll2");
+        testData.createSimple("testFindAll1");
+        testData.createSimple("testFindAll2");
         Simple example = new Simple("test");
 
         // when
@@ -330,7 +330,7 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     public void should_remove()
     {
         // given
-        Simple simple = createSimple("testRemove");
+        Simple simple = testData.createSimple("testRemove");
 
         // when
         repo.remove(simple);
@@ -347,18 +347,4 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
         return entityManager;
     }
 
-    private Simple createSimple(String name)
-    {
-        return createSimple(name, null);
-    }
-
-    private Simple createSimple(String name, Integer counter)
-    {
-        Simple result = new Simple(name);
-        result.setCounter(counter);
-        entityManager.persist(result);
-        entityManager.flush();
-        return result;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b0233a20/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/TransactionalTestCase.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/TransactionalTestCase.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/TransactionalTestCase.java
index 0d90398..184a9e9 100644
--- 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/TransactionalTestCase.java
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/TransactionalTestCase.java
@@ -22,6 +22,7 @@ import javax.annotation.Resource;
 import javax.persistence.EntityManager;
 import javax.transaction.UserTransaction;
 
+import org.apache.deltaspike.data.test.util.TestData;
 import org.jboss.arquillian.junit.Arquillian;
 import org.junit.After;
 import org.junit.Before;
@@ -33,6 +34,8 @@ public abstract class TransactionalTestCase
 
     @Resource
     protected UserTransaction ut;
+    
+    protected TestData testData;
 
     @Before
     public void startTransaction() throws Exception
@@ -41,6 +44,12 @@ public abstract class TransactionalTestCase
         // Required by OpenJPA
         getEntityManager().getMetamodel();
     }
+    
+    @Before
+    public void initTestData()
+    {
+        testData = new TestData(getEntityManager());
+    }
 
     @After
     public void rollbackTransaction() throws Exception

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b0233a20/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/ExtendedRepositoryInterface.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/ExtendedRepositoryInterface.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/ExtendedRepositoryInterface.java
index 1445d33..7aa7de9 100755
--- 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/ExtendedRepositoryInterface.java
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/ExtendedRepositoryInterface.java
@@ -20,6 +20,7 @@ package org.apache.deltaspike.data.test.service;
 
 import static javax.persistence.LockModeType.PESSIMISTIC_READ;
 
+import org.apache.deltaspike.data.api.EntityManagerDelegate;
 import org.apache.deltaspike.data.api.EntityRepository;
 import org.apache.deltaspike.data.api.Modifying;
 import org.apache.deltaspike.data.api.Query;
@@ -27,7 +28,7 @@ import org.apache.deltaspike.data.api.Repository;
 import org.apache.deltaspike.data.test.domain.Simple;
 
 @Repository
-public interface ExtendedRepositoryInterface extends EntityRepository<Simple, 
Long>
+public interface ExtendedRepositoryInterface extends EntityRepository<Simple, 
Long>, EntityManagerDelegate<Simple>
 {
 
     @Query(lock = PESSIMISTIC_READ)

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b0233a20/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestData.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestData.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestData.java
new file mode 100644
index 0000000..0ed860f
--- /dev/null
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestData.java
@@ -0,0 +1,48 @@
+/*
+ * 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.deltaspike.data.test.util;
+
+import javax.persistence.EntityManager;
+
+import org.apache.deltaspike.data.test.domain.Simple;
+
+public class TestData
+{
+
+    private EntityManager entityManager;
+
+    public TestData(EntityManager entityManager)
+    {
+        this.entityManager = entityManager;
+    }
+
+    public Simple createSimple(String name)
+    {
+        return createSimple(name, null);
+    }
+
+    public Simple createSimple(String name, Integer counter)
+    {
+        Simple result = new Simple(name);
+        result.setCounter(counter);
+        entityManager.persist(result);
+        entityManager.flush();
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b0233a20/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestDeployments.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestDeployments.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestDeployments.java
index 98ee9e3..68a65c1 100755
--- 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestDeployments.java
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/util/TestDeployments.java
@@ -22,6 +22,7 @@ import java.net.URL;
 
 import org.apache.deltaspike.data.api.AbstractEntityRepository;
 import org.apache.deltaspike.data.api.EntityManagerConfig;
+import org.apache.deltaspike.data.api.EntityManagerDelegate;
 import org.apache.deltaspike.data.api.EntityManagerResolver;
 import org.apache.deltaspike.data.api.EntityRepository;
 import org.apache.deltaspike.data.api.FirstResult;
@@ -103,7 +104,7 @@ public abstract class TestDeployments
         WebArchive archive = ShrinkWrap
                 .create(WebArchive.class, "test.war")
                 .addAsLibrary(createApiArchive())
-                .addClasses(WebProfileCategory.class, 
TransactionalTestCase.class)
+                .addClasses(WebProfileCategory.class, 
TransactionalTestCase.class, TestData.class)
                 .addClasses(RepositoryExtension.class, 
RepositoryDefinitionException.class)
                 .addPackages(true, TEST_FILTER, createImplPackages())
                 .addPackages(true, AuditedEntity.class.getPackage())
@@ -156,7 +157,7 @@ public abstract class TestDeployments
                         FirstResult.class, MaxResults.class, Modifying.class,
                         Query.class, QueryParam.class, QueryResult.class,
                         EntityManagerConfig.class, 
EntityManagerResolver.class, SingleResultType.class,
-                        QueryInvocationException.class)
+                        QueryInvocationException.class, 
EntityManagerDelegate.class)
                 .addClasses(Criteria.class, QuerySelection.class, 
CriteriaSupport.class)
                 .addClasses(CreatedOn.class, CurrentUser.class, 
ModifiedBy.class, ModifiedOn.class)
                 .addClasses(MappingConfig.class, QueryInOutMapper.class)

Reply via email to