You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by hu...@apache.org on 2007/11/25 22:04:56 UTC
svn commit: r598053 - in /struts/sandbox/trunk/jpa-mailreader/src:
main/java/ main/java/action/ main/java/action/user/
main/java/action/user/subscription/ main/java/entity/
main/java/entity/protocol/ main/java/entity/subscription/
main/java/entity/user...
Author: husted
Date: Sun Nov 25 13:04:53 2007
New Revision: 598053
URL: http://svn.apache.org/viewvc?rev=598053&view=rev
Log:
WW-1399 Start migration to "session per request" pattern. Implement additional tests, modeled on EntityInterceptor. EntityInterceptor itself is untested.
Added:
struts/sandbox/trunk/jpa-mailreader/src/main/java/commons-logging.properties
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java
struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java
- copied, changed from r597831, struts/sandbox/trunk/jpa-mailreader/src/test/java/action/RetainTest.java
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityManagerHelperTest.java
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntitySuperclassTest.java
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityTestCase.java
Removed:
struts/sandbox/trunk/jpa-mailreader/src/test/java/action/RetainTest.java
Modified:
struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Index.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Delete.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Index.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Update.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerSuperclass.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntitySuperclass.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManager.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManagerInterface.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManager.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManagerInterface.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManager.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManagerInterface.java
struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/user/UserManagerTest.java
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java Sun Nov 25 13:04:53 2007
@@ -25,6 +25,7 @@
import com.opensymphony.xwork2.conversion.annotations.Conversion;
import com.opensymphony.xwork2.conversion.annotations.ConversionType;
import com.opensymphony.xwork2.conversion.annotations.TypeConversion;
+import org.apache.struts2.config.ParentPackage;
/**
* <p>
@@ -40,6 +41,7 @@
@TypeConversion(type = ConversionType.APPLICATION, key = "entity.subscription.Subscription", converter = "entity.subscription.SubscriptionTypeConverter"),
@TypeConversion(type = ConversionType.APPLICATION, key = "entity.user.User", converter = "entity.user.UserTypeConverter") })
@SuppressWarnings("unchecked")
+@ParentPackage("entity-default")
public class Index extends ActionSupport implements SessionAware {
// ---- STATICS ----
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Index.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Index.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Index.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Index.java Sun Nov 25 13:04:53 2007
@@ -108,7 +108,8 @@
protected void update() throws Exception {
User result = getUser();
- if (manager.hasId(result)) {
+ boolean exists = (null != manager.find(result.getId()));
+ if (exists) {
manager.update(result);
} else {
addActionError(getText(ERROR_CREDENTIALS_MISMATCH));
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Delete.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Delete.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Delete.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Delete.java Sun Nov 25 13:04:53 2007
@@ -22,7 +22,7 @@
public String input() throws Exception {
setInput(DELETE);
- return manager.hasId(getSubscription()) ? super.input() : ERROR;
+ return super.input();
}
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Index.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Index.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Index.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Index.java Sun Nov 25 13:04:53 2007
@@ -116,7 +116,8 @@
protected void update() throws Exception {
Subscription result = getSubscription();
- if (manager.hasId(result)) {
+ boolean exists = (null != manager.find(result.getId()));
+ if (exists) {
manager.update(result);
} else {
addActionError(getText(ERROR_CREDENTIALS_MISMATCH));
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Update.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Update.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Update.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/subscription/Update.java Sun Nov 25 13:04:53 2007
@@ -22,7 +22,7 @@
public String input() throws Exception {
setInput(UPDATE);
- return manager.hasId(getSubscription()) ? super.input() : ERROR;
+ return super.input();
}
}
Added: struts/sandbox/trunk/jpa-mailreader/src/main/java/commons-logging.properties
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/commons-logging.properties?rev=598053&view=auto
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/commons-logging.properties (added)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/commons-logging.properties Sun Nov 25 13:04:53 2007
@@ -0,0 +1 @@
+org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
Added: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java?rev=598053&view=auto
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java (added)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java Sun Nov 25 13:04:53 2007
@@ -0,0 +1,7 @@
+package entity;
+
+import javax.persistence.EntityManager;
+
+public interface EntityAware {
+ void setManager(EntityManager value);
+}
Added: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java?rev=598053&view=auto
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java (added)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java Sun Nov 25 13:04:53 2007
@@ -0,0 +1,45 @@
+package entity;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceException;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
+
+public class EntityInterceptor extends AbstractInterceptor {
+
+ private String entityInvoke(ActionInvocation invocation) throws Exception {
+ String result = null;
+ EntityAware myAction;
+ EntityManager manager = EntityManagerHelper.getEntityManager();
+ EntityManagerHelper.beginTransaction();
+ myAction = (EntityAware) invocation.getAction();
+ myAction.setManager(manager);
+ try {
+ result = invocation.invoke();
+ EntityManagerHelper.commit();
+ } catch (PersistenceException e) {
+ EntityManagerHelper.logError("PersistenceException in Action: "
+ + myAction.toString(), e);
+ try {
+ EntityManagerHelper.rollback();
+ } catch (Throwable t) {
+ EntityManagerHelper.logError("Exception during rollback", t);
+ }
+ } finally {
+ EntityManagerHelper.closeEntityManager();
+ }
+ return result;
+ }
+
+ public String intercept(ActionInvocation invocation) throws Exception {
+ String result = null;
+ Object action = invocation.getAction();
+ boolean isEntityAware = (action instanceof EntityAware);
+ if (!isEntityAware) {
+ result = invocation.invoke();
+ } else {
+ result = entityInvoke(invocation);
+ }
+ return result;
+ }
+}
\ No newline at end of file
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java Sun Nov 25 13:04:53 2007
@@ -18,14 +18,14 @@
*/
package entity;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
/**
* <p>
* Provide access to JPA implementation using static methods.
@@ -37,13 +37,12 @@
private static final EntityManagerFactory emf;
private static final ThreadLocal<EntityManager> threadLocal;
- private static final Logger logger;
+ private static final Log logger;
static {
emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
threadLocal = new ThreadLocal<EntityManager>();
- logger = Logger.getLogger(PERSISTENCE_UNIT);
- logger.setLevel(Level.ALL);
+ logger = LogFactory.getLog(EntityManagerHelper.class);
}
public static EntityManager getEntityManager() {
@@ -70,20 +69,20 @@
getEntityManager().getTransaction().commit();
}
- public static void rollback() {
- getEntityManager().getTransaction().rollback();
- }
-
public static Query createQuery(String query) {
return getEntityManager().createQuery(query);
}
- public static void log(String info, Level level, Throwable ex) {
- logger.log(level, info, ex);
+ public static void flush() {
+ getEntityManager().flush();
+ }
+
+ public static void logError(String info, Throwable ex) {
+ logger.error(info, ex);
}
- public static void log(String info, Throwable ex) {
- logger.log(Level.INFO, info, ex);
+ public static void rollback() {
+ getEntityManager().getTransaction().rollback();
}
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerSuperclass.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerSuperclass.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerSuperclass.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerSuperclass.java Sun Nov 25 13:04:53 2007
@@ -19,85 +19,34 @@
package entity;
import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
-import java.util.UUID;
/**
* <p>
* Custom CRUD operations involving the <code>User</code> object.
* <p>
+ * <p>
+ * This implementation delegates transaction managemetn and exception handling
+ * to another component, such as an Interceptor or Filter, or the setUp and
+ * tearDown methods of a TestCase.
+ * </p>
*
*/
public class EntityManagerSuperclass {
- // --- STATICS ----
-
- /**
- * <p>
- * Error message to post when create fails.
- * </p>
- */
- public static final String CREATE_ERROR = "Exception in create()";
-
- /**
- * <p>
- * Error message to post when delete fails.
- * </p>
- */
- public static final String DELETE_ERROR = "Exception in delete()";
-
- /**
- * <p>
- * Error message to post when update fails.
- * </p>
- */
- public static final String UPDATE_ERROR = "Exception in update()";
-
- // --- METHODS ----
-
- public Object createEntity(EntitySuperclass value) {
+ public void createEntity(EntitySuperclass value)
+ throws PersistenceException {
EntityManager manager = EntityManagerHelper.getEntityManager();
- EntityTransaction transaction = null;
- try {
- transaction = manager.getTransaction();
- transaction.begin();
- String id = UUID.randomUUID().toString();
- value.setId(id);
- manager.persist(value);
- transaction.commit();
- } catch (Exception e) {
- EntityManagerHelper.log(CREATE_ERROR, e);
- throw new PersistenceException(e);
- } finally {
- if ((transaction != null) && transaction.isActive()) {
- transaction.rollback();
- }
- manager.close();
- }
- return value;
+ manager.persist(value);
}
- public void delete(Object value) throws Exception {
+ public void deleteEntity(EntitySuperclass value)
+ throws PersistenceException {
EntityManager manager = EntityManagerHelper.getEntityManager();
- EntityTransaction transaction = null;
- try {
- transaction = manager.getTransaction();
- transaction.begin();
- manager.merge(value);
- manager.remove(value);
- transaction.commit();
- } catch (Exception e) {
- EntityManagerHelper.log(DELETE_ERROR, e);
- throw new PersistenceException(e);
- } finally {
- if ((transaction != null) && transaction.isActive()) {
- transaction.rollback();
- }
- manager.close();
- }
+ manager.merge(value);
+ manager.remove(value);
}
@SuppressWarnings("unchecked")
@@ -105,60 +54,29 @@
EntityManager manager = EntityManagerHelper.getEntityManager();
Object result = null;
try {
- result = manager.find(entity, id);
- return result;
+ manager.find(entity, id);
} catch (NoResultException e) {
- return null;
- } finally {
- manager.close();
+ result = null;
}
+ return result;
}
public Object findEntityByName(String namedQuery, String parameterName,
String value) {
EntityManager manager = EntityManagerHelper.getEntityManager();
Object result = null;
+ Query query = manager.createNamedQuery(namedQuery);
+ query.setParameter(parameterName, value);
try {
- Query query = manager.createNamedQuery(namedQuery);
- query.setParameter(parameterName, value);
result = query.getSingleResult();
- return result;
} catch (NoResultException e) {
- return null;
- } finally {
- manager.close();
+ result = null;
}
- }
-
- public boolean entityHasId(EntitySuperclass value) {
- if (value == null)
- return false;
- String id = value.getId();
- boolean result = ((id != null) && (id.length() > 0));
return result;
}
- /*
- * (non-Javadoc)
- *
- * @see entity.IUserManager#update(entity.User)
- */
- public void updateEntity(Object value) throws Exception {
+ public void updateEntity(Object value) throws PersistenceException {
EntityManager manager = EntityManagerHelper.getEntityManager();
- EntityTransaction transaction = null;
- try {
- transaction = manager.getTransaction();
- transaction.begin();
- manager.merge(value);
- transaction.commit();
- } catch (Exception e) {
- EntityManagerHelper.log(UPDATE_ERROR, e);
- throw new PersistenceException(e);
- } finally {
- if ((transaction != null) && transaction.isActive()) {
- transaction.rollback();
- }
- manager.close();
- }
+ manager.merge(value);
}
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntitySuperclass.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntitySuperclass.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntitySuperclass.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntitySuperclass.java Sun Nov 25 13:04:53 2007
@@ -28,8 +28,6 @@
import javax.persistence.Transient;
import javax.persistence.Version;
-import entity.user.User;
-
@MappedSuperclass
public class EntitySuperclass implements Serializable {
@@ -61,7 +59,7 @@
public boolean equals(Object obj) {
if ((obj instanceof EntitySuperclass) && (getId() != null)) {
- return getId().equals(((User) obj).getId());
+ return getId().equals(((EntitySuperclass) obj).getId());
} else {
return false;
}
@@ -78,6 +76,11 @@
}
public String toString() {
- return "entity.EntitySuperclass[id=" + getId() + "']";
+ return "entity.EntitySuperclass[id=" + getId() + "]";
+ }
+
+ public EntitySuperclass() {
+ String id = UUID.randomUUID().toString();
+ setId(id);
}
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java Sun Nov 25 13:04:53 2007
@@ -30,8 +30,9 @@
* Describes an email server protocol, such as POP or SMTP.
* </p>
* <p>
- * JPA entity class for the <code>APP_PROTOCOL</code> table. This class is
- * kept simple to allow for easier regeneration.
+ * JPA entity class for the <code>APP_PROTOCOL</code> table. This class
+ * contains sufficient detail to regenerate the database schema (top-down
+ * development).
* </p>
*/
@Entity(name = "APP_PROTOCOL")
@@ -70,6 +71,12 @@
* </p>
*/
public Protocol() {
+ super();
+ }
+
+ public Protocol(String description) {
+ super();
+ setDescription(description);
}
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManager.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManager.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManager.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManager.java Sun Nov 25 13:04:53 2007
@@ -36,41 +36,22 @@
public class ProtocolManager extends EntityManagerSuperclass implements
ProtocolManagerInterface {
- /*
- * (non-Javadoc)
- *
- * @see entity.IProtocolManager#find(java.lang.String)
- */
public Protocol find(String value) {
Protocol result = (Protocol) findEntity(Protocol.class, value);
return result;
}
- /*
- * (non-Javadoc)
- *
- * @see entity.IProtocolManager#findAll()
- */
@SuppressWarnings("unchecked")
public List<Protocol> findAll() {
- EntityManager em = EntityManagerHelper.getEntityManager();
- try {
- List<Protocol> protocols = em.createNamedQuery(Protocol.FIND_ALL)
- .getResultList();
- if (protocols == null) {
- protocols = new ArrayList<Protocol>();
- }
- return protocols;
- } finally {
- em.close();
+ EntityManager manager = EntityManagerHelper.getEntityManager();
+ List<Protocol> protocols = manager.createNamedQuery(Protocol.FIND_ALL)
+ .getResultList();
+ if (protocols == null) {
+ protocols = new ArrayList<Protocol>();
}
+ return protocols;
}
- /*
- * (non-Javadoc)
- *
- * @see entity.IProtocolManager#findAllAsMap()
- */
public Map<String, String> findAllAsMap() {
List<Protocol> items = findAll();
Map<String, String> map = new LinkedHashMap<String, String>(items
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManagerInterface.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManagerInterface.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManagerInterface.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolManagerInterface.java Sun Nov 25 13:04:53 2007
@@ -32,7 +32,7 @@
* @param id
* Protocol id to look up
*/
- public abstract Protocol find(String value);
+ Protocol find(String value);
/**
* <p>
@@ -41,7 +41,7 @@
* will be returned.
* </p>
*/
- public abstract List<Protocol> findAll();
+ List<Protocol> findAll();
/**
* <p>
@@ -50,6 +50,6 @@
* returned.
* </p>
*/
- public abstract Map<String, String> findAllAsMap();
+ Map<String, String> findAllAsMap();
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java Sun Nov 25 13:04:53 2007
@@ -37,9 +37,9 @@
* </p>
*
* <p>
- * JPA entity class for the <code>APP_SUBSCRIPTION</code> table. This class is
- * kept simple to allow for easier regeneration.
- * </p>
+ * JPA entity class for the <code>APP_SUBSCRIPTION</code> table. TThis class
+ * contains sufficient detail to regenerate the database schema (top-down
+ * development).
*/
@Entity(name = "APP_SUBSCRIPTION")
@NamedQueries( {
@@ -98,7 +98,7 @@
@JoinColumn(name = "protocol_id")
@OneToOne
- private Protocol protocol_id;
+ private Protocol protocol;
@JoinColumn(name = "user_id", nullable = false)
@ManyToOne
@@ -134,11 +134,11 @@
}
public Protocol getProtocol() {
- return protocol_id;
+ return protocol;
}
public void setProtocol(Protocol value) {
- protocol_id = value;
+ protocol = value;
}
public User getUser() {
@@ -165,6 +165,25 @@
* </p>
*/
public Subscription() {
+ super();
+ }
+
+ /**
+ * <p>
+ * Instantiate a default <code>Subscription</code> object, and load
+ * values.
+ * </p>
+ *
+ */
+ public Subscription(String host, User user, String username,
+ String password, Protocol protocol, boolean autoConnect) {
+ super();
+ setHost(host);
+ setUser(user);
+ setUsername(username);
+ setPassword(password);
+ setProtocol(protocol);
+ setAutoConnect(autoConnect);
}
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManager.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManager.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManager.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManager.java Sun Nov 25 13:04:53 2007
@@ -19,9 +19,6 @@
package entity.subscription;
import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.persistence.PersistenceException;
-
import entity.EntityManagerHelper;
import entity.EntityManagerSuperclass;
@@ -34,80 +31,29 @@
public class SubscriptionManager extends EntityManagerSuperclass implements
SubscriptionManagerInterface {
- // ---- METHODS ----
-
- /*
- * (non-Javadoc)
- *
- * @see entity.ISubscriptionManager#create(entity.Subscription)
- */
- public Subscription create(Subscription value) {
- Subscription result = (Subscription) createEntity(value);
- return result;
+ public void create(Subscription value) {
+ createEntity(value);
}
- /*
- * (non-Javadoc)
- *
- * @see entity.ISubscriptionManager#delete(entity.Subscription)
- */
public void delete(Subscription value) throws Exception {
EntityManager manager = EntityManagerHelper.getEntityManager();
- EntityTransaction transaction = null;
- try {
- transaction = manager.getTransaction();
- transaction.begin();
- manager.merge(value);
- value.getUser().removeSubscription(value);
- manager.remove(value);
- transaction.commit();
- } catch (Exception e) {
- EntityManagerHelper.log(DELETE_ERROR, e);
- throw new PersistenceException(e);
- } finally {
- if ((transaction != null) && transaction.isActive()) {
- transaction.rollback();
- }
- manager.close();
- }
+ manager.merge(value);
+ value.getUser().removeSubscription(value);
+ manager.remove(value);
}
- /*
- * (non-Javadoc)
- *
- * @see entity.ISubscriptionManager#find(java.lang.String)
- */
public Subscription find(String value) {
Subscription result = (Subscription) findEntity(Subscription.class,
value);
return result;
}
- /*
- * (non-Javadoc)
- *
- * @see entity.ISubscriptionManager#findByName(java.lang.String)
- */
public Subscription findByName(String value) {
Subscription result = (Subscription) findEntityByName(
Subscription.FIND_BY_HOST, Subscription.HOST, value);
return result;
}
- /*
- * (non-Javadoc)
- *
- * @see entity.ISubscriptionManager#hasId(entity.Subscription)
- */
- public boolean hasId(Subscription value) {
- return entityHasId(value);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see entity.ISubscriptionManager#update(entity.Subscription)
- */
public void update(Subscription value) throws Exception {
updateEntity(value);
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManagerInterface.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManagerInterface.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManagerInterface.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionManagerInterface.java Sun Nov 25 13:04:53 2007
@@ -29,7 +29,7 @@
* @param value
* Subscription to insert
*/
- public abstract Subscription create(Subscription value);
+ void create(Subscription value);
/**
* <p>
@@ -40,7 +40,7 @@
* @param value
* Subscription instance to delete
*/
- public abstract void delete(Subscription value) throws Exception;
+ void delete(Subscription value) throws Exception;
/**
* <p>
@@ -51,7 +51,7 @@
* @param value
* Host to match
*/
- public abstract Subscription find(String value);
+ Subscription find(String value);
/**
* <p>
@@ -62,19 +62,7 @@
* @param id
* Subscription id to match
*/
- public abstract Subscription findByName(String value);
-
- /**
- * <p>
- * Determine if the <code>Subscription</code> object has been assigned an
- * ID value.
- * </p>
- *
- * @param value
- * Subscription object to examine
- * @return True if the Subscription object has an ID value
- */
- public abstract boolean hasId(Subscription value);
+ Subscription findByName(String value);
/**
* <p>
@@ -85,6 +73,6 @@
* @param user
* Copy of Subscription instance to match and update
*/
- public abstract void update(Subscription value) throws Exception;
+ void update(Subscription value) throws Exception;
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java Sun Nov 25 13:04:53 2007
@@ -20,6 +20,8 @@
import java.io.Serializable;
import java.util.List;
+import java.util.ArrayList;
+import java.sql.Timestamp;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -36,8 +38,8 @@
* Describes an account that maintains zero or more <code>Subscription</code>s.
* </p>
* <p>
- * JPA entity class for the <code>APP_USER</code> table. This class is kept
- * simple to allow for easier regeneration.
+ * JPA entity class for the <code>APP_USER</code> table. This class contains
+ * sufficient detail to regenerate the database schema (top-down development).
* </p>
*/
@Entity(name = "APP_USER")
@@ -174,6 +176,10 @@
*/
public void addSubscription(Subscription subscription) {
List<Subscription> subscriptions = getSubscriptions();
+ if (subscriptions == null) {
+ subscriptions = new ArrayList<Subscription>();
+ setSubscriptions(subscriptions);
+ }
if (!subscriptions.contains(subscription)) {
subscription.setUser(this);
subscriptions.add(subscription);
@@ -182,6 +188,23 @@
/**
* <p>
+ * Add the specified <code>Subscriptions</code> to the set of
+ * subscriptions associated with this <code>User</code>.
+ * </p>
+ * <p>
+ * A duplicate <code>Subscription</code> is not added but quietly ignored.
+ * </p>
+ */
+ public void addSubscriptions(List<Subscription> subscriptions) {
+ if (subscriptions == null)
+ return;
+ for (int i = 0; i < subscriptions.size(); i++) {
+ addSubscription(subscriptions.get(i));
+ }
+ }
+
+ /**
+ * <p>
* Remove the specified <code>Subscription</code> from the set of
* subscriptions associated with this <code>User</code>.
* </p>
@@ -202,6 +225,38 @@
* </p>
*/
public User() {
+ super();
+ }
+
+ /**
+ * <p>
+ * Instantiate a <code>User</code> object with a username and password.
+ * </p>
+ * <p>
+ * This constructor does not set the ID value.
+ * </p>
+ */
+ public User(String username, String password) {
+ super();
+ setUsername(username);
+ setPassword(password);
+ }
+
+ /**
+ * <p>
+ * Instantiate a <code>User</code> object, and load values.
+ * </p>
+ */
+ public User(String username, String password, String fullName,
+ String fromAddress, String replyToAddress, Timestamp lastUpdated,
+ String id) {
+ super();
+ setUsername(username);
+ setPassword(password);
+ setFullName(fullName);
+ setReplyToAddress(replyToAddress);
+ setLastUpdate(lastUpdated);
+ setId(id);
}
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManager.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManager.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManager.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManager.java Sun Nov 25 13:04:53 2007
@@ -18,6 +18,7 @@
*/
package entity.user;
+import javax.persistence.PersistenceException;
import entity.EntityManagerSuperclass;
/**
@@ -29,54 +30,26 @@
public class UserManager extends EntityManagerSuperclass implements
UserManagerInterface {
- // --- METHODS ----
+ public void create(User value) throws PersistenceException {
+ createEntity(value);
+ }
- /*
- * (non-Javadoc)
- *
- * @see entity.IUserManager#create(entity.User)
- */
- public User create(User value) {
- User result = (User) createEntity(value);
- return result;
+ public void delete(User value) throws PersistenceException {
+ deleteEntity(value);
}
- /*
- * (non-Javadoc)
- *
- * @see entity.IUserManager#find(java.lang.String)
- */
public User find(String value) {
User result = (User) findEntity(User.class, value);
return result;
}
- /*
- * (non-Javadoc)
- *
- * @see entity.IUserManager#findByName(java.lang.String)
- */
public User findByName(String value) {
User result = (User) findEntityByName(User.FIND_BY_NAME, User.NAME,
value);
return result;
}
- /*
- * (non-Javadoc)
- *
- * @see entity.IUserManager#hasId(entity.User)
- */
- public boolean hasId(User value) {
- return entityHasId(value);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see entity.IUserManager#update(entity.User)
- */
- public void update(User value) throws Exception {
+ public void update(User value) throws PersistenceException {
updateEntity(value);
}
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManagerInterface.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManagerInterface.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManagerInterface.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserManagerInterface.java Sun Nov 25 13:04:53 2007
@@ -18,6 +18,8 @@
*/
package entity.user;
+import javax.persistence.PersistenceException;
+
public interface UserManagerInterface {
/**
@@ -29,18 +31,18 @@
* @param value
* User instance to be added
*/
- public abstract User create(User value);
+ void create(User value) throws PersistenceException;
/**
* <p>
- * Retrieve the <code>User</code> matching the specified username, if any;
- * otherwise, return <code>null</code>.
+ * Delete the specified <code>User</code> (and any associated child
+ * <code>Subscription</code>s) into the persistent database.
* </p>
*
* @param value
- * Username to match
+ * User instance to be added
*/
- public abstract User find(String value);
+ void delete(User value) throws PersistenceException;
/**
* <p>
@@ -51,18 +53,18 @@
* @param value
* Username to match
*/
- public abstract User findByName(String value);
+ User find(String value);
/**
* <p>
- * Determine if the <code>User</code> object has been assigned an ID
- * value.
+ * Retrieve the <code>User</code> matching the specified username, if any;
+ * otherwise, return <code>null</code>.
+ * </p>
*
* @param value
- * User object to examine
- * @return True if the User object has an ID value
+ * Username to match
*/
- public abstract boolean hasId(User value);
+ User findByName(String value);
/**
* <p>
@@ -73,6 +75,6 @@
* @param value
* Copy of User instance to match and update
*/
- public abstract void update(User value) throws Exception;
+ void update(User value) throws PersistenceException;
}
Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml Sun Nov 25 13:04:53 2007
@@ -14,4 +14,14 @@
<!-- include file="" / -->
<!-- Add packages here -->
+ <package name="entity-default" extends="struts-default">
+ <interceptors>
+ <interceptor name="entityInterceptor" class="entities.EntityInterceptor"/>
+ <interceptor-stack name="entityStack">
+ <interceptor-ref name="entityInterceptor"/>
+ <interceptor-ref name="defaultStack"/>
+ </interceptor-stack>
+ </interceptors>
+ <default-interceptor-ref name="entityStack"/>
+ </package>
</struts>
Copied: struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java (from r597831, struts/sandbox/trunk/jpa-mailreader/src/test/java/action/RetainTest.java)
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java?p2=struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java&p1=struts/sandbox/trunk/jpa-mailreader/src/test/java/action/RetainTest.java&r1=597831&r2=598053&rev=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/test/java/action/RetainTest.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java Sun Nov 25 13:04:53 2007
@@ -32,7 +32,7 @@
import junit.framework.TestCase;
-public class RetainTest extends TestCase {
+public class BootstrapDataTest extends TestCase {
public void setUp() throws Exception {
super.setUp();
@@ -40,6 +40,10 @@
private String getUUID() {
return UUID.randomUUID().toString();
+ }
+
+ public void testTrue() throws Exception {
+ assertTrue(true);
}
@SuppressWarnings("unchecked")
Added: struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityManagerHelperTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityManagerHelperTest.java?rev=598053&view=auto
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityManagerHelperTest.java (added)
+++ struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityManagerHelperTest.java Sun Nov 25 13:04:53 2007
@@ -0,0 +1,15 @@
+package entity;
+
+import javax.persistence.EntityManager;
+import junit.framework.TestCase;
+
+public class EntityManagerHelperTest extends TestCase {
+
+ public void testGetEntityManager() {
+ EntityManager manager = EntityManagerHelper.getEntityManager();
+ assertNotNull(manager);
+ EntityManager manager2 = EntityManagerHelper.getEntityManager();
+ assertEquals(manager, manager2);
+ }
+
+}
Added: struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntitySuperclassTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntitySuperclassTest.java?rev=598053&view=auto
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntitySuperclassTest.java (added)
+++ struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntitySuperclassTest.java Sun Nov 25 13:04:53 2007
@@ -0,0 +1,54 @@
+package entity;
+
+import junit.framework.TestCase;
+
+/**
+ * <p>
+ * Exercise base <code>EntitySuperclass</p> method to test implementation.
+ * </p>
+ *
+ */
+public class EntitySuperclassTest extends TestCase {
+
+ EntitySuperclass entity;
+ EntitySuperclass entity2;
+
+ public void setUp() throws Exception {
+ super.setUp();
+ entity = new EntitySuperclass();
+ entity2 = new EntitySuperclass();
+ }
+
+ public void testId() {
+ String id = entity.getId();
+ assertNotNull(id);
+ assertTrue(id.length() > 0);
+ assertFalse(id.equals(entity2.getId()));
+ }
+
+ public void testEquals() {
+ boolean equalsSelf = entity.equals(entity);
+ assertTrue(equalsSelf);
+ }
+
+ public void testEqualsNot() {
+ boolean equalsNot = entity.equals(entity2);
+ assertFalse(equalsNot);
+ }
+
+ public void testHashcode() {
+ int hashcode = entity.hashCode();
+ int hashcode2 = entity2.hashCode();
+ boolean test = hashcode != hashcode2;
+ assertTrue("Expected different hashcodes", test);
+ }
+
+ public void testToString() {
+ EntitySuperclass entity3 = new EntitySuperclass();
+ entity3.setId("55ba338a-97fa-44ce-bdad-80236d9404d0");
+ String value = entity3.toString();
+ String TO_STRING = "entity.EntitySuperclass[id=55ba338a-97fa-44ce-bdad-80236d9404d0]";
+ assertEquals(TO_STRING, value);
+ }
+
+}
Added: struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityTestCase.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityTestCase.java?rev=598053&view=auto
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityTestCase.java (added)
+++ struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/EntityTestCase.java Sun Nov 25 13:04:53 2007
@@ -0,0 +1,27 @@
+package entity;
+
+import javax.persistence.EntityManager;
+
+import junit.framework.TestCase;
+
+public class EntityTestCase extends TestCase {
+
+ protected EntityManager manager;
+
+ public void setUp() throws Exception {
+ super.setUp();
+ manager = EntityManagerHelper.getEntityManager();
+ EntityManagerHelper.beginTransaction();
+ }
+
+ public void tearDown() throws Exception {
+ super.tearDown();
+ EntityManagerHelper.commit();
+ EntityManagerHelper.closeEntityManager();
+ }
+
+ public void testTrue() throws Exception {
+ assertTrue(true);
+ }
+
+}
Modified: struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/user/UserManagerTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/user/UserManagerTest.java?rev=598053&r1=598052&r2=598053&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/user/UserManagerTest.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/user/UserManagerTest.java Sun Nov 25 13:04:53 2007
@@ -1,34 +1,85 @@
package entity.user;
-import junit.framework.TestCase;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Random;
-public class UserManagerTest extends TestCase {
+import entity.EntityTestCase;
+import entity.protocol.Protocol;
+import entity.protocol.ProtocolManager;
+import entity.protocol.ProtocolManagerInterface;
+import entity.subscription.Subscription;
+
+public class UserManagerTest extends EntityTestCase {
UserManagerInterface manager;
+ Random generator;
String base;
+ private String nextBase() {
+ int r = generator.nextInt();
+ return String.valueOf(r);
+ }
+
public void setUp() throws Exception {
super.setUp();
manager = new UserManager();
- Random generator = new Random();
- int r = generator.nextInt();
- base = String.valueOf(r);
+ generator = new Random();
+ base = nextBase();
}
private boolean isNotEmpty(String value) {
return (value != null) && (value.length() > 0);
}
+ private User newUser() {
+ return new User("user_" + base, "pass_" + base);
+ }
+
public void testCreate() throws Exception {
- User user = new User();
+ User user = newUser();
String before = user.getId();
- assertFalse("User ID not empty on New", isNotEmpty(before));
+ assertTrue("ID not assigned on New", isNotEmpty(before));
+ manager.create(user);
+ String after = user.getId();
+ assertTrue("Initial ID changed on Create", before.equals(after));
+ }
+
+ private List<Subscription> getSubscriptions(User user) {
+ ProtocolManagerInterface protocolManager = new ProtocolManager();
+ boolean autoConnect = false;
+ List<Protocol> protocols = protocolManager.findAll();
+ int protocolMax = protocols.size();
+ List<Subscription> subscriptions = new ArrayList<Subscription>();
+
+ for (int i = 0; i < 3; i++) {
+ String base = String.valueOf(i + 1);
+ autoConnect = !autoConnect;
+ int protocolIndex = (i % protocolMax);
+ Subscription sub = new Subscription("host_" + base, user, "user_"
+ + base, "pass_" + base, protocols.get(protocolIndex),
+ autoConnect);
+ subscriptions.add(sub);
+ }
+ return subscriptions;
+ }
+
+ public void testCreateWithSubscriptions() {
+ User user = newUser();
+ manager.create(user);
+ List<Subscription> subscriptions = getSubscriptions(user);
+ user.addSubscriptions(subscriptions);
+ manager.update(user);
+ assertTrue("Expected ID", user.getId() != null);
+ assertTrue(user.getSubscriptions() != null);
+ }
+
+ public void testCreateDelete() throws Exception {
+ User user = new User();
user.setUsername("user_" + base);
user.setPassword("pass_" + base);
manager.create(user);
- String after = user.getId();
- assertTrue("User ID not assigned on Create", isNotEmpty(after));
+ manager.delete(user);
}
}