[weld-commits] Weld SVN: r7002 - in archetypes/javaee6-webapp/trunk: src/main/java/com/mycompany and 6 other directories.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Fri Aug 20 17:35:22 EDT 2010


Author: dan.j.allen
Date: 2010-08-20 17:35:21 -0400 (Fri, 20 Aug 2010)
New Revision: 7002

Added:
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/controller/
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/controller/MemberRegistration.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberListProducer.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberRepository.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberRepositoryProducer.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/SeedDataImporter.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/model/
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/model/Member.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/JaxRsActivator.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/MemberResourceRESTService.java
   archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/
   archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/MavenArtifactResolver.java
   archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/MemberRegistrationTest.java
Removed:
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/JaxRsActivator.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/Member.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberListProducer.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRegistration.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepository.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepositoryProducer.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberResourceRESTService.java
   archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/SeedDataImporter.java
   archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MavenArtifactResolver.java
   archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MemberRegistrationTest.java
Modified:
   archetypes/javaee6-webapp/trunk/pom.xml
Log:
introduce package structure


Modified: archetypes/javaee6-webapp/trunk/pom.xml
===================================================================
--- archetypes/javaee6-webapp/trunk/pom.xml	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/pom.xml	2010-08-20 21:35:21 UTC (rev 7002)
@@ -149,11 +149,9 @@
                   <configuration>
                      <compilerArgument>-proc:only</compilerArgument>
                      <!-- If your app has multiple packages, use this include filter to execute the processor only on the package containing your entities -->
-                     <!--
                      <includes>
                         <include>**/model/*.java</include>
                      </includes>
-                     -->
                   </configuration>
                   <goals>
                      <goal>compile</goal>

Deleted: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/JaxRsActivator.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/JaxRsActivator.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/JaxRsActivator.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,41 +0,0 @@
-package com.mycompany;
-
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
-
-/**
- * A class extending {@link Application} and annotated with @ApplicationPath
- * is the Java EE 6 "no XML" approach to activating JAX-RS.
- *
- * <p>Resources are served relative to the servlet path specified in the {@link
- * ApplicationPath} annotation.</p>
- *
- * <p><strong>NOTE</strong><br/>The following modifications are required to get
- * JAX-RS working on JBoss AS 6.0.0.M4:</p>
- *
- * <ol>
- * <li>Remove (or comment out) the <code>extends Application</code> clause on this class</li>
- * <li>Remove (or comment out) the <code>@ApplicationPath</code> annotation on this class</li>
- * <li>Open up web.xml and add the following XML snippet:
- * <pre>
- * &lt;context-param&gt;
- *    &lt;param-name&gt;resteasy.scan&lt;/param-name&gt;
- *    &lt;param-value&gt;true&lt;/param-value&gt;
- * &lt;/context-param&gt;
-
- * &lt;context-param&gt;
- *    &lt;param-name&gt;resteasy.servlet.mapping.prefix&lt;/param-name&gt;
- *    &lt;param-value&gt;/rest&lt;/param-value&gt;
- * &lt;/context-param&gt;
- * </pre>
- * <p>The mapping prefix should match the value that was in the
- * <code>@ApplicationPath</code> annotation, prepended with a forward slash (/)
- * if not already present.</p>
- * </li>
- * </ol>
- */
- at ApplicationPath("/rest")
-public class JaxRsActivator extends Application
-{
-   /* class body intentionally left blank */
-}

