diff --git a/deltaspike/pom.xml b/deltaspike/pom.xml
index 87f532c3f3..7f4491117b 100644
--- a/deltaspike/pom.xml
+++ b/deltaspike/pom.xml
@@ -9,6 +9,13 @@
deltaspike
A starter Java EE 7 webapp which uses DeltaSpike
http://wildfly.org
+
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
+
Apache License, Version 2.0
@@ -16,12 +23,12 @@
http://www.apache.org/licenses/LICENSE-2.0.html
-
-
- com.baeldung
- parent-modules
- 1.0.0-SNAPSHOT
-
+
+
+ redhat-repository-techpreview
+ https://maven.repository.redhat.com/techpreview/all/
+
+
@@ -47,6 +54,13 @@
pom
import
+
+ org.apache.deltaspike.distribution
+ distributions-bom
+ ${deltaspike.version}
+ pom
+ import
+
@@ -160,14 +174,12 @@
org.apache.deltaspike.modules
deltaspike-data-module-api
- ${deltaspike.version}
compile
org.apache.deltaspike.modules
deltaspike-data-module-impl
- ${deltaspike.version}
runtime
@@ -184,6 +196,71 @@
querydsl-jpa
${querydsl.version}
+
+
+ org.apache.deltaspike.modules
+ deltaspike-test-control-module-api
+ test
+
+
+
+ org.apache.deltaspike.modules
+ deltaspike-test-control-module-impl
+ test
+
+
+
+ org.apache.deltaspike.cdictrl
+ deltaspike-cdictrl-weld
+ test
+
+
+
+ org.jboss.weld.se
+ weld-se-core
+ ${weld.version}
+ test
+
+
+
+ org.hibernate
+ hibernate-core
+ provided
+
+
+
+ org.jboss
+ jandex
+ 1.2.5.Final-redhat-1
+
+
+
+ com.h2database
+ h2
+ 1.4.197
+ test
+
+
+
+ org.hibernate
+ hibernate-entitymanager
+ provided
+
+
+
+
+ junit
+ junit
+ test
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.5
+
+
@@ -226,28 +303,6 @@
-
-
-
- default
-
- true
-
-
-
-
- maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
- true
-
-
-
-
-
-
UTF-8
3.7.4
- 1.7.2
+ 1.8.2
1.0.2.Final
- 8.2.2.Final
+ 8.2.1.Final
+ 2.1.2.Final
2.6
1.1.3
+ 1.8
+ 1.8
diff --git a/deltaspike/src/main/java/baeldung/controller/MemberController.java b/deltaspike/src/main/java/baeldung/controller/MemberController.java
index 7a9e9800f4..eba36355b7 100644
--- a/deltaspike/src/main/java/baeldung/controller/MemberController.java
+++ b/deltaspike/src/main/java/baeldung/controller/MemberController.java
@@ -16,6 +16,9 @@
*/
package baeldung.controller;
+import baeldung.model.Member;
+import baeldung.service.MemberRegistration;
+
import javax.annotation.PostConstruct;
import javax.enterprise.inject.Model;
import javax.enterprise.inject.Produces;
@@ -24,9 +27,6 @@ import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
-import baeldung.model.Member;
-import baeldung.service.MemberRegistration;
-
// The @Model stereotype is a convenience mechanism to make this a request-scoped bean that has an
// EL name
// Read more about the @Model stereotype in this FAQ:
@@ -34,11 +34,9 @@ import baeldung.service.MemberRegistration;
@Model
public class MemberController {
- @Inject
- private FacesContext facesContext;
+ @Inject private FacesContext facesContext;
- @Inject
- private MemberRegistration memberRegistration;
+ @Inject private MemberRegistration memberRegistration;
@Produces
@Named
diff --git a/deltaspike/src/main/java/baeldung/data/EntityManagerProducer.java b/deltaspike/src/main/java/baeldung/data/EntityManagerProducer.java
index 9189dbba74..6c2387012d 100644
--- a/deltaspike/src/main/java/baeldung/data/EntityManagerProducer.java
+++ b/deltaspike/src/main/java/baeldung/data/EntityManagerProducer.java
@@ -1,29 +1,18 @@
package baeldung.data;
-import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.RequestScoped;
-import javax.enterprise.inject.Default;
-import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceUnit;
+import javax.persistence.PersistenceContext;
-@ApplicationScoped
public class EntityManagerProducer {
- @PersistenceUnit(unitName = "primary")
- private EntityManagerFactory entityManagerFactory;
- @Produces
- @Default
+ @PersistenceContext(unitName = "primary") private EntityManager entityManager;
+
@RequestScoped
+ @Produces
public EntityManager create() {
- return this.entityManagerFactory.createEntityManager();
+ return entityManager;
}
- public void dispose(@Disposes @Default EntityManager entityManager) {
- if (entityManager.isOpen()) {
- entityManager.close();
- }
- }
}
\ No newline at end of file
diff --git a/deltaspike/src/main/java/baeldung/data/MemberListProducer.java b/deltaspike/src/main/java/baeldung/data/MemberListProducer.java
index c1f5fda31d..989bcea917 100644
--- a/deltaspike/src/main/java/baeldung/data/MemberListProducer.java
+++ b/deltaspike/src/main/java/baeldung/data/MemberListProducer.java
@@ -16,6 +16,8 @@
*/
package baeldung.data;
+import baeldung.model.Member;
+
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Observes;
@@ -25,13 +27,10 @@ import javax.inject.Inject;
import javax.inject.Named;
import java.util.List;
-import baeldung.model.Member;
-
@RequestScoped
public class MemberListProducer {
- @Inject
- private MemberRepository memberRepository;
+ @Inject private MemberRepository memberRepository;
private List members;
diff --git a/deltaspike/src/main/java/baeldung/data/MemberRepository.java b/deltaspike/src/main/java/baeldung/data/MemberRepository.java
index 220388bcf0..e9c7e52f9c 100644
--- a/deltaspike/src/main/java/baeldung/data/MemberRepository.java
+++ b/deltaspike/src/main/java/baeldung/data/MemberRepository.java
@@ -18,7 +18,10 @@ package baeldung.data;
import baeldung.model.Member;
import baeldung.model.QMember;
-import org.apache.deltaspike.data.api.*;
+import org.apache.deltaspike.data.api.AbstractEntityRepository;
+import org.apache.deltaspike.data.api.EntityManagerConfig;
+import org.apache.deltaspike.data.api.Query;
+import org.apache.deltaspike.data.api.Repository;
import java.util.List;
@@ -35,6 +38,9 @@ public abstract class MemberRepository extends AbstractEntityRepository findAllOrderedByNameWithQueryDSL() {
final QMember member = QMember.member;
- return jpaQuery().from(member).orderBy(member.email.asc()).list(member);
+ return jpaQuery()
+ .from(member)
+ .orderBy(member.email.asc())
+ .list(member);
}
}
diff --git a/deltaspike/src/main/java/baeldung/data/QueryDslRepositoryExtension.java b/deltaspike/src/main/java/baeldung/data/QueryDslRepositoryExtension.java
index 8cb00958ab..4bb8a629de 100644
--- a/deltaspike/src/main/java/baeldung/data/QueryDslRepositoryExtension.java
+++ b/deltaspike/src/main/java/baeldung/data/QueryDslRepositoryExtension.java
@@ -8,8 +8,7 @@ import javax.inject.Inject;
public class QueryDslRepositoryExtension implements QueryDslSupport, DelegateQueryHandler {
- @Inject
- private QueryInvocationContext context;
+ @Inject private QueryInvocationContext context;
@Override
public JPAQuery jpaQuery() {
diff --git a/deltaspike/src/main/java/baeldung/data/SecondaryEntityManagerProducer.java b/deltaspike/src/main/java/baeldung/data/SecondaryEntityManagerProducer.java
index 41d30d9018..606def4f30 100644
--- a/deltaspike/src/main/java/baeldung/data/SecondaryEntityManagerProducer.java
+++ b/deltaspike/src/main/java/baeldung/data/SecondaryEntityManagerProducer.java
@@ -2,29 +2,20 @@ package baeldung.data;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.RequestScoped;
-import javax.enterprise.inject.Default;
-import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceUnit;
+import javax.persistence.PersistenceContext;
@ApplicationScoped
public class SecondaryEntityManagerProducer {
- @PersistenceUnit(unitName = "secondary")
- private EntityManagerFactory entityManagerFactory;
+
+ @PersistenceContext(unitName = "secondary") private EntityManager entityManager;
@Produces
- @Default
@RequestScoped
@SecondaryPersistenceUnit
public EntityManager create() {
- return this.entityManagerFactory.createEntityManager();
+ return entityManager;
}
- public void dispose(@Disposes @Default EntityManager entityManager) {
- if (entityManager.isOpen()) {
- entityManager.close();
- }
- }
}
\ No newline at end of file
diff --git a/deltaspike/src/main/java/baeldung/data/SimpleUserRepository.java b/deltaspike/src/main/java/baeldung/data/SimpleUserRepository.java
new file mode 100644
index 0000000000..9ea6115f11
--- /dev/null
+++ b/deltaspike/src/main/java/baeldung/data/SimpleUserRepository.java
@@ -0,0 +1,45 @@
+package baeldung.data;
+
+import baeldung.model.User;
+import org.apache.deltaspike.data.api.FirstResult;
+import org.apache.deltaspike.data.api.MaxResults;
+import org.apache.deltaspike.data.api.Repository;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Created by adam.
+ */
+@Repository(forEntity = User.class)
+public abstract class SimpleUserRepository {
+ public abstract Collection findAll();
+
+ public abstract Collection findAllOrderByFirstNameAsc(@FirstResult int start, @MaxResults int size);
+
+ public abstract Collection findTop2OrderByFirstNameAsc();
+
+ public abstract Collection findFirst2OrderByFirstNameAsc();
+
+ public abstract List findAllOrderByFirstNameAsc();
+
+ public abstract List findAllOrderByFirstNameAscLastNameDesc();
+
+ public abstract User findById(Long id);
+
+ public abstract Collection findByFirstName(String firstName);
+
+ public abstract User findAnyByLastName(String lastName);
+
+ public abstract Collection findAnyByFirstName(String firstName);
+
+ public abstract Collection findByFirstNameAndLastName(String firstName, String lastName);
+
+ public abstract Collection findByFirstNameOrLastName(String firstName, String lastName);
+
+ public abstract Collection findByAddress_city(String city);
+
+ public abstract int count();
+
+ public abstract void remove(User user);
+}
diff --git a/deltaspike/src/main/java/baeldung/data/UserRepository.java b/deltaspike/src/main/java/baeldung/data/UserRepository.java
new file mode 100644
index 0000000000..688e46f5fc
--- /dev/null
+++ b/deltaspike/src/main/java/baeldung/data/UserRepository.java
@@ -0,0 +1,31 @@
+package baeldung.data;
+
+import baeldung.model.User;
+import org.apache.deltaspike.data.api.AbstractEntityRepository;
+import org.apache.deltaspike.data.api.Query;
+import org.apache.deltaspike.data.api.Repository;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Created by adam.
+ */
+@Repository
+public abstract class UserRepository extends AbstractEntityRepository {
+
+ public List findByFirstName(String firstName) {
+ return typedQuery("select u from User u where u.firstName = ?1")
+ .setParameter(1, firstName)
+ .getResultList();
+ }
+
+ public abstract List findByLastName(String lastName);
+
+ @Query("select u from User u where u.firstName = ?1")
+ public abstract Collection findUsersWithFirstName(String firstName);
+
+ @Query(value = "select * from User where firstName = ?1", isNative = true)
+ public abstract Collection findUsersWithFirstNameNative(String firstName);
+
+}
diff --git a/deltaspike/src/main/java/baeldung/model/Address.java b/deltaspike/src/main/java/baeldung/model/Address.java
new file mode 100644
index 0000000000..ef0d461b9c
--- /dev/null
+++ b/deltaspike/src/main/java/baeldung/model/Address.java
@@ -0,0 +1,51 @@
+package baeldung.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Created by adam.
+ */
+@Entity
+public class Address {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+ private String street;
+ private String city;
+ private String postCode;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getStreet() {
+ return street;
+ }
+
+ public void setStreet(String street) {
+ this.street = street;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ public String getPostCode() {
+ return postCode;
+ }
+
+ public void setPostCode(String postCode) {
+ this.postCode = postCode;
+ }
+}
diff --git a/deltaspike/src/main/java/baeldung/model/Member.java b/deltaspike/src/main/java/baeldung/model/Member.java
index e178dcf63a..d9b9b5caf1 100644
--- a/deltaspike/src/main/java/baeldung/model/Member.java
+++ b/deltaspike/src/main/java/baeldung/model/Member.java
@@ -16,22 +16,16 @@
*/
package baeldung.model;
-import java.io.Serializable;
+import org.hibernate.validator.constraints.Email;
+import org.hibernate.validator.constraints.NotEmpty;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
+import javax.persistence.*;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
-
-import org.hibernate.validator.constraints.Email;
-import org.hibernate.validator.constraints.NotEmpty;
+import java.io.Serializable;
@SuppressWarnings("serial")
@Entity
diff --git a/deltaspike/src/main/java/baeldung/model/User.java b/deltaspike/src/main/java/baeldung/model/User.java
new file mode 100644
index 0000000000..5560ea0e7c
--- /dev/null
+++ b/deltaspike/src/main/java/baeldung/model/User.java
@@ -0,0 +1,52 @@
+package baeldung.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * Created by adam.
+ */
+@Entity
+public class User {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+ private String firstName;
+ private String lastName;
+ @OneToOne private Address address;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public Address getAddress() {
+ return address;
+ }
+
+ public void setAddress(Address address) {
+ this.address = address;
+ }
+}
diff --git a/deltaspike/src/main/resources/META-INF/beans.xml b/deltaspike/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000000..f462814752
--- /dev/null
+++ b/deltaspike/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/deltaspike/src/test/java/baeldung/ValidatorProducer.java b/deltaspike/src/test/java/baeldung/ValidatorProducer.java
new file mode 100644
index 0000000000..6b895f771e
--- /dev/null
+++ b/deltaspike/src/test/java/baeldung/ValidatorProducer.java
@@ -0,0 +1,21 @@
+package baeldung;
+
+import javax.enterprise.inject.Produces;
+import javax.validation.Validation;
+import javax.validation.Validator;
+
+/**
+ * Created by adam.
+ */
+public class ValidatorProducer {
+
+ @Produces
+ public Validator createValidator() {
+ return Validation
+ .byDefaultProvider()
+ .configure()
+ .buildValidatorFactory()
+ .getValidator();
+ }
+
+}
diff --git a/deltaspike/src/test/java/baeldung/data/TestEntityManagerProducer.java b/deltaspike/src/test/java/baeldung/data/TestEntityManagerProducer.java
new file mode 100644
index 0000000000..139760d7fc
--- /dev/null
+++ b/deltaspike/src/test/java/baeldung/data/TestEntityManagerProducer.java
@@ -0,0 +1,23 @@
+package baeldung.data;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.Specializes;
+import javax.persistence.EntityManager;
+import javax.persistence.Persistence;
+
+/**
+ * Created by adam.
+ */
+public class TestEntityManagerProducer extends EntityManagerProducer {
+
+ @ApplicationScoped
+ @Produces
+ @Specializes
+ public EntityManager create() {
+ return Persistence
+ .createEntityManagerFactory("pu-test")
+ .createEntityManager();
+ }
+
+}
diff --git a/deltaspike/src/test/java/baeldung/test/MemberRegistrationIntegrationTest.java b/deltaspike/src/test/java/baeldung/test/MemberRegistrationIntegrationTest.java
index 2b6cfe2b02..6db09abaae 100644
--- a/deltaspike/src/test/java/baeldung/test/MemberRegistrationIntegrationTest.java
+++ b/deltaspike/src/test/java/baeldung/test/MemberRegistrationIntegrationTest.java
@@ -16,19 +16,12 @@
*/
package baeldung.test;
-import static org.junit.Assert.assertNotNull;
-
-import java.io.File;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
import baeldung.data.*;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
import baeldung.model.Member;
import baeldung.service.MemberRegistration;
import baeldung.util.Resources;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
@@ -37,24 +30,39 @@ import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.junit.Test;
import org.junit.runner.RunWith;
+import javax.inject.Inject;
+import java.io.File;
+import java.util.logging.Logger;
+
+import static org.junit.Assert.assertNotNull;
+
@RunWith(Arquillian.class)
public class MemberRegistrationIntegrationTest {
@Deployment
public static Archive> createTestArchive() {
- File[] files = Maven.resolver().loadPomFromFile("pom.xml").importRuntimeDependencies().resolve().withTransitivity().asFile();
+ File[] files = Maven
+ .resolver()
+ .loadPomFromFile("pom.xml")
+ .importRuntimeDependencies()
+ .resolve()
+ .withTransitivity()
+ .asFile();
- return ShrinkWrap.create(WebArchive.class, "test.war")
- .addClasses(EntityManagerProducer.class, Member.class, MemberRegistration.class, MemberRepository.class, Resources.class, QueryDslRepositoryExtension.class, QueryDslSupport.class, SecondaryPersistenceUnit.class,
- SecondaryEntityManagerProducer.class, SecondaryEntityManagerResolver.class)
- .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml").addAsResource("META-INF/apache-deltaspike.properties").addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml").addAsWebInfResource("test-ds.xml")
- .addAsWebInfResource("test-secondary-ds.xml").addAsLibraries(files);
+ return ShrinkWrap
+ .create(WebArchive.class, "test.war")
+ .addClasses(EntityManagerProducer.class, Member.class, MemberRegistration.class, MemberRepository.class, Resources.class, QueryDslRepositoryExtension.class, QueryDslSupport.class, SecondaryPersistenceUnit.class, SecondaryEntityManagerProducer.class,
+ SecondaryEntityManagerResolver.class)
+ .addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
+ .addAsResource("META-INF/apache-deltaspike.properties")
+ .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
+ .addAsWebInfResource("test-ds.xml")
+ .addAsWebInfResource("test-secondary-ds.xml")
+ .addAsLibraries(files);
}
- @Inject
- MemberRegistration memberRegistration;
+ @Inject MemberRegistration memberRegistration;
- @Inject
- Logger log;
+ @Inject Logger log;
@Test
public void testRegister() throws Exception {
diff --git a/deltaspike/src/test/java/baeldung/test/SimpleUserRepositoryUnitTest.java b/deltaspike/src/test/java/baeldung/test/SimpleUserRepositoryUnitTest.java
new file mode 100644
index 0000000000..2065338c77
--- /dev/null
+++ b/deltaspike/src/test/java/baeldung/test/SimpleUserRepositoryUnitTest.java
@@ -0,0 +1,133 @@
+package baeldung.test;
+
+import baeldung.data.SimpleUserRepository;
+import baeldung.model.User;
+import org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Created by adam.
+ */
+@RunWith(CdiTestRunner.class)
+public class SimpleUserRepositoryUnitTest {
+
+ @Inject private EntityManager entityManager;
+
+ @Inject private SimpleUserRepository simpleUserRepository;
+
+ @Test
+ public void givenFourUsersWhenFindAllShouldReturnFourUsers() {
+ assertThat(simpleUserRepository
+ .findAll()
+ .size(), equalTo(4));
+ }
+
+ @Test
+ public void givenTwoUsersWithSpecifiedNameWhenFindByFirstNameShouldReturnTwoUsers() {
+ assertThat(simpleUserRepository
+ .findByFirstName("Adam")
+ .size(), equalTo(2));
+ }
+
+ @Test
+ public void givenTwoUsersWithSpecifiedNameWhenFindAnyByFirstNameShouldReturnTwoUsers() {
+ assertThat(simpleUserRepository
+ .findAnyByFirstName("Adam")
+ .size(), equalTo(2));
+ }
+
+ @Test
+ public void givenTwoUsersWithSpecifiedNameWhenCountByFirstNameShouldReturnSizeTwo() {
+ assertThat(simpleUserRepository.count(), equalTo(4));
+ }
+
+ @Test
+ public void givenTwoUsersWithSpecifiedNameWhenRemoveByFirstNameShouldReturnSizeTwo() {
+ simpleUserRepository.remove(entityManager.merge(simpleUserRepository.findById(1L)));
+ assertThat(entityManager.find(User.class, 1L), nullValue());
+ }
+
+ @Test
+ public void givenOneUserWithSpecifiedFirstNameAndLastNameWhenFindByFirstNameAndLastNameShouldReturnOneUser() {
+ assertThat(simpleUserRepository
+ .findByFirstNameAndLastName("Adam", "LastName1")
+ .size(), equalTo(1));
+ assertThat(simpleUserRepository
+ .findByFirstNameAndLastName("David", "LastName2")
+ .size(), equalTo(1));
+ }
+
+ @Test
+ public void givenOneUserWithSpecifiedLastNameWhenFindAnyByLastNameShouldReturnOneUser() {
+ assertThat(simpleUserRepository.findAnyByLastName("LastName1"), notNullValue());
+ }
+
+ @Test
+ public void givenOneUserWithSpecifiedAddressCityWhenFindByCityShouldReturnOneUser() {
+ assertThat(simpleUserRepository
+ .findByAddress_city("London")
+ .size(), equalTo(1));
+ }
+
+ @Test
+ public void givenUsersWithSpecifiedFirstOrLastNameWhenFindByFirstNameOrLastNameShouldReturnTwoUsers() {
+ assertThat(simpleUserRepository
+ .findByFirstNameOrLastName("David", "LastName1")
+ .size(), equalTo(2));
+ }
+
+ @Test
+ public void givenUsersWhenFindAllOrderByFirstNameAscShouldReturnFirstAdamLastPeter() {
+ List users = simpleUserRepository.findAllOrderByFirstNameAsc();
+ assertThat(users
+ .get(0)
+ .getFirstName(), equalTo("Adam"));
+ assertThat(users
+ .get(3)
+ .getFirstName(), equalTo("Peter"));
+ }
+
+ @Test
+ public void givenUsersWhenFindAllOrderByFirstNameAscLastNameDescShouldReturnFirstAdamLastPeter() {
+ List users = simpleUserRepository.findAllOrderByFirstNameAscLastNameDesc();
+ assertThat(users
+ .get(0)
+ .getFirstName(), equalTo("Adam"));
+ assertThat(users
+ .get(3)
+ .getFirstName(), equalTo("Peter"));
+ }
+
+ @Test
+ public void givenUsersWhenFindTop2ShouldReturnTwoUsers() {
+ assertThat(simpleUserRepository
+ .findTop2OrderByFirstNameAsc()
+ .size(), equalTo(2));
+ }
+
+ @Test
+ public void givenUsersWhenFindFirst2ShouldReturnTwoUsers() {
+ assertThat(simpleUserRepository
+ .findFirst2OrderByFirstNameAsc()
+ .size(), equalTo(2));
+ }
+
+ @Test
+ public void givenPagesWithSizeTwoWhenFindAllOrderByFirstNameAscShouldReturnTwoPages() {
+ assertThat(simpleUserRepository
+ .findAllOrderByFirstNameAsc(0, 2)
+ .size(), equalTo(2));
+ assertThat(simpleUserRepository
+ .findAllOrderByFirstNameAsc(2, 4)
+ .size(), equalTo(2));
+ }
+
+}
diff --git a/deltaspike/src/test/java/baeldung/test/UserRepositoryUnitTest.java b/deltaspike/src/test/java/baeldung/test/UserRepositoryUnitTest.java
new file mode 100644
index 0000000000..bd07bf2730
--- /dev/null
+++ b/deltaspike/src/test/java/baeldung/test/UserRepositoryUnitTest.java
@@ -0,0 +1,55 @@
+package baeldung.test;
+
+import baeldung.data.UserRepository;
+import org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.inject.Inject;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Created by adam.
+ */
+@RunWith(CdiTestRunner.class)
+public class UserRepositoryUnitTest {
+
+ @Inject private UserRepository userRepository;
+
+ @Test
+ public void givenFourUsersWhenFindAllShouldReturnFourUsers() {
+ assertThat(userRepository
+ .findAll()
+ .size(), equalTo(4));
+ }
+
+ @Test
+ public void givenTwoUsersWithSpecifiedNameWhenFindByFirstNameShouldReturnTwoUsers() {
+ assertThat(userRepository
+ .findByFirstName("Adam")
+ .size(), equalTo(2));
+ }
+
+ @Test
+ public void givenTwoUsersWithSpecifiedNameWhenFindUsersWithFirstNameShouldReturnTwoUsers() {
+ assertThat(userRepository
+ .findUsersWithFirstName("Adam")
+ .size(), equalTo(2));
+ }
+
+ @Test
+ public void givenTwoUsersWithSpecifiedNameWhenFindUsersWithFirstNameNativeShouldReturnTwoUsers() {
+ assertThat(userRepository
+ .findUsersWithFirstNameNative("Adam")
+ .size(), equalTo(2));
+ }
+
+ @Test
+ public void givenTwoUsersWithSpecifiedLastNameWhenFindByLastNameShouldReturnTwoUsers() {
+ assertThat(userRepository
+ .findByLastName("LastName3")
+ .size(), equalTo(2));
+ }
+}
diff --git a/deltaspike/src/test/resources/META-INF/apache-deltaspike.properties b/deltaspike/src/test/resources/META-INF/apache-deltaspike.properties
index a861ad729a..787e58ade0 100644
--- a/deltaspike/src/test/resources/META-INF/apache-deltaspike.properties
+++ b/deltaspike/src/test/resources/META-INF/apache-deltaspike.properties
@@ -1 +1,3 @@
globalAlternatives.org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy=org.apache.deltaspike.jpa.impl.transaction.BeanManagedUserTransactionStrategy
+org.apache.deltaspike.ProjectStage=UnitTest
+deltaspike.testcontrol.stop_container=false
\ No newline at end of file
diff --git a/deltaspike/src/test/resources/META-INF/beans.xml b/deltaspike/src/test/resources/META-INF/beans.xml
new file mode 100644
index 0000000000..346b484f2f
--- /dev/null
+++ b/deltaspike/src/test/resources/META-INF/beans.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/deltaspike/src/test/resources/META-INF/test-persistence.xml b/deltaspike/src/test/resources/META-INF/persistence.xml
similarity index 53%
rename from deltaspike/src/test/resources/META-INF/test-persistence.xml
rename to deltaspike/src/test/resources/META-INF/persistence.xml
index bc9fbcbeef..ee69855138 100644
--- a/deltaspike/src/test/resources/META-INF/test-persistence.xml
+++ b/deltaspike/src/test/resources/META-INF/persistence.xml
@@ -11,6 +11,7 @@
+
java:jboss/datasources/baeldung-jee7-seedTestSecondaryDS
@@ -18,4 +19,23 @@
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+
+ baeldung.model.User
+ baeldung.model.Address
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deltaspike/src/test/resources/arquillian.xml b/deltaspike/src/test/resources/arquillian.xml
index 14f9e53bbd..7f02023089 100644
--- a/deltaspike/src/test/resources/arquillian.xml
+++ b/deltaspike/src/test/resources/arquillian.xml
@@ -28,12 +28,4 @@
-
-
-
-
- target\wildfly-run\wildfly-10.0.0.Final
-
-
-
diff --git a/deltaspike/src/test/resources/import.sql b/deltaspike/src/test/resources/import.sql
new file mode 100644
index 0000000000..f6e06ecee4
--- /dev/null
+++ b/deltaspike/src/test/resources/import.sql
@@ -0,0 +1,6 @@
+INSERT INTO ADDRESS(ID, STREET, CITY, POSTCODE) VALUES (1, 'Oxford', 'London', 'N121');
+
+INSERT INTO USER(ID, FIRSTNAME, LASTNAME, ADDRESS_ID) VALUES (1, 'Adam', 'LastName1', null);
+INSERT INTO USER(ID, FIRSTNAME, LASTNAME, ADDRESS_ID) VALUES (2, 'David', 'LastName2', null);
+INSERT INTO USER(ID, FIRSTNAME, LASTNAME, ADDRESS_ID) VALUES (3, 'Adam', 'LastName3', null);
+INSERT INTO USER(ID, FIRSTNAME, LASTNAME, ADDRESS_ID) VALUES (4, 'Peter', 'LastName3', 1);
\ No newline at end of file