You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ma...@apache.org on 2014/02/28 11:28:12 UTC
svn commit: r1572907 - in /ace/trunk/org.apache.ace.client.repository:
src/org/apache/ace/client/repository/impl/ObjectRepositoryImpl.java
test/org/apache/ace/client/repository/impl/ModelTest.java
Author: marrs
Date: Fri Feb 28 10:28:11 2014
New Revision: 1572907
URL: http://svn.apache.org/r1572907
Log:
ACE-464 Improved the code, added a test to ensure we did not introduce concurrency issues.
Modified:
ace/trunk/org.apache.ace.client.repository/src/org/apache/ace/client/repository/impl/ObjectRepositoryImpl.java
ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java
Modified: ace/trunk/org.apache.ace.client.repository/src/org/apache/ace/client/repository/impl/ObjectRepositoryImpl.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.client.repository/src/org/apache/ace/client/repository/impl/ObjectRepositoryImpl.java?rev=1572907&r1=1572906&r2=1572907&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.client.repository/src/org/apache/ace/client/repository/impl/ObjectRepositoryImpl.java (original)
+++ ace/trunk/org.apache.ace.client.repository/src/org/apache/ace/client/repository/impl/ObjectRepositoryImpl.java Fri Feb 28 10:28:11 2014
@@ -19,11 +19,10 @@
package org.apache.ace.client.repository.impl;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -55,8 +54,8 @@ abstract class ObjectRepositoryImpl<I ex
// for thread-safety
protected final ReadWriteLock m_lock = new ReentrantReadWriteLock();
- private final List<T> m_repo = new CopyOnWriteArrayList<T>();
- private final Map<String, T> m_index = new ConcurrentHashMap<String, T>();
+ private final List<T> m_repo = new ArrayList<T>();
+ private final Map<String, T> m_index = new HashMap<String, T>();
private final ChangeNotifier m_notifier;
private final String m_xmlNode;
private final RepositoryConfiguration m_repoConfig;
Modified: ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java?rev=1572907&r1=1572906&r2=1572907&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java (original)
+++ ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java Fri Feb 28 10:28:11 2014
@@ -28,6 +28,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -65,7 +66,7 @@ import org.testng.annotations.BeforeMeth
import org.testng.annotations.Test;
/**
- * Test class for the object model used </code>org.apache.ace.client.repository<code>.
+ * Test class for the object model used <code>org.apache.ace.client.repository</code>.
*/
public class ModelTest {
@@ -701,6 +702,33 @@ public class ModelTest {
assertTrue(repo.contains(target2_v1));
assertTrue(repo.contains(target2_v2));
}
+
+ @Test(groups = { TestUtils.UNIT })
+ public void testConcurrentAccessToObjectRepository() throws Exception {
+ initializeRepositoryAdmin();
+ // adds 10 features
+ for (int i = 0; i < 10; i++) {
+ createBasicFeatureObject("feature-" + i);
+ }
+ // asks for a list
+ List<FeatureObject> list = m_featureRepository.get();
+ // then adds another feature
+ createBasicFeatureObject("feature-X");
+ // and makes sure the returned list still has 10 features, not 11, and not
+ // throwing any concurrent modification exceptions
+ assertEquals(list.size(), 10);
+ Iterator<FeatureObject> iterator = list.iterator();
+ for (int i = 0; i < 10; i++) {
+ assertTrue(iterator.hasNext());
+ assertTrue(iterator.next() != null);
+ }
+ assertFalse(iterator.hasNext());
+ // remove item from the list
+ list.remove(0);
+ // get a new list, ensure there are still 11 features
+ list = m_featureRepository.get();
+ assertEquals(list.size(), 11);
+ }
private ArtifactObject createBasicArtifactObject(String symbolicName) {
return createBasicArtifactObject(symbolicName, null);