Deleted: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/Member.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/Member.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/Member.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,83 +0,0 @@
-package com.mycompany;
-
-import java.io.Serializable;
-
-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.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;
-
- at Entity
- at XmlRootElement
- at Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
-public class Member implements Serializable
-{
-   private Long id;
-   private String name;
-   private String email;
-   private String phoneNumber;
-
-   @Id
-   @GeneratedValue
-   public Long getId()
-   {
-      return id;
-   }
-
-   public void setId(Long id)
-   {
-      this.id = id;
-   }
-
-   @NotNull
-   @Size(min = 1, max = 25)
-   @Pattern(regexp = "[A-Za-z ]*", message = "must contain only letters and spaces")
-   public String getName()
-   {
-      return name;
-   }
-
-   public void setName(String name)
-   {
-      this.name = name;
-   }
-
-   @NotNull
-   @NotEmpty
-   @Email
-   public String getEmail()
-   {
-      return email;
-   }
-
-   public void setEmail(String email)
-   {
-      this.email = email;
-   }
-
-   @NotNull
-   @Size(min = 10, max = 12)
-   @Digits(fraction = 0, integer = 12)
-   @Column(name = "phone_number")
-   public String getPhoneNumber()
-   {
-      return phoneNumber;
-   }
-
-   public void setPhoneNumber(String phoneNumber)
-   {
-      this.phoneNumber = phoneNumber;
-   }
-   
-   /** Default value included to remove warning.  Remove or modify at will.  */  
-   private static final long serialVersionUID = 1L;
-}
\ No newline at end of file

Deleted: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberListProducer.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberListProducer.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberListProducer.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,50 +0,0 @@
-package com.mycompany;
-
-import java.util.List;
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.RequestScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.event.Reception;
-
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.persistence.EntityManager;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Root;
-
- at RequestScoped
-public class MemberListProducer
-{
-   @Inject
-   @MemberRepository
-   private EntityManager em;
-
-   private List<Member> members;
-
-   // The @Named annotation allows us to access the return value via the EL variable name "member" in the UI (e.g., Facelets or JSP view)
-   @Produces
-   @Named
-   public List<Member> getMembers()
-   {
-      return members;
-   }
-
-   public void onMemberListChanged(@Observes(notifyObserver = Reception.IF_EXISTS) final Member member)
-   {
-      retrieveAllMembersOrderedByName();
-   }
-
-   @PostConstruct
-   public void retrieveAllMembersOrderedByName()
-   {
-      CriteriaBuilder cb = em.getCriteriaBuilder();
-      CriteriaQuery<Member> criteria = cb.createQuery(Member.class);
-      Root<Member> member = criteria.from(Member.class);
-      // Uncomment if you would like to try out typesafe criteria queries, a new feature in JPA 2.0
-      // criteria.select(member).orderBy(cb.asc(member.get(Member_.name)));
-      criteria.select(member).orderBy(cb.asc(member.get("name")));
-      members = em.createQuery(criteria).getResultList();
-   }
-}

Deleted: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRegistration.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRegistration.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRegistration.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,59 +0,0 @@
-package com.mycompany;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.event.Event;
-import javax.enterprise.inject.Model;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.persistence.EntityManager;
-import javax.transaction.UserTransaction;
-import org.slf4j.Logger;
-
-// Adding the @Stateful annotation eliminates need for manual transaction demarcation
-// @javax.ejb.Stateful
-// 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: http://seamframework.org/Documentation/WhatIsThePurposeOfTheModelAnnotation
- at Model
-public class MemberRegistration
-{
-   @Inject
-   private Logger log;
-
-   @Inject
-   @MemberRepository
-   private EntityManager em;
-
-   @Inject
-   private UserTransaction utx;
-
-   @Inject
-   private Event<Member> memberEventSrc;
-
-   private Member newMember;
-
-   @Produces
-   @Named
-   public Member getNewMember()
-   {
-      return newMember;
-   }
-
-   public void register() throws Exception
-   {
-      log.info("Registering " + newMember.getName());
-      // UserTransaction only needed when bean is not an EJB
-      utx.begin();
-      em.joinTransaction();
-      em.persist(newMember);
-      utx.commit();
-      memberEventSrc.fire(newMember);
-      initNewMember();
-   }
-
-   @PostConstruct
-   public void initNewMember()
-   {
-      newMember = new Member();
-   }
-}

