[jboss-cvs] JBossAS SVN: r105267 - in projects/ejb-book/trunk/chxx-employeeregistry/src: main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed May 26 14:11:23 EDT 2010


Author: ALRubinger
Date: 2010-05-26 14:11:23 -0400 (Wed, 26 May 2010)
New Revision: 105267

Added:
   projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/
   projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/EntityListenerEmployee.java
   projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/EventTracker.java
Modified:
   projects/ejb-book/trunk/chxx-employeeregistry/src/test/java/org/jboss/ejb3/examples/employeeregistry/EmployeeIntegrationTest.java
Log:
[EJBBOOK-27] Add JPA Entity Listeners example

Added: projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/EntityListenerEmployee.java
===================================================================
--- projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/EntityListenerEmployee.java	                        (rev 0)
+++ projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/EntityListenerEmployee.java	2010-05-26 18:11:23 UTC (rev 105267)
@@ -0,0 +1,176 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+  *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.examples.employeeregistry.chyy.listener;
+
+import java.util.logging.Logger;
+
+import javax.persistence.Entity;
+import javax.persistence.PostLoad;
+import javax.persistence.PostPersist;
+import javax.persistence.PostRemove;
+import javax.persistence.PostUpdate;
+import javax.persistence.PrePersist;
+import javax.persistence.PreRemove;
+import javax.persistence.PreUpdate;
+
+import org.jboss.ejb3.examples.testsupport.entity.AutogenIdentityBase;
+
+/**
+ * Represents an Employee which is able to receive JPA
+ * events.
+ *
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+ at Entity
+public class EntityListenerEmployee extends AutogenIdentityBase
+{
+
+   //-------------------------------------------------------------------------------------||
+   // Class Members ----------------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /**
+    * Logger
+    */
+   private static final Logger log = Logger.getLogger(EntityListenerEmployee.class.getName());
+
+   //-------------------------------------------------------------------------------------||
+   // Instance Members -------------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /**
+    * Name of the employee
+    */
+   private String name;
+
+   //-------------------------------------------------------------------------------------||
+   // Constructor ------------------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /**
+    * No-arg constructor, required by JPA
+    */
+   public EntityListenerEmployee()
+   {
+
+   }
+
+   //-------------------------------------------------------------------------------------||
+   // Accessors / Mutators ---------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /**
+    * @return the name
+    */
+   public String getName()
+   {
+      return name;
+   }
+
+   /**
+    * @param name the name to set
+    */
+   public void setName(final String name)
+   {
+      this.name = name;
+   }
+
+   //-------------------------------------------------------------------------------------||
+   // Overridden Implementations ---------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /** 
+    * {@inheritDoc}
+    * @see java.lang.Object#toString()
+    */
+   @Override
+   public String toString()
+   {
+      return EntityListenerEmployee.class.getSimpleName() + " [name=" + name + ", getId()=" + getId() + "]";
+   }
+
+   //-------------------------------------------------------------------------------------||
+   // Event Listeners --------------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /*
+    * Event Listeners; fired by JPA and track state in the EventTracker
+    */
+
+   @PrePersist
+   @SuppressWarnings("unused")
+   private void prePersist()
+   {
+      EventTracker.prePersist = true;
+      log.info("prePersist: " + this);
+   }
+
+   @PostPersist
+   @SuppressWarnings("unused")
+   private void postPersist()
+   {
+      EventTracker.postPersist = true;
+      log.info("postPersist: " + this);
+   }
+
+   @PostLoad
+   @SuppressWarnings("unused")
+   private void postLoad()
+   {
+      EventTracker.postLoad = true;
+      log.info("postLoad: " + this);
+   }
+
+   @PreUpdate
+   @SuppressWarnings("unused")
+   private void preUpdate()
+   {
+      EventTracker.preUpdate = true;
+      log.info("preUpdate: " + this);
+   }
+
+   @PostUpdate
+   @SuppressWarnings("unused")
+   private void postUpdate()
+   {
+      EventTracker.postUpdate = true;
+      log.info("postUpdate: " + this);
+   }
+
+   @PreRemove
+   @SuppressWarnings("unused")
+   private void preRemove()
+   {
+      EventTracker.preRemove = true;
+      log.info("preRemove: " + this);
+   }
+
+   @PostRemove
+   @SuppressWarnings("unused")
+   private void postRemove()
+   {
+      EventTracker.postRemove = true;
+      log.info("postRemove: " + this);
+   }
+
+}

Added: projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/EventTracker.java
===================================================================
--- projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/EventTracker.java	                        (rev 0)
+++ projects/ejb-book/trunk/chxx-employeeregistry/src/main/java/org/jboss/ejb3/examples/employeeregistry/chyy/listener/EventTracker.java	2010-05-26 18:11:23 UTC (rev 105267)
@@ -0,0 +1,72 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+  *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.examples.employeeregistry.chyy.listener;
+
+/**
+ * Tracks events fired by the {@link EntityListenerEmployee}
+ *
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+public class EventTracker
+{
+
+   //-------------------------------------------------------------------------------------||
+   // Class Members ----------------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /*
+    * Flags denoting whether an event was fired
+    */
+
+   public static boolean prePersist;
+
+   public static boolean postPersist;
+
+   public static boolean postLoad;
+
+   public static boolean preUpdate;
+
+   public static boolean postUpdate;
+
+   public static boolean preRemove;
+
+   public static boolean postRemove;
+
+   //-------------------------------------------------------------------------------------||
+   // Functional Methods -----------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /**
+    * Resets all events to false
+    */
+   public static void reset()
+   {
+      prePersist = false;
+      postPersist = false;
+      postLoad = false;
+      preUpdate = false;
+      postUpdate = false;
+      preRemove = false;
+      postRemove = false;
+   }
+}

