Test fixes; made test delay configurable.
git-svn-id: https://svn.apache.org/repos/asf/ace/trunk@1732546 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.ace.test/src/org/apache/ace/it/IntegrationTestBase.java b/org.apache.ace.test/src/org/apache/ace/it/IntegrationTestBase.java
index 9f89d9b..f6aeb9f 100644
--- a/org.apache.ace.test/src/org/apache/ace/it/IntegrationTestBase.java
+++ b/org.apache.ace.test/src/org/apache/ace/it/IntegrationTestBase.java
@@ -615,7 +615,7 @@
// XXX it appears we run into race conditions between the setup and configuration of our services, use a
// little delay to get things settled seems to help here...
- TimeUnit.MILLISECONDS.sleep(300);
+ TimeUnit.MILLISECONDS.sleep(Integer.getInteger("org.apache.ace.it.testDelay", 500));
configureAdditionalServices();
}
diff --git a/org.apache.ace.useradmin/src/org/apache/ace/useradmin/repository/Activator.java b/org.apache.ace.useradmin/src/org/apache/ace/useradmin/repository/Activator.java
index add55d2..7991874 100644
--- a/org.apache.ace.useradmin/src/org/apache/ace/useradmin/repository/Activator.java
+++ b/org.apache.ace.useradmin/src/org/apache/ace/useradmin/repository/Activator.java
@@ -23,12 +23,16 @@
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Dictionary;
+import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
import org.apache.ace.connectionfactory.ConnectionFactory;
import org.apache.ace.repository.Repository;
import org.apache.ace.repository.ext.impl.RemoteRepository;
+import org.apache.felix.dm.Component;
import org.apache.felix.dm.DependencyActivatorBase;
import org.apache.felix.dm.DependencyManager;
import org.apache.felix.useradmin.RoleRepositoryStore;
@@ -45,6 +49,8 @@
public static final String KEY_REPOSITORY_NAME = "repositoryName";
public static final String KEY_REPOSITORY_LOCATION = "repositoryLocation";
+ private final List<Component> m_components = new ArrayList<>();
+
private volatile DependencyManager m_manager;
@Override
@@ -56,6 +62,12 @@
@Override
public void updated(Dictionary<String, ?> properties) throws ConfigurationException {
+ removeOldComponents();
+
+ if (properties == null) {
+ return;
+ }
+
String customer = (String) properties.get(KEY_REPOSITORY_CUSTOMER);
if ((customer == null) || "".equals(customer.trim())) {
throw new ConfigurationException(KEY_REPOSITORY_CUSTOMER, "Repository customer has to be specified.");
@@ -81,11 +93,12 @@
String repoFilter = String.format("(&(customer=%s)(name=%s)(|(master=true)(remote=true)))", customer, name);
- m_manager.add(m_manager.createComponent()
+ Component repoComp = null;
+ Component storeComp = m_manager.createComponent()
.setInterface(new String[] { RoleRepositoryStore.class.getName(), UserAdminListener.class.getName() }, null)
.setImplementation(UserAdminRepository.class)
.add(m_manager.createServiceDependency().setService(Repository.class, repoFilter).setRequired(true))
- .add(m_manager.createServiceDependency().setService(LogService.class).setRequired(false)));
+ .add(m_manager.createServiceDependency().setService(LogService.class).setRequired(false));
if (repositoryUrl != null) {
// Remote version...
@@ -94,12 +107,32 @@
repoProps.put(REPOSITORY_NAME, name);
repoProps.put("remote", "true");
- m_manager.add(m_manager.createComponent()
+ repoComp = m_manager.createComponent()
.setInterface(Repository.class.getName(), repoProps)
.setImplementation(new RemoteRepository(repositoryUrl, customer, name))
.add(m_manager.createServiceDependency()
.setService(ConnectionFactory.class)
- .setRequired(true)));
+ .setRequired(true));
+ }
+
+ synchronized (m_components) {
+ m_components.add(storeComp);
+ m_manager.add(storeComp);
+
+ if (repoComp != null) {
+ m_components.add(repoComp);
+ m_manager.add(repoComp);
+ }
+ }
+ }
+
+ private void removeOldComponents() {
+ synchronized (m_components) {
+ Iterator<Component> iter = m_components.iterator();
+ while (iter.hasNext()) {
+ m_manager.remove(iter.next());
+ iter.remove();
+ }
}
}
}