You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2011/07/20 18:02:51 UTC

svn commit: r1148826 - in /incubator/rave/trunk/rave-portal/src: main/java/org/apache/rave/portal/repository/ main/java/org/apache/rave/portal/repository/impl/ test/java/org/apache/rave/portal/repository/

Author: mfranklin
Date: Wed Jul 20 16:02:49 2011
New Revision: 1148826

URL: http://svn.apache.org/viewvc?rev=1148826&view=rev
Log:
Made save, delete methods transactional on AbstractJpaRepository (Supports RAVE-27)

Modified:
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/Repository.java
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/AbstractJpaRepository.java
    incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/AbstractJpaRepositoryTest.java

Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/Repository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/Repository.java?rev=1148826&r1=1148825&r2=1148826&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/Repository.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/Repository.java Wed Jul 20 16:02:49 2011
@@ -24,6 +24,12 @@ package org.apache.rave.portal.repositor
  */
 public interface Repository<T> {
     /**
+     * Gets the type of the object served by the repository
+     * @return a {@link Class} representing the type of object
+     */
+    Class<T> getType();
+
+    /**
      * Gets the specified object from the persistence context by its id
      *
      * @param id the id of the object of type T to retrieve

Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/AbstractJpaRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/AbstractJpaRepository.java?rev=1148826&r1=1148825&r2=1148826&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/AbstractJpaRepository.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/repository/impl/AbstractJpaRepository.java Wed Jul 20 16:02:49 2011
@@ -21,6 +21,8 @@ package org.apache.rave.portal.repositor
 
 import org.apache.rave.portal.model.BasicEntity;
 import org.apache.rave.portal.repository.Repository;
+import org.springframework.core.type.ClassMetadata;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
@@ -42,17 +44,24 @@ public abstract class AbstractJpaReposit
     }
 
     @Override
-    public void delete(T item) {
-        manager.remove(item);
+    public Class<T> getType() {
+        return type;
     }
 
     @Override
+    public T get(long id) {
+        return manager.find(type, id);
+    }
+
+    @Override
+    @Transactional
     public T save(T item) {
         return saveOrUpdate(item.getId(), manager, item);
     }
 
     @Override
-    public T get(long id) {
-        return manager.find(type, id);
+    @Transactional
+    public void delete(T item) {
+        manager.remove(item);
     }
 }

Modified: incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/AbstractJpaRepositoryTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/AbstractJpaRepositoryTest.java?rev=1148826&r1=1148825&r2=1148826&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/AbstractJpaRepositoryTest.java (original)
+++ incubator/rave/trunk/rave-portal/src/test/java/org/apache/rave/portal/repository/AbstractJpaRepositoryTest.java Wed Jul 20 16:02:49 2011
@@ -51,15 +51,15 @@ public class AbstractJpaRepositoryTest {
     private EntityManager sharedManager;
 
     @Autowired
-    private List<AbstractJpaRepository> repositories;
+    private List<Repository> repositories;
     //NOTE: In order for tests to succeed, there must be an object with id of 1 in the store for every repository
     private static final Long VALID_ENTITY_ID = 1L;
     private static final Long INVALID_ENTITY_ID = -1L;
 
     @Test
     public void getById_validId() {
-        for (AbstractJpaRepository repository : repositories) {
-            BasicEntity entity = repository.get(VALID_ENTITY_ID);
+        for (Repository repository : repositories) {
+            BasicEntity entity = (BasicEntity)repository.get(VALID_ENTITY_ID);
             assertThat(entity, is(notNullValue()));
             assertThat(entity.getId(), is(equalTo(VALID_ENTITY_ID)));
         }
@@ -67,8 +67,8 @@ public class AbstractJpaRepositoryTest {
 
     @Test
     public void getById_invalidId() {
-        for (AbstractJpaRepository repository : repositories) {
-            BasicEntity entity = repository.get(INVALID_ENTITY_ID);
+        for (Repository repository : repositories) {
+            BasicEntity entity = (BasicEntity)repository.get(INVALID_ENTITY_ID);
             assertThat(entity, is(nullValue()));
         }
     }
@@ -76,9 +76,9 @@ public class AbstractJpaRepositoryTest {
     @Test
     @Rollback(true)
     public void save_newEntity() {
-        for (AbstractJpaRepository repository : repositories) {
+        for (Repository repository : repositories) {
             BasicEntity entity = constructNewEntityForRepository(repository);
-            BasicEntity saved = repository.save(entity);
+            BasicEntity saved = (BasicEntity)repository.save(entity);
             sharedManager.flush();
             assertThat(saved, is(sameInstance(entity)));
             assertThat(saved.getId(), is(notNullValue()));
@@ -88,10 +88,10 @@ public class AbstractJpaRepositoryTest {
     @Test
     @Rollback(true)
     public void save_existingEntity() {
-        for (AbstractJpaRepository repository : repositories) {
+        for (Repository repository : repositories) {
             BasicEntity entity = constructNewEntityForRepository(repository);
             entity.setId(VALID_ENTITY_ID);
-            BasicEntity saved = repository.save(entity);
+            BasicEntity saved = (BasicEntity)repository.save(entity);
             sharedManager.flush();
             assertThat(saved, is(not(sameInstance(entity))));
             assertThat(saved.getId(), is(equalTo(entity.getId())));
@@ -102,20 +102,17 @@ public class AbstractJpaRepositoryTest {
     @Test
     @Rollback(true)
     public void delete() {
-        for(AbstractJpaRepository repository : repositories) {
-            BasicEntity entity = repository.get(VALID_ENTITY_ID);
+        for(Repository repository : repositories) {
+            Object entity = repository.get(VALID_ENTITY_ID);
             repository.delete(entity);
             sharedManager.flush();
             assertThat(repository.get(VALID_ENTITY_ID), is(nullValue()));
         }
     }
 
-    private BasicEntity constructNewEntityForRepository(AbstractJpaRepository repository) {
+    private BasicEntity constructNewEntityForRepository(Repository repository) {
         try {
-            Field field = AbstractJpaRepository.class.getDeclaredField("type");
-            field.setAccessible(true);
-            Class<?> objectClass = (Class)field.get(repository);
-            return (BasicEntity) objectClass.newInstance();
+            return (BasicEntity)repository.getType().newInstance();
         } catch (Throwable e) {
             throw new RuntimeException(e);
         }