Modified: projects/ejb-book/trunk/chxx-employeeregistry/src/test/java/org/jboss/ejb3/examples/employeeregistry/EmployeeIntegrationTest.java
===================================================================
--- projects/ejb-book/trunk/chxx-employeeregistry/src/test/java/org/jboss/ejb3/examples/employeeregistry/EmployeeIntegrationTest.java	2010-05-26 16:50:59 UTC (rev 105266)
+++ projects/ejb-book/trunk/chxx-employeeregistry/src/test/java/org/jboss/ejb3/examples/employeeregistry/EmployeeIntegrationTest.java	2010-05-26 18:11:23 UTC (rev 105267)
@@ -47,6 +47,8 @@
 import org.jboss.ejb3.examples.employeeregistry.chxx.relationships.PhoneType;
 import org.jboss.ejb3.examples.employeeregistry.chxx.relationships.Task;
 import org.jboss.ejb3.examples.employeeregistry.chxx.relationships.Team;
+import org.jboss.ejb3.examples.employeeregistry.chyy.listener.EntityListenerEmployee;
+import org.jboss.ejb3.examples.employeeregistry.chyy.listener.EventTracker;
 import org.jboss.ejb3.examples.employeeregistry.chyy.mapping.EmbeddedEmployeePK;
 import org.jboss.ejb3.examples.employeeregistry.chyy.mapping.EmployeeType;
 import org.jboss.ejb3.examples.employeeregistry.chyy.mapping.EmployeeWithEmbeddedPK;
@@ -106,7 +108,8 @@
       final JavaArchive archive = ShrinkWrap.create("entities.jar", JavaArchive.class).addPackages(false,
             SimpleEmployee.class.getPackage(), EmployeeWithMappedSuperClassId.class.getPackage(),
             Employee.class.getPackage(), TxWrappingLocalBusiness.class.getPackage(),
-            EntityManagerExposingBean.class.getPackage()).addManifestResource("persistence.xml");
+            EntityListenerEmployee.class.getPackage(), EntityManagerExposingBean.class.getPackage())
+            .addManifestResource("persistence.xml");
       log.info(archive.toString(true));
       return archive;
    }
@@ -177,6 +180,15 @@
    }
 
    /**
+    * Resets all entity callbacks
+    */
+   @Before
+   public void clearEntityCallbacks()
+   {
+      EventTracker.reset();
+   }
+
+   /**
     * Issues a deletion to remove all employees from persistent storage
     * @throws Throwable
     */
@@ -1280,6 +1292,68 @@
       }
    }
 
+   /**
+    * Ensures that JPA Entity Callbacks are received
+    * @throws Exception
+    */
+   @Test
+   public void entityCallbacks() throws Exception
+   {
+      // Precondition checks
+      final String preconditionMessage = "Test setup is in error";
+      Assert.assertFalse(preconditionMessage, EventTracker.postLoad);
+      Assert.assertFalse(preconditionMessage, EventTracker.postPersist);
+      Assert.assertFalse(preconditionMessage, EventTracker.postRemove);
+      Assert.assertFalse(preconditionMessage, EventTracker.postUpdate);
+      Assert.assertFalse(preconditionMessage, EventTracker.prePersist);
+      Assert.assertFalse(preconditionMessage, EventTracker.preRemove);
+      Assert.assertFalse(preconditionMessage, EventTracker.preUpdate);
+
+      // Create a new employee
+      final EntityListenerEmployee employee = new EntityListenerEmployee();
+
+      // Put through the full lifecycle
+      txWrapper.wrapInTx(new Callable<Void>()
+      {
+
+         @Override
+         public Void call() throws Exception
+         {
+            // Get EM
+            final EntityManager em = emHook.getEntityManager();
+
+            // Persist
+            em.persist(employee);
+
+            // Refresh
+            em.refresh(employee);
+
+            // Update
+            employee.setName("New Name");
+            em.flush();
+
+            // Lookup
+            em.find(EntityListenerEmployee.class, employee.getId());
+
+            // Remove
+            em.remove(employee);
+
+            // Return
+            return null;
+         }
+      });
+
+      // Assert events fired
+      final String postconditionMessage = "Missing event fired";
+      Assert.assertTrue(postconditionMessage, EventTracker.postLoad);
+      Assert.assertTrue(postconditionMessage, EventTracker.postPersist);
+      Assert.assertTrue(postconditionMessage, EventTracker.postRemove);
+      Assert.assertTrue(postconditionMessage, EventTracker.postUpdate);
+      Assert.assertTrue(postconditionMessage, EventTracker.prePersist);
+      Assert.assertTrue(postconditionMessage, EventTracker.preRemove);
+      Assert.assertTrue(postconditionMessage, EventTracker.preUpdate);
+   }
+
    //-------------------------------------------------------------------------------------||
    // Internal Helper Methods -----------------------------------------------------------||
    //-------------------------------------------------------------------------------------||




More information about the jboss-cvs-commits mailing list