You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by th...@apache.org on 2014/05/26 16:45:11 UTC
[1/2] git commit: DELTASPIKE-606 Improve simplified DTO mapping
Repository: deltaspike
Updated Branches:
refs/heads/master 900d57084 -> 3175cb266
DELTASPIKE-606 Improve simplified DTO mapping
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/3175cb26
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/3175cb26
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/3175cb26
Branch: refs/heads/master
Commit: 3175cb2669b47df33702676184e240834ee99d61
Parents: b0233a2
Author: Thomas Hug <Th...@ctp.com>
Authored: Mon May 26 07:15:29 2014 -0700
Committer: Thomas Hug <Th...@ctp.com>
Committed: Mon May 26 07:41:58 2014 -0700
----------------------------------------------------------------------
.../api/mapping/SimpleQueryInOutMapperBase.java | 65 +++++++++++++++++++-
.../mapping/SimpleQueryInOutMapperBaseTest.java | 26 ++++++--
.../impl/handler/CdiQueryInvocationContext.java | 2 +-
.../data/impl/handler/QueryHandler.java | 2 +-
.../deltaspike/data/impl/util/QueryUtils.java | 18 ------
.../data/impl/audit/TimestampsProviderTest.java | 4 +-
.../data/impl/mapping/MappedRepositoryTest.java | 49 ++++++++++++++-
.../deltaspike/data/test/domain/Simple.java | 2 +-
.../test/service/SimpleMappedDtoRepository.java | 32 ++++++++++
.../data/test/service/SimpleMapper.java | 4 +-
.../test/service/SimpleQueryInOutMapper.java | 53 ++++++++++++++++
.../data/test/util/TestDeployments.java | 4 +-
12 files changed, 224 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBase.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBase.java b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBase.java
index a065755..ce8be8e 100644
--- a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBase.java
+++ b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBase.java
@@ -18,13 +18,47 @@
*/
package org.apache.deltaspike.data.api.mapping;
+import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
+import javax.inject.Inject;
+
+import org.apache.deltaspike.data.spi.QueryInvocationContext;
+
+/**
+ * A base mapper to map from Dto to Entity and vice versa. This should be sufficient
+ * for most mapping cases and simplify the implementation of a mapper.
+ *
+ * @param <Entity> The Entity type.
+ * @param <Dto> The Dto type.
+ */
public abstract class SimpleQueryInOutMapperBase<Entity, Dto> implements QueryInOutMapper<Entity>
{
+ @Inject
+ private QueryInvocationContext context;
+
+ /**
+ * Return the primary key of the Entity corresponding to the Dto. If this is a new
+ * Entity, return {@code null}.
+ * @param dto The Dto to map to an Entity.
+ * @return The Entity primary key, or {@code null} for a new Entity.
+ */
+ protected abstract Object getPrimaryKey(Dto dto);
+
protected abstract Dto toDto(Entity entity);
- protected abstract Entity toEntity(Dto dto);
+
+ /**
+ * Map a Dto to an Entity. In case the Dto contains a valid primary key,
+ * the Entity will be retrieved first and used as method parameter. Otherwise
+ * Entity is a unmanaged new instance.
+ *
+ * @param entity Either a managed Entity looked up by the primary key,
+ * or a new Entity instance.
+ * @param dto The Dto to map.
+ * @return Mapped Entity.
+ */
+ protected abstract Entity toEntity(Entity entity, Dto dto);
@Override
public Object mapResult(final Entity result)
@@ -64,6 +98,33 @@ public abstract class SimpleQueryInOutMapperBase<Entity, Dto> implements QueryIn
@Override
public Object mapParameter(final Object parameter)
{
- return toEntity((Dto) parameter);
+ Dto dto = (Dto) parameter;
+ Object primaryKey = getPrimaryKey(dto);
+ if (primaryKey != null)
+ {
+ Entity entity = findEntity(primaryKey);
+ return toEntity(entity, dto);
+ }
+ return toEntity(newEntity(), dto);
+ }
+
+ protected Entity newEntity()
+ {
+ try
+ {
+ Class<?> entityClass = context.getEntityClass();
+ Constructor<?> constructor = entityClass.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ return (Entity) constructor.newInstance();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Failed instantiating new Entity", e);
+ }
+ }
+
+ protected Entity findEntity(Object primaryKey)
+ {
+ return (Entity) context.getEntityManager().find(context.getEntityClass(), primaryKey);
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/api/src/test/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBaseTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/api/src/test/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBaseTest.java b/deltaspike/modules/data/api/src/test/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBaseTest.java
index 2bc4349..583f3a0 100644
--- a/deltaspike/modules/data/api/src/test/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBaseTest.java
+++ b/deltaspike/modules/data/api/src/test/java/org/apache/deltaspike/data/api/mapping/SimpleQueryInOutMapperBaseTest.java
@@ -18,18 +18,19 @@
*/
package org.apache.deltaspike.data.api.mapping;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.List;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.Test;
+
public class SimpleQueryInOutMapperBaseTest
{
+
@Test
public void checkDefault() {
final SimpleQueryInOutMapperBase<String, Integer> mapper = new SimpleQueryInOutMapperBase<String, Integer>()
@@ -40,7 +41,19 @@ public class SimpleQueryInOutMapperBaseTest
}
@Override
- protected String toEntity(Integer b) {
+ protected String toEntity(String entity, Integer b) {
+ return entity;
+ }
+
+ @Override
+ protected Object getPrimaryKey(Integer dto)
+ {
+ return null;
+ }
+
+ @Override
+ protected String newEntity()
+ {
return "ok";
}
};
@@ -63,4 +76,5 @@ public class SimpleQueryInOutMapperBaseTest
// but at least we test what is expected!
assertEquals("ok", mapper.mapParameter(2));
}
+
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
index d553114..5b6b892 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
@@ -63,7 +63,7 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
this.cleanup = new LinkedList<Destroyable>();
}
- public void init()
+ public void initMapper()
{
if (hasQueryInOutMapper())
{
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java
index b2da59d..6b6ddb5 100755
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java
@@ -103,8 +103,8 @@ public class QueryHandler implements Serializable, InvocationHandler
{
CdiQueryInvocationContext queryContext = new CdiQueryInvocationContext(proxy, method, args, repoMethod,
entityManagerLookup.lookupFor(repo));
- queryContext.init();
context.set(queryContext);
+ queryContext.initMapper();
return queryContext;
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/QueryUtils.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/QueryUtils.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/QueryUtils.java
index adea94d..306ab5b 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/QueryUtils.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/QueryUtils.java
@@ -18,7 +18,6 @@
*/
package org.apache.deltaspike.data.impl.util;
-import java.lang.reflect.Method;
import java.text.MessageFormat;
import java.util.Collection;
@@ -83,21 +82,4 @@ public final class QueryUtils
return value != null ? value : (fallback != null ? fallback : "");
}
- public static boolean contains(Class<?> clazz, Method method)
- {
- return extract(clazz, method) != null;
- }
-
- public static Method extract(Class<?> clazz, Method method)
- {
- try
- {
- String name = method.getName();
- return clazz.getMethod(name, method.getParameterTypes());
- }
- catch (NoSuchMethodException e)
- {
- return null;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/audit/TimestampsProviderTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/audit/TimestampsProviderTest.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/audit/TimestampsProviderTest.java
index baf4f0b..e8c87f7 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/audit/TimestampsProviderTest.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/audit/TimestampsProviderTest.java
@@ -23,8 +23,6 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import org.apache.deltaspike.data.api.audit.CreatedOn;
-import org.apache.deltaspike.data.impl.audit.AuditPropertyException;
-import org.apache.deltaspike.data.impl.audit.TimestampsProvider;
import org.apache.deltaspike.data.test.domain.AuditedEntity;
import org.apache.deltaspike.data.test.domain.Simple;
import org.junit.Test;
@@ -68,7 +66,7 @@ public class TimestampsProviderTest
public void should_not_fail_on_non_audited_entity()
{
// given
- Simple entity = new Simple();
+ Simple entity = new Simple("should_not_fail_on_non_audited_entity");
// when
TimestampsProvider provider = new TimestampsProvider();
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/mapping/MappedRepositoryTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/mapping/MappedRepositoryTest.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/mapping/MappedRepositoryTest.java
index ff9db51..e539446 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/mapping/MappedRepositoryTest.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/mapping/MappedRepositoryTest.java
@@ -36,8 +36,11 @@ import org.apache.deltaspike.data.test.domain.Simple;
import org.apache.deltaspike.data.test.domain.Simple_;
import org.apache.deltaspike.data.test.domain.dto.BooleanWrapper;
import org.apache.deltaspike.data.test.domain.dto.SimpleDto;
+import org.apache.deltaspike.data.test.domain.dto.SimpleId;
+import org.apache.deltaspike.data.test.service.SimpleMappedDtoRepository;
import org.apache.deltaspike.data.test.service.SimpleMappedRepository;
import org.apache.deltaspike.data.test.service.SimpleMapper;
+import org.apache.deltaspike.data.test.service.SimpleQueryInOutMapper;
import org.apache.deltaspike.data.test.service.WrappedMapper;
import org.apache.deltaspike.test.category.WebProfileCategory;
import org.jboss.arquillian.container.test.api.Deployment;
@@ -56,8 +59,10 @@ public class MappedRepositoryTest extends TransactionalTestCase
initDeployment()
.addClasses(
SimpleMappedRepository.class,
+ SimpleMappedDtoRepository.class,
SimpleMapper.class,
- WrappedMapper.class)
+ WrappedMapper.class,
+ SimpleQueryInOutMapper.class)
.addPackages(false,
Simple.class.getPackage(),
SimpleDto.class.getPackage()));
@@ -66,6 +71,9 @@ public class MappedRepositoryTest extends TransactionalTestCase
@Inject
private SimpleMappedRepository repository;
+ @Inject
+ private SimpleMappedDtoRepository dtoRepository;
+
@Produces
@PersistenceContext
private EntityManager entityManager;
@@ -156,6 +164,45 @@ public class MappedRepositoryTest extends TransactionalTestCase
assertTrue(result.size() > 0);
}
+ @Test
+ public void should_save_new_entity_with_simplemapper()
+ {
+ // given
+ SimpleDto dto = new SimpleDto();
+ dto.setName("should_save_new_entity_with_simplemapper");
+ dto.setEnabled(Boolean.TRUE);
+
+ // when
+ SimpleDto result = dtoRepository.save(dto);
+
+ // then
+ assertNotNull(result);
+ assertNotNull(result.getId());
+ }
+
+ @Test
+ public void should_update_existing_entity_with_simplemapper()
+ {
+ // given
+ final String name = "should_update_existing_entity_with_simplemapper";
+ Simple simple = new Simple(name);
+ simple.setEnabled(Boolean.TRUE);
+ entityManager.persist(simple);
+
+ SimpleDto dto = new SimpleDto();
+ dto.setName(name + "_updated");
+ dto.setEnabled(Boolean.TRUE);
+ dto.setId(new SimpleId(simple.getId()));
+
+ // when
+ dtoRepository.save(dto);
+ Simple lookup = entityManager.find(Simple.class, simple.getId());
+
+ // then
+ assertNotNull(lookup);
+ assertEquals(name + "_updated", lookup.getName());
+ }
+
@Override
protected EntityManager getEntityManager()
{
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/domain/Simple.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/domain/Simple.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/domain/Simple.java
index 4f38f4d..5fadc99 100755
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/domain/Simple.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/domain/Simple.java
@@ -58,7 +58,7 @@ public class Simple
private Date temporal;
private EmbeddedSimple embedded;
- public Simple()
+ protected Simple()
{
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMappedDtoRepository.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMappedDtoRepository.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMappedDtoRepository.java
new file mode 100644
index 0000000..06f22a8
--- /dev/null
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMappedDtoRepository.java
@@ -0,0 +1,32 @@
+/*
+ * 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.service;
+
+import org.apache.deltaspike.data.api.EntityRepository;
+import org.apache.deltaspike.data.api.Repository;
+import org.apache.deltaspike.data.api.mapping.MappingConfig;
+import org.apache.deltaspike.data.test.domain.Simple;
+import org.apache.deltaspike.data.test.domain.dto.SimpleDto;
+import org.apache.deltaspike.data.test.domain.dto.SimpleId;
+
+@Repository(forEntity = Simple.class)
+@MappingConfig(SimpleQueryInOutMapper.class)
+public interface SimpleMappedDtoRepository extends EntityRepository<SimpleDto, SimpleId>
+{
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMapper.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMapper.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMapper.java
index 51baaee..6a62fea 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMapper.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleMapper.java
@@ -63,11 +63,9 @@ public class SimpleMapper implements QueryInOutMapper<Simple>
if (parameter instanceof SimpleDto)
{
SimpleDto dto = (SimpleDto) parameter;
- Simple simple = new Simple();
+ Simple simple = new Simple(dto.getName());
simple.setId(dto.getId() != null ? dto.getId().getId() : null);
simple.setEnabled(dto.getEnabled());
- simple.setName(dto.getName());
- System.out.println("Converted " + simple);
return simple;
}
return ((SimpleId) parameter).getId();
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleQueryInOutMapper.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleQueryInOutMapper.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleQueryInOutMapper.java
new file mode 100644
index 0000000..b92e801
--- /dev/null
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleQueryInOutMapper.java
@@ -0,0 +1,53 @@
+/*
+ * 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.service;
+
+import org.apache.deltaspike.data.api.mapping.SimpleQueryInOutMapperBase;
+import org.apache.deltaspike.data.test.domain.Simple;
+import org.apache.deltaspike.data.test.domain.dto.SimpleDto;
+import org.apache.deltaspike.data.test.domain.dto.SimpleId;
+
+public class SimpleQueryInOutMapper extends SimpleQueryInOutMapperBase<Simple, SimpleDto>
+{
+
+ @Override
+ protected Object getPrimaryKey(SimpleDto dto)
+ {
+ return dto.getId() != null ? dto.getId().getId() : null;
+ }
+
+ @Override
+ protected SimpleDto toDto(Simple entity)
+ {
+ SimpleDto dto = new SimpleDto();
+ dto.setId(new SimpleId(entity.getId()));
+ dto.setEnabled(entity.getEnabled());
+ dto.setName(entity.getName());
+ return dto;
+ }
+
+ @Override
+ protected Simple toEntity(Simple entity, SimpleDto dto)
+ {
+ entity.setName(dto.getName());
+ entity.setEnabled(dto.getEnabled());
+ return entity;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3175cb26/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 68a65c1..a9dc8f1 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
@@ -43,6 +43,7 @@ import org.apache.deltaspike.data.api.criteria.CriteriaSupport;
import org.apache.deltaspike.data.api.criteria.QuerySelection;
import org.apache.deltaspike.data.api.mapping.MappingConfig;
import org.apache.deltaspike.data.api.mapping.QueryInOutMapper;
+import org.apache.deltaspike.data.api.mapping.SimpleQueryInOutMapperBase;
import org.apache.deltaspike.data.impl.RepositoryDefinitionException;
import org.apache.deltaspike.data.impl.RepositoryExtension;
import org.apache.deltaspike.data.impl.audit.AuditEntityListener;
@@ -161,7 +162,8 @@ public abstract class TestDeployments
.addClasses(Criteria.class, QuerySelection.class, CriteriaSupport.class)
.addClasses(CreatedOn.class, CurrentUser.class, ModifiedBy.class, ModifiedOn.class)
.addClasses(MappingConfig.class, QueryInOutMapper.class)
- .addClasses(DelegateQueryHandler.class, QueryInvocationContext.class, RequiresTransaction.class);
+ .addClasses(DelegateQueryHandler.class, QueryInvocationContext.class, RequiresTransaction.class)
+ .addClasses(SimpleQueryInOutMapperBase.class);
}
public static WebArchive addDependencies(WebArchive archive)
[2/2] git commit: DELTASPIKE-607 EntityManagerDelegate interface for
EM method access.
Posted by th...@apache.org.
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 <Th...@ctp.com>
Authored: Mon May 26 04:42:42 2014 -0700
Committer: Thomas Hug <Th...@ctp.com>
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)