[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