Deleted: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepository.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepository.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepository.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,21 +0,0 @@
-package com.mycompany;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-/**
- * A qualifier used to differentiate between multiple data repositories. 
- * 
- * If you only have 1 EntityManager, this annotation is optional
- */
- at Qualifier
- at Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
- at Retention(RetentionPolicy.RUNTIME)
-public @interface MemberRepository
-{
-   /* class body intentionally left blank */
-}

Deleted: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepositoryProducer.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepositoryProducer.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepositoryProducer.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,20 +0,0 @@
-package com.mycompany;
-
-import javax.enterprise.inject.Produces;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
-/**
- * This class uses CDI to produce EntityManager instances qualified that are
- * qualified as @MemberRepository. Therefore, to inject an instance, @Inject
- * must be followed by @MemberRepository.
- */
-public class MemberRepositoryProducer
-{
-   // use @SuppressWarnings to tell IDE to ignore warnings about field not being referenced directly
-   @SuppressWarnings("unused")
-   @Produces
-   @MemberRepository
-   @PersistenceContext
-   private EntityManager em;
-}

Deleted: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberResourceRESTService.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberResourceRESTService.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberResourceRESTService.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,41 +0,0 @@
-package com.mycompany;
-
-import java.util.List;
-import javax.enterprise.context.RequestScoped;
-import javax.inject.Inject;
-import javax.persistence.EntityManager;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-
-/**
- * JAX-RS Example
- * 
- * This class produces a RESTful service to read the contents of the members table.   
- */
- at Path("/members")
- at RequestScoped
-public class MemberResourceRESTService
-{
-   @Inject
-   @MemberRepository
-   private EntityManager em;
-
-   @GET
-   public List<Member> listAllMembers()
-   {
-      // Use @SupressWarnings to force IDE to ignore warnings about "genericizing" the results of this query
-      @SuppressWarnings("unchecked")
-      // We recommend centralizing inline queries such as this one into @NamedQuery annotations on the @Entity class
-      // as described in the named query blueprint: https://blueprints.dev.java.net/bpcatalog/ee5/persistence/namedquery.html
-      final List<Member> results = em.createQuery("select m from Member m order by m.name").getResultList();
-      return results;
-   }
-
-   @GET
-   @Path("/{id:[1-9][0-9]*}")
-   public Member lookupMemberById(@PathParam("id") long id)
-   {
-      return em.find(Member.class, id);
-   }
-}

Deleted: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/SeedDataImporter.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/SeedDataImporter.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/SeedDataImporter.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,60 +0,0 @@
-package com.mycompany;
-
-import javax.annotation.PostConstruct;
-import javax.ejb.Singleton;
-import javax.ejb.Startup;
-import javax.inject.Inject;
-import javax.persistence.EntityManager;
-import javax.persistence.TransactionRequiredException;
-import javax.transaction.UserTransaction;
-import org.slf4j.Logger;
-
-/**
- * Import seed data into the database on application startup using
- * a startup singleton EJB.
- *
- * @author Dan Allen
- */
- at Startup
- at Singleton
-public class SeedDataImporter
-{
-   @Inject
-   private Logger log;
-   
-   @Inject
-   @MemberRepository
-   private EntityManager em;
-   
-   @Inject
-   private UserTransaction tx;
-
-   @PostConstruct
-   public void importData()
-   {
-      Member member1 = new Member();
-      member1.setName("John Smith");
-      member1.setEmail("john.smith at mailinator.com");
-      member1.setPhoneNumber("2125551212");
-      try
-      {
-         try
-         {
-            em.persist(member1);
-         }
-         catch (TransactionRequiredException e)
-         {
-            // manual transaction control required in @PostConstruct method
-            // only use if enforced by JPA provider (due to bug in GlassFish)
-            tx.begin();
-            em.persist(member1);
-            tx.commit();
-         }
-         log.info("Successfully imported seed data.");
-      }
-      catch (Exception e)
-      {
-         log.warn("Seed data import failed.", e);
-      }
-   }
-}

Copied: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/controller/MemberRegistration.java (from rev 6888, archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRegistration.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/controller/MemberRegistration.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/controller/MemberRegistration.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,61 @@
+package com.mycompany.controller;
+
+import com.mycompany.data.MemberRepository;
+import com.mycompany.model.Member;
+import javax.annotation.PostConstruct;
+import javax.enterprise.event.Event;
+import javax.enterprise.inject.Model;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.persistence.EntityManager;
+import javax.transaction.UserTransaction;
+import org.slf4j.Logger;
+
+// Adding the @Stateful annotation eliminates need for manual transaction demarcation
+// @javax.ejb.Stateful
+// 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: http://seamframework.org/Documentation/WhatIsThePurposeOfTheModelAnnotation
+ at Model
+public class MemberRegistration
+{
+   @Inject
+   private Logger log;
+
+   @Inject
+   @MemberRepository
+   private EntityManager em;
+
+   @Inject
+   private UserTransaction utx;
+
+   @Inject
+   private Event<Member> memberEventSrc;
+
+   private Member newMember;
+
+   @Produces
+   @Named
+   public Member getNewMember()
+   {
+      return newMember;
+   }
+
+   public void register() throws Exception
+   {
+      log.info("Registering " + newMember.getName());
+      // UserTransaction only needed when bean is not an EJB
+      utx.begin();
+      em.joinTransaction();
+      em.persist(newMember);
+      utx.commit();
+      memberEventSrc.fire(newMember);
+      initNewMember();
+   }
+
+   @PostConstruct
+   public void initNewMember()
+   {
+      newMember = new Member();
+   }
+}

Copied: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberListProducer.java (from rev 6886, archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberListProducer.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberListProducer.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberListProducer.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,51 @@
+package com.mycompany.data;
+
+import com.mycompany.model.Member;
+import java.util.List;
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.event.Reception;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
+
+ at RequestScoped
+public class MemberListProducer
+{
+   @Inject
+   @MemberRepository
+   private EntityManager em;
+
+   private List<Member> members;
+
+   // The @Named annotation allows us to access the return value via the EL variable name "member" in the UI (e.g., Facelets or JSP view)
+   @Produces
+   @Named
+   public List<Member> getMembers()
+   {
+      return members;
+   }
+
+   public void onMemberListChanged(@Observes(notifyObserver = Reception.IF_EXISTS) final Member member)
+   {
+      retrieveAllMembersOrderedByName();
+   }
+
+   @PostConstruct
+   public void retrieveAllMembersOrderedByName()
+   {
+      CriteriaBuilder cb = em.getCriteriaBuilder();
+      CriteriaQuery<Member> criteria = cb.createQuery(Member.class);
+      Root<Member> member = criteria.from(Member.class);
+      // Uncomment if you would like to try out typesafe criteria queries, a new feature in JPA 2.0
+      // criteria.select(member).orderBy(cb.asc(member.get(Member_.name)));
+      criteria.select(member).orderBy(cb.asc(member.get("name")));
+      members = em.createQuery(criteria).getResultList();
+   }
+}

Copied: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberRepository.java (from rev 6882, archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepository.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberRepository.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberRepository.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,21 @@
+package com.mycompany.data;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+/**
+ * A qualifier used to differentiate between multiple data repositories. 
+ * 
+ * If you only have 1 EntityManager, this annotation is optional
+ */
+ at Qualifier
+ at Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface MemberRepository
+{
+   /* class body intentionally left blank */
+}

Copied: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberRepositoryProducer.java (from rev 6885, archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberRepositoryProducer.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberRepositoryProducer.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/MemberRepositoryProducer.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,20 @@
+package com.mycompany.data;
+
+import javax.enterprise.inject.Produces;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ * This class uses CDI to produce EntityManager instances qualified that are
+ * qualified as @MemberRepository. Therefore, to inject an instance, @Inject
+ * must be followed by @MemberRepository.
+ */
+public class MemberRepositoryProducer
+{
+   // use @SuppressWarnings to tell IDE to ignore warnings about field not being referenced directly
+   @SuppressWarnings("unused")
+   @Produces
+   @MemberRepository
+   @PersistenceContext
+   private EntityManager em;
+}

Copied: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/SeedDataImporter.java (from rev 6998, archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/SeedDataImporter.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/SeedDataImporter.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/data/SeedDataImporter.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,61 @@
+package com.mycompany.data;
+
+import com.mycompany.model.Member;
+import javax.annotation.PostConstruct;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.TransactionRequiredException;
+import javax.transaction.UserTransaction;
+import org.slf4j.Logger;
+
+/**
+ * Import seed data into the database on application startup using
+ * a startup singleton EJB.
+ *
+ * @author Dan Allen
+ */
+ at Startup
+ at Singleton
+public class SeedDataImporter
+{
+   @Inject
+   private Logger log;
+   
+   @Inject
+   @MemberRepository
+   private EntityManager em;
+   
+   @Inject
+   private UserTransaction tx;
+
+   @PostConstruct
+   public void importData()
+   {
+      Member member1 = new Member();
+      member1.setName("John Smith");
+      member1.setEmail("john.smith at mailinator.com");
+      member1.setPhoneNumber("2125551212");
+      try
+      {
+         try
+         {
+            em.persist(member1);
+         }
+         catch (TransactionRequiredException e)
+         {
+            // manual transaction control required in @PostConstruct method
+            // only use if enforced by JPA provider (due to bug in GlassFish)
+            tx.begin();
+            em.persist(member1);
+            tx.commit();
+         }
+         log.info("Successfully imported seed data.");
+      }
+      catch (Exception e)
+      {
+         log.warn("Seed data import failed.", e);
+      }
+   }
+}

Copied: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/model/Member.java (from rev 6882, archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/Member.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/model/Member.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/model/Member.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,83 @@
+package com.mycompany.model;
+
+import java.io.Serializable;
+
+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.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;
+
+ at Entity
+ at XmlRootElement
+ at Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
+public class Member implements Serializable
+{
+   private Long id;
+   private String name;
+   private String email;
+   private String phoneNumber;
+
+   @Id
+   @GeneratedValue
+   public Long getId()
+   {
+      return id;
+   }
+
+   public void setId(Long id)
+   {
+      this.id = id;
+   }
+
+   @NotNull
+   @Size(min = 1, max = 25)
+   @Pattern(regexp = "[A-Za-z ]*", message = "must contain only letters and spaces")
+   public String getName()
+   {
+      return name;
+   }
+
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+
+   @NotNull
+   @NotEmpty
+   @Email
+   public String getEmail()
+   {
+      return email;
+   }
+
+   public void setEmail(String email)
+   {
+      this.email = email;
+   }
+
+   @NotNull
+   @Size(min = 10, max = 12)
+   @Digits(fraction = 0, integer = 12)
+   @Column(name = "phone_number")
+   public String getPhoneNumber()
+   {
+      return phoneNumber;
+   }
+
+   public void setPhoneNumber(String phoneNumber)
+   {
+      this.phoneNumber = phoneNumber;
+   }
+   
+   /** Default value included to remove warning.  Remove or modify at will.  */  
+   private static final long serialVersionUID = 1L;
+}
\ No newline at end of file

Copied: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/JaxRsActivator.java (from rev 7000, archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/JaxRsActivator.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/JaxRsActivator.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/JaxRsActivator.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,41 @@
+package com.mycompany.rest;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+/**
+ * A class extending {@link Application} and annotated with @ApplicationPath
+ * is the Java EE 6 "no XML" approach to activating JAX-RS.
+ *
+ * <p>Resources are served relative to the servlet path specified in the {@link
+ * ApplicationPath} annotation.</p>
+ *
+ * <p><strong>NOTE</strong><br/>The following modifications are required to get
+ * JAX-RS working on JBoss AS 6.0.0.M4:</p>
+ *
+ * <ol>
+ * <li>Remove (or comment out) the <code>extends Application</code> clause on this class</li>
+ * <li>Remove (or comment out) the <code>@ApplicationPath</code> annotation on this class</li>
+ * <li>Open up web.xml and add the following XML snippet:
+ * <pre>
+ * &lt;context-param&gt;
+ *    &lt;param-name&gt;resteasy.scan&lt;/param-name&gt;
+ *    &lt;param-value&gt;true&lt;/param-value&gt;
+ * &lt;/context-param&gt;
+
+ * &lt;context-param&gt;
+ *    &lt;param-name&gt;resteasy.servlet.mapping.prefix&lt;/param-name&gt;
+ *    &lt;param-value&gt;/rest&lt;/param-value&gt;
+ * &lt;/context-param&gt;
+ * </pre>
+ * <p>The mapping prefix should match the value that was in the
+ * <code>@ApplicationPath</code> annotation, prepended with a forward slash (/)
+ * if not already present.</p>
+ * </li>
+ * </ol>
+ */
+ at ApplicationPath("/rest")
+public class JaxRsActivator extends Application
+{
+   /* class body intentionally left blank */
+}

Copied: archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/MemberResourceRESTService.java (from rev 6990, archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/MemberResourceRESTService.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/MemberResourceRESTService.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/main/java/com/mycompany/rest/MemberResourceRESTService.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,43 @@
+package com.mycompany.rest;
+
+import com.mycompany.model.Member;
+import com.mycompany.data.MemberRepository;
+import java.util.List;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+/**
+ * JAX-RS Example
+ * 
+ * This class produces a RESTful service to read the contents of the members table.   
+ */
+ at Path("/members")
+ at RequestScoped
+public class MemberResourceRESTService
+{
+   @Inject
+   @MemberRepository
+   private EntityManager em;
+
+   @GET
+   public List<Member> listAllMembers()
+   {
+      // Use @SupressWarnings to force IDE to ignore warnings about "genericizing" the results of this query
+      @SuppressWarnings("unchecked")
+      // We recommend centralizing inline queries such as this one into @NamedQuery annotations on the @Entity class
+      // as described in the named query blueprint: https://blueprints.dev.java.net/bpcatalog/ee5/persistence/namedquery.html
+      final List<Member> results = em.createQuery("select m from Member m order by m.name").getResultList();
+      return results;
+   }
+
+   @GET
+   @Path("/{id:[1-9][0-9]*}")
+   public Member lookupMemberById(@PathParam("id") long id)
+   {
+      return em.find(Member.class, id);
+   }
+}

Deleted: archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MavenArtifactResolver.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MavenArtifactResolver.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MavenArtifactResolver.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,64 +0,0 @@
-package com.mycompany;
-
-import java.io.File;
-
-/**
- * A temporary resolver that converts a Maven artifact reference
- * into a {@link java.io.File} object.
- * 
- * <p>This approach is an interim solution for Maven projects
- * until the open feature request to add formally add artifacts
- * to a test (<a href="https://jira.jboss.org/browse/ARQ-66">ARQ-66</a>) is implementated.</p>
- *
- * <p>The testCompile goal will resolve any test dependencies and
- * put them in your local Maven repository. By the time the test
- * executes, you can be sure that the JAR files you need will be
- * in your local repository.</p>
- *
- * <p>Example usage:</p>
- * 
- * <pre>
- * WebArchive war = ShrinkWrap.create("test.war", WebArchive.class)
- *     .addLibrary(MavenArtifactResolver.resolve("commons-lang:commons-lang:2.5"));
- * </pre>
-
- * <p>If you are using an alternate local Maven repository, you need to pass it
- * to the Maven surefire plugin using the following stanza in the plugin
- * configuration element:</p>
- *
- * <pre>
- * &lt;systemProperties&gt;
- *    &lt;property&gt;
- *       &lt;name&gt;maven.repo.local&lt;/name&gt;
- *       &lt;value&gt;${maven.repo.local}&lt;/value&gt;
- *    &lt;/property&gt;
- * &lt;/systemProperties&gt;
- * </pre>
- *
- * <p>Another approach to pull in a library is to add packages recursively from the
- * root library package.</p>
- *
- * @author Dan Allen
- */
-public class MavenArtifactResolver
-{
-   private static final String LOCAL_MAVEN_REPO =
-         System.getProperty("maven.repo.local") != null ? System.getProperty("maven.repo.local") :
-               (System.getProperty("user.home") + File.separatorChar +
-               ".m2" + File.separatorChar + "repository");
-
-   public static File resolve(String groupId, String artifactId, String version)
-   {
-      return new File(LOCAL_MAVEN_REPO + File.separatorChar +
-            groupId.replace(".", File.separator) + File.separatorChar +
-            artifactId + File.separatorChar +
-            version + File.separatorChar +
-            artifactId + "-" + version + ".jar");
-   }
-
-   public static File resolve(String qualifiedArtifactId)
-   {
-      String[] segments = qualifiedArtifactId.split(":");
-      return resolve(segments[0], segments[1], segments[2]);
-   }
-}

Deleted: archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MemberRegistrationTest.java
===================================================================
--- archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MemberRegistrationTest.java	2010-08-20 21:31:58 UTC (rev 7001)
+++ archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MemberRegistrationTest.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -1,55 +0,0 @@
-package com.mycompany;
-
-import javax.enterprise.inject.Produces;
-import javax.enterprise.inject.spi.InjectionPoint;
-import static org.junit.Assert.*;
-import javax.inject.Inject;
-import org.jboss.arquillian.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
-import org.jboss.shrinkwrap.api.asset.ByteArrayAsset;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
- at RunWith(Arquillian.class)
-public class MemberRegistrationTest
-{
-   @Deployment
-   public static Archive<?> createTestArchive() {
-      return ShrinkWrap.create(WebArchive.class, "test.war")
-         .addClasses(Member.class, MemberRegistration.class, MemberRepository.class, MemberRepositoryProducer.class)
-         // SLF4J libraries required only if not available on the container classpath
-//         .addLibraries(
-//               MavenArtifactResolver.resolve("org.slf4j:slf4j-api:1.5.10"),
-//               MavenArtifactResolver.resolve("org.slf4j:slf4j-jdk14:1.5.10")
-//         )
-         .addWebResource("test-persistence.xml", "classes/META-INF/persistence.xml")
-         .addWebResource(new ByteArrayAsset(new byte[0]), "beans.xml");
-   }
-
-   @Inject MemberRegistration memberRegistration;
-
-   @Inject Logger log;
-
-   @Test
-   public void testRegister() throws Exception
-   {
-      Member newMember = memberRegistration.getNewMember();
-      newMember.setName("Jane Doe");
-      newMember.setEmail("jane at mailinator.com");
-      newMember.setPhoneNumber("2125551234");
-      memberRegistration.register();
-      assertNotNull(newMember.getId());
-      log.info(newMember.getName() + " was persisted with id " + newMember.getId());
-   }
-
-   @Produces
-   public Logger produceLog(InjectionPoint injectionPoint)
-   {
-      return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass());
-   }
-}

Copied: archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/MavenArtifactResolver.java (from rev 6882, archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MavenArtifactResolver.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/MavenArtifactResolver.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/MavenArtifactResolver.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,64 @@
+package com.mycompany.test;
+
+import java.io.File;
+
+/**
+ * A temporary resolver that converts a Maven artifact reference
+ * into a {@link java.io.File} object.
+ * 
+ * <p>This approach is an interim solution for Maven projects
+ * until the open feature request to add formally add artifacts
+ * to a test (<a href="https://jira.jboss.org/browse/ARQ-66">ARQ-66</a>) is implementated.</p>
+ *
+ * <p>The testCompile goal will resolve any test dependencies and
+ * put them in your local Maven repository. By the time the test
+ * executes, you can be sure that the JAR files you need will be
+ * in your local repository.</p>
+ *
+ * <p>Example usage:</p>
+ * 
+ * <pre>
+ * WebArchive war = ShrinkWrap.create("test.war", WebArchive.class)
+ *     .addLibrary(MavenArtifactResolver.resolve("commons-lang:commons-lang:2.5"));
+ * </pre>
+
+ * <p>If you are using an alternate local Maven repository, you need to pass it
+ * to the Maven surefire plugin using the following stanza in the plugin
+ * configuration element:</p>
+ *
+ * <pre>
+ * &lt;systemProperties&gt;
+ *    &lt;property&gt;
+ *       &lt;name&gt;maven.repo.local&lt;/name&gt;
+ *       &lt;value&gt;${maven.repo.local}&lt;/value&gt;
+ *    &lt;/property&gt;
+ * &lt;/systemProperties&gt;
+ * </pre>
+ *
+ * <p>Another approach to pull in a library is to add packages recursively from the
+ * root library package.</p>
+ *
+ * @author Dan Allen
+ */
+public class MavenArtifactResolver
+{
+   private static final String LOCAL_MAVEN_REPO =
+         System.getProperty("maven.repo.local") != null ? System.getProperty("maven.repo.local") :
+               (System.getProperty("user.home") + File.separatorChar +
+               ".m2" + File.separatorChar + "repository");
+
+   public static File resolve(String groupId, String artifactId, String version)
+   {
+      return new File(LOCAL_MAVEN_REPO + File.separatorChar +
+            groupId.replace(".", File.separator) + File.separatorChar +
+            artifactId + File.separatorChar +
+            version + File.separatorChar +
+            artifactId + "-" + version + ".jar");
+   }
+
+   public static File resolve(String qualifiedArtifactId)
+   {
+      String[] segments = qualifiedArtifactId.split(":");
+      return resolve(segments[0], segments[1], segments[2]);
+   }
+}

Copied: archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/MemberRegistrationTest.java (from rev 6883, archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/MemberRegistrationTest.java)
===================================================================
--- archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/MemberRegistrationTest.java	                        (rev 0)
+++ archetypes/javaee6-webapp/trunk/src/test/java/com/mycompany/test/MemberRegistrationTest.java	2010-08-20 21:35:21 UTC (rev 7002)
@@ -0,0 +1,59 @@
+package com.mycompany.test;
+
+import com.mycompany.controller.MemberRegistration;
+import com.mycompany.data.MemberRepository;
+import com.mycompany.data.MemberRepositoryProducer;
+import com.mycompany.model.Member;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+import static org.junit.Assert.*;
+import javax.inject.Inject;
+import org.jboss.arquillian.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.api.asset.ByteArrayAsset;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+ at RunWith(Arquillian.class)
+public class MemberRegistrationTest
+{
+   @Deployment
+   public static Archive<?> createTestArchive() {
+      return ShrinkWrap.create(WebArchive.class, "test.war")
+         .addClasses(Member.class, MemberRegistration.class, MemberRepository.class, MemberRepositoryProducer.class)
+         // SLF4J libraries required only if not available on the container classpath
+//         .addLibraries(
+//               MavenArtifactResolver.resolve("org.slf4j:slf4j-api:1.5.10"),
+//               MavenArtifactResolver.resolve("org.slf4j:slf4j-jdk14:1.5.10")
+//         )
+         .addWebResource("test-persistence.xml", "classes/META-INF/persistence.xml")
+         .addWebResource(new ByteArrayAsset(new byte[0]), "beans.xml");
+   }
+
+   @Inject MemberRegistration memberRegistration;
+
+   @Inject Logger log;
+
+   @Test
+   public void testRegister() throws Exception
+   {
+      Member newMember = memberRegistration.getNewMember();
+      newMember.setName("Jane Doe");
+      newMember.setEmail("jane at mailinator.com");
+      newMember.setPhoneNumber("2125551234");
+      memberRegistration.register();
+      assertNotNull(newMember.getId());
+      log.info(newMember.getName() + " was persisted with id " + newMember.getId());
+   }
+
+   @Produces
+   public Logger produceLog(InjectionPoint injectionPoint)
+   {
+      return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass());
+   }
+}



More information about the weld-commits mailing list