Author: [email protected]
Date: Tue May 31 11:27:51 2011
New Revision: 1154

Log:
[AMDATUCASSANDRA-68] Finalized integration test refactoring

Added:
   
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/UserAdminStoreTest.java
Removed:
   trunk/amdatu-cassandra/test-integration/src/
   
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/UserAdminStoreTestBase.java
Modified:
   
trunk/amdatu-cassandra/cassandra-application/src/main/java/org/amdatu/cassandra/application/service/CassandraConfigurationServiceImpl.java
   
trunk/amdatu-cassandra/cassandra-application/src/main/java/org/amdatu/cassandra/application/service/CassandraDaemonActivatorImpl.java
   trunk/amdatu-cassandra/cassandra-persistencemanager/pom.xml
   
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/service/HectorCassandraPersistenceManagerImpl.java
   
trunk/amdatu-cassandra/test-integration/base/src/main/java/org/amdatu/cassandra/test/integration/base/CassandraFixture.java
   trunk/amdatu-cassandra/test-integration/tests/pom.xml
   
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/CassandraPersistenceManagerTest.java
   
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/framework/CassandraTest.java
   
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/framework/CassandraTestBase.java
   
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/util/ServiceUtil.java

Modified: 
trunk/amdatu-cassandra/cassandra-application/src/main/java/org/amdatu/cassandra/application/service/CassandraConfigurationServiceImpl.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-application/src/main/java/org/amdatu/cassandra/application/service/CassandraConfigurationServiceImpl.java
  (original)
+++ 
trunk/amdatu-cassandra/cassandra-application/src/main/java/org/amdatu/cassandra/application/service/CassandraConfigurationServiceImpl.java
  Tue May 31 11:27:51 2011
@@ -15,21 +15,21 @@
  */
 package org.amdatu.cassandra.application.service;
 
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Dictionary;
-
-import org.amdatu.cassandra.application.CassandraConfigurationService;
-import org.amdatu.core.config.templates.ConfigTemplateCallbackHandler;
-import org.amdatu.core.config.templates.ConfigTemplateManager;
-import org.apache.cassandra.thrift.ConsistencyLevel;
-import org.apache.log4j.PropertyConfigurator;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.cm.ConfigurationException;
-import org.osgi.service.cm.ManagedService;
-import org.osgi.service.log.LogService;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Dictionary;
+
+import org.amdatu.cassandra.application.CassandraConfigurationService;
+import org.amdatu.core.config.templates.ConfigTemplateCallbackHandler;
+import org.amdatu.core.config.templates.ConfigTemplateManager;
+import org.apache.cassandra.thrift.ConsistencyLevel;
+import org.apache.log4j.PropertyConfigurator;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedService;
+import org.osgi.service.log.LogService;
 
 /**
  * This class provides utility methods to prepare Cassandra configuration 
before starting it.
@@ -86,8 +86,12 @@
 
         // Initialize log4j
         File log4jPropertiesFile = new File(m_workDir, 
CassandraConfigurationService.LOG4J_CONF_TARGET);
-        url = bundle.getResource(LOG4J_CONF_SOURCE);
-        try {
+        url = bundle.getResource(LOG4J_CONF_SOURCE);
+        ClassLoader oldClassLoader = 
Thread.currentThread().getContextClassLoader();
+        try {
+            // Perform a classloader switch to prevent log4j trying to load 
classes from the system classloader
+            // instead of the bundle classloader.
+            
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
             m_configTemplateManager.writeConfiguration(url, 
log4jPropertiesFile, new CassandraCallbackHandler());
             
PropertyConfigurator.configure(log4jPropertiesFile.getAbsolutePath());
             System.setProperty("log4j.configuration", 
log4jPropertiesFile.toURI().toString());
@@ -95,6 +99,9 @@
         }
         catch (IOException e) {
             m_logService.log(LogService.LOG_ERROR, "Could not replace 
configuration entries in cassandra.yaml", e);
+        } 
+        finally {
+            Thread.currentThread().setContextClassLoader(oldClassLoader);
         }
 
         // Cassandra-foreground must be set to true, otherwise Cassandra will 
close System err and out streams such

Modified: 
trunk/amdatu-cassandra/cassandra-application/src/main/java/org/amdatu/cassandra/application/service/CassandraDaemonActivatorImpl.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-application/src/main/java/org/amdatu/cassandra/application/service/CassandraDaemonActivatorImpl.java
       (original)
+++ 
trunk/amdatu-cassandra/cassandra-application/src/main/java/org/amdatu/cassandra/application/service/CassandraDaemonActivatorImpl.java
       Tue May 31 11:27:51 2011
@@ -15,23 +15,23 @@
  */
 package org.amdatu.cassandra.application.service;
 
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import org.amdatu.cassandra.application.CassandraConfigurationService;
-import org.apache.cassandra.concurrent.Stage;
-import org.apache.cassandra.concurrent.StageManager;
-import org.apache.cassandra.db.commitlog.CommitLog;
-import org.apache.cassandra.service.StorageService;
-import org.apache.cassandra.thrift.Cassandra;
-import org.apache.cassandra.thrift.CassandraDaemon;
-import org.apache.felix.dm.DependencyManager;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TTransportException;
-import org.osgi.service.log.LogService;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.amdatu.cassandra.application.CassandraConfigurationService;
+import org.apache.cassandra.concurrent.Stage;
+import org.apache.cassandra.concurrent.StageManager;
+import org.apache.cassandra.db.commitlog.CommitLog;
+import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.thrift.Cassandra;
+import org.apache.cassandra.thrift.CassandraDaemon;
+import org.apache.felix.dm.DependencyManager;
+import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TProtocol;
+import org.apache.thrift.transport.TSocket;
+import org.apache.thrift.transport.TTransport;
+import org.apache.thrift.transport.TTransportException;
+import org.osgi.service.log.LogService;
 
 public class CassandraDaemonActivatorImpl implements CassandraDaemonAvailable {
     // Timeout for the initial Thrift connection
@@ -61,14 +61,22 @@
         }
 
         m_logService.log(LogService.LOG_INFO, getClass().getName() + " service 
initialized");
-
-        try {
+
+        ClassLoader oldClassLoader = 
Thread.currentThread().getContextClassLoader();
+        try {
+            // Perform a classloader switch to prevent log4j trying to load 
classes from the system classloader
+            // instead of the bundle classloader.
+            
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+            
             // Setup the Cassandra daemon
             m_daemon = new CassandraDaemon();
             m_logService.log(LogService.LOG_INFO, getClass().getName() + " 
service started.");
         }
         catch (Throwable t) {
             m_logService.log(LogService.LOG_ERROR, "An error occurred while 
starting Cassandra service", t);
+        }
+        finally {
+            Thread.currentThread().setContextClassLoader(oldClassLoader);
         }
     }
 
@@ -164,8 +172,8 @@
 
                     m_dependencyManager.add(
                         m_dependencyManager.createComponent()
-                            
.setInterface(CassandraDaemonAvailable.class.getName(), null)
-                            .setImplementation(service));
+                        
.setInterface(CassandraDaemonAvailable.class.getName(), null)
+                        .setImplementation(service));
                 }
             }
             catch (TTransportException e) {

Modified: trunk/amdatu-cassandra/cassandra-persistencemanager/pom.xml
==============================================================================
--- trunk/amdatu-cassandra/cassandra-persistencemanager/pom.xml (original)
+++ trunk/amdatu-cassandra/cassandra-persistencemanager/pom.xml Tue May 31 
11:27:51 2011
@@ -36,7 +36,7 @@
     <dependency>
       <groupId>me.prettyprint</groupId>
       <artifactId>hector</artifactId>
-      <version>0.7.0-28</version>
+      <version>0.7.0-29</version>
       <scope>compile</scope>
     </dependency>
     <dependency>

Modified: 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/service/HectorCassandraPersistenceManagerImpl.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/service/HectorCassandraPersistenceManagerImpl.java
        (original)
+++ 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/service/HectorCassandraPersistenceManagerImpl.java
        Tue May 31 11:27:51 2011
@@ -15,38 +15,38 @@
  */
 package org.amdatu.cassandra.persistencemanager.service;
 
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import me.prettyprint.cassandra.serializers.ByteBufferSerializer;
-import me.prettyprint.cassandra.serializers.BytesArraySerializer;
-import me.prettyprint.cassandra.serializers.SerializerTypeInferer;
-import me.prettyprint.cassandra.serializers.StringSerializer;
-import me.prettyprint.cassandra.service.OperationType;
-import me.prettyprint.hector.api.Cluster;
-import me.prettyprint.hector.api.ConsistencyLevelPolicy;
-import me.prettyprint.hector.api.HConsistencyLevel;
-import me.prettyprint.hector.api.Keyspace;
-import me.prettyprint.hector.api.Serializer;
-import me.prettyprint.hector.api.beans.ColumnSlice;
-import me.prettyprint.hector.api.beans.HColumn;
-import me.prettyprint.hector.api.beans.HSuperColumn;
-import me.prettyprint.hector.api.beans.OrderedRows;
-import me.prettyprint.hector.api.beans.OrderedSuperRows;
-import me.prettyprint.hector.api.beans.Row;
-import me.prettyprint.hector.api.beans.SuperRow;
-import me.prettyprint.hector.api.beans.SuperSlice;
-import me.prettyprint.hector.api.factory.HFactory;
-import me.prettyprint.hector.api.mutation.Mutator;
-import me.prettyprint.hector.api.query.QueryResult;
-import me.prettyprint.hector.api.query.RangeSlicesQuery;
-import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
-
-import org.amdatu.cassandra.persistencemanager.CassandraException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import me.prettyprint.cassandra.serializers.ByteBufferSerializer;
+import me.prettyprint.cassandra.serializers.BytesArraySerializer;
+import me.prettyprint.cassandra.serializers.SerializerTypeInferer;
+import me.prettyprint.cassandra.serializers.StringSerializer;
+import me.prettyprint.cassandra.service.OperationType;
+import me.prettyprint.hector.api.Cluster;
+import me.prettyprint.hector.api.ConsistencyLevelPolicy;
+import me.prettyprint.hector.api.HConsistencyLevel;
+import me.prettyprint.hector.api.Keyspace;
+import me.prettyprint.hector.api.Serializer;
+import me.prettyprint.hector.api.beans.ColumnSlice;
+import me.prettyprint.hector.api.beans.HColumn;
+import me.prettyprint.hector.api.beans.HSuperColumn;
+import me.prettyprint.hector.api.beans.OrderedRows;
+import me.prettyprint.hector.api.beans.OrderedSuperRows;
+import me.prettyprint.hector.api.beans.Row;
+import me.prettyprint.hector.api.beans.SuperRow;
+import me.prettyprint.hector.api.beans.SuperSlice;
+import me.prettyprint.hector.api.factory.HFactory;
+import me.prettyprint.hector.api.mutation.Mutator;
+import me.prettyprint.hector.api.query.QueryResult;
+import me.prettyprint.hector.api.query.RangeSlicesQuery;
+import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
+
+import org.amdatu.cassandra.persistencemanager.CassandraException;
 
 /**
  * This class implements a CassandraPersistenceManager using the Hector API. 
It provides an additional
@@ -96,12 +96,20 @@
         }
     }
 
-    private Keyspace getKeyspace() {
-        String thriftHost = getConfigurationService().getRPCAddress() + ":" + 
getConfigurationService().getRPCPort();
-        String clusterName = getConfigurationService().getClustername();
-        Cluster cluster = HFactory.getOrCreateCluster(clusterName, thriftHost);
-        Keyspace keyspace = HFactory.createKeyspace(getKeyspaceName(), 
cluster, new InternalConsistencyLevelPolicy());
-        return keyspace;
+    private Keyspace getKeyspace() {
+        ClassLoader oldClassLoader = 
Thread.currentThread().getContextClassLoader();
+        try {
+            // Perform a classloader switch to prevent log4j trying to load 
classes from the system classloader
+            // instead of the bundle classloader.
+            
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+            String thriftHost = getConfigurationService().getRPCAddress() + 
":" + getConfigurationService().getRPCPort();
+            String clusterName = getConfigurationService().getClustername();
+            Cluster cluster = HFactory.getOrCreateCluster(clusterName, 
thriftHost);
+            Keyspace keyspace = HFactory.createKeyspace(getKeyspaceName(), 
cluster, new InternalConsistencyLevelPolicy());
+            return keyspace;
+        } finally {
+            Thread.currentThread().setContextClassLoader(oldClassLoader);
+        }
     }
 
     public boolean exists(final String columnFamilyName, final String rowKey) 
throws CassandraException {
@@ -109,10 +117,10 @@
         StringSerializer nameSerializer = StringSerializer.get();
         QueryResult<Integer> result =
             HFactory.createCountQuery(getKeyspace(), stringSerializer, 
nameSerializer)
-                .setColumnFamily(columnFamilyName)
-                .setKey(rowKey)
-                .setRange(null, null, 1)
-                .execute();
+            .setColumnFamily(columnFamilyName)
+            .setKey(rowKey)
+            .setRange(null, null, 1)
+            .execute();
         return result.get() > 0;
     }
 
@@ -126,10 +134,10 @@
             }
             QueryResult<HSuperColumn<String, String, String>> result =
                 HFactory.createSuperColumnQuery(getKeyspace(), serializer, 
serializer, serializer, serializer)
-                    .setColumnFamily(columnFamilyName)
-                    .setKey(rowKey)
-                    .setSuperName(superColumnName)
-                    .execute();
+                .setColumnFamily(columnFamilyName)
+                .setKey(rowKey)
+                .setSuperName(superColumnName)
+                .execute();
             if (result.get() != null) {
                 for (HColumn<String, String> column : 
result.get().getColumns()) {
                     if (column.getName().equals(columnName)) {
@@ -142,10 +150,10 @@
         else {
             QueryResult<HColumn<String, String>> result =
                 HFactory.createColumnQuery(getKeyspace(), serializer, 
serializer, serializer)
-                    .setColumnFamily(columnFamilyName)
-                    .setKey(rowKey)
-                    .setName(columnName)
-                    .execute();
+                .setColumnFamily(columnFamilyName)
+                .setKey(rowKey)
+                .setName(columnName)
+                .execute();
             return result.get() != null;
         }
     }
@@ -155,7 +163,7 @@
     }
 
     public List<String> getRowKeys(final String columnFamilyName, final String 
column, final String superColumn)
-        throws CassandraException {
+    throws CassandraException {
         List<String> rowKeys = new ArrayList<String>();
         if (isSuperColumnFamily(columnFamilyName)) {
             Iterator<SuperRow<String, String, String, ByteBuffer>> iter =
@@ -218,7 +226,7 @@
     }
 
     public void deleteSuperColumn(final String columnFamilyName, final String 
rowKey, final String superColumnName)
-        throws CassandraException {
+    throws CassandraException {
         deleteColumn(columnFamilyName, rowKey, superColumnName, null);
     }
 
@@ -265,10 +273,10 @@
             StringSerializer serializer = StringSerializer.get();
             QueryResult<HSuperColumn<String, String, String>> result =
                 HFactory.createSuperColumnQuery(getKeyspace(), serializer, 
serializer, serializer, serializer)
-                    .setColumnFamily(columnFamilyName)
-                    .setKey(rowKey)
-                    .setSuperName(superColumnName)
-                    .execute();
+                .setColumnFamily(columnFamilyName)
+                .setKey(rowKey)
+                .setSuperName(superColumnName)
+                .execute();
             if (result.get() != null) {
                 List<HColumn<String, String>> columns = 
result.get().getColumns();
                 for (HColumn<String, String> column : columns) {
@@ -281,10 +289,10 @@
         }
         else {
             QueryResult<HColumn<String, String>> result = 
HFactory.createStringColumnQuery(getKeyspace())
-                .setColumnFamily(columnFamilyName)
-                .setKey(rowKey)
-                .setName(columnName)
-                .execute();
+            .setColumnFamily(columnFamilyName)
+            .setKey(rowKey)
+            .setName(columnName)
+            .execute();
             if (result.get() == null) {
                 return null;
             }
@@ -312,10 +320,10 @@
         if (isSuper(columnFamilyName, superColumnName, columnName)) {
             QueryResult<HSuperColumn<String, String, T>> result =
                 HFactory.createSuperColumnQuery(getKeyspace(), serializer, 
serializer, serializer, valueSerializer)
-                    .setColumnFamily(columnFamilyName)
-                    .setKey(rowKey)
-                    .setSuperName(superColumnName)
-                    .execute();
+                .setColumnFamily(columnFamilyName)
+                .setKey(rowKey)
+                .setSuperName(superColumnName)
+                .execute();
             if (result.get() != null) {
                 List<HColumn<String, T>> columns = result.get().getColumns();
                 for (HColumn<String, T> column : columns) {
@@ -329,10 +337,10 @@
         else {
             QueryResult<HColumn<String, T>> result =
                 HFactory.createColumnQuery(getKeyspace(), serializer, 
serializer, valueSerializer)
-                    .setColumnFamily(columnFamilyName)
-                    .setKey(rowKey)
-                    .setName(columnName)
-                    .execute();
+                .setColumnFamily(columnFamilyName)
+                .setKey(rowKey)
+                .setName(columnName)
+                .execute();
             if (result.get() == null) {
                 return null;
             }
@@ -393,10 +401,10 @@
         Serializer<T> valueSerializer = getSerializer(clazz);
         QueryResult<SuperSlice<String, String, T>> result =
             HFactory.createSuperSliceQuery(getKeyspace(), serializer, 
serializer, serializer, valueSerializer)
-                .setColumnFamily(columnFamilyName)
-                .setKey(rowKey)
-                .setRange(null, null, false, COLUMN_LIMIT)
-                .execute();
+            .setColumnFamily(columnFamilyName)
+            .setKey(rowKey)
+            .setRange(null, null, false, COLUMN_LIMIT)
+            .execute();
         if (result.get() != null) {
             return result.get().getSuperColumns();
         }
@@ -414,10 +422,10 @@
         Serializer<T> valueSerializer = getSerializer(clazz);
         QueryResult<ColumnSlice<String, T>> result =
             HFactory.createSliceQuery(getKeyspace(), serializer, serializer, 
valueSerializer)
-                .setColumnFamily(columnFamilyName)
-                .setKey(rowKey)
-                .setRange(null, null, false, COLUMN_LIMIT)
-                .execute();
+            .setColumnFamily(columnFamilyName)
+            .setKey(rowKey)
+            .setRange(null, null, false, COLUMN_LIMIT)
+            .execute();
         if (result.get() != null) {
             return result.get().getColumns();
         }
@@ -437,10 +445,10 @@
         Serializer<T> valueSerializer = getSerializer(clazz);
         RangeSuperSlicesQuery<String, String, String, T> rangeSlicesQuery =
             HFactory.createRangeSuperSlicesQuery(getKeyspace(), serializer, 
serializer, serializer, valueSerializer)
-                .setColumnFamily(columnFamilyName)
-                .setKeys(null, null)
-                .setRange(superColumn, superColumn, false, colLimit)
-                .setRowCount(ROW_LIMIT);
+            .setColumnFamily(columnFamilyName)
+            .setKeys(null, null)
+            .setRange(superColumn, superColumn, false, colLimit)
+            .setRowCount(ROW_LIMIT);
         if (superColumn != null && column != null) {
             rangeSlicesQuery.setColumnNames(superColumn, column);
         }
@@ -459,10 +467,10 @@
         Serializer<T> valueSerializer = getSerializer(clazz);
         RangeSlicesQuery<String, String, T> rangeSlicesQuery =
             HFactory.createRangeSlicesQuery(getKeyspace(), serializer, 
serializer, valueSerializer)
-                .setColumnFamily(columnFamilyName)
-                .setKeys(null, null)
-                .setRange(column, column, false, colLimit)
-                .setRowCount(ROW_LIMIT);
+            .setColumnFamily(columnFamilyName)
+            .setKeys(null, null)
+            .setRange(column, column, false, colLimit)
+            .setRowCount(ROW_LIMIT);
         if (column != null) {
             rangeSlicesQuery.setColumnNames(column);
         }
@@ -473,7 +481,7 @@
     }
 
     private boolean isSuper(final String columnFamily, final String 
superColumn, final String column)
-        throws CassandraException {
+    throws CassandraException {
         boolean isSuper = super.isSuperColumnFamily(columnFamily);
         if (isSuper && superColumn == null) {
             throw new CassandraException("Invalid request: ColumnFamily '" + 
columnFamily

Modified: 
trunk/amdatu-cassandra/test-integration/base/src/main/java/org/amdatu/cassandra/test/integration/base/CassandraFixture.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-integration/base/src/main/java/org/amdatu/cassandra/test/integration/base/CassandraFixture.java
 (original)
+++ 
trunk/amdatu-cassandra/test-integration/base/src/main/java/org/amdatu/cassandra/test/integration/base/CassandraFixture.java
 Tue May 31 11:27:51 2011
@@ -30,22 +30,14 @@
 
     public Option provision() {
         return org.ops4j.pax.exam.CoreOptions.provision(
-            // Wrap libraries we depend on as OSGi bundles and provision those
-           /* 
wrappedBundle(mavenBundle().groupId("commons-httpclient").artifactId("commons-httpclient").versionAsInProject()),
-            
wrappedBundle(mavenBundle().groupId("commons-codec").artifactId("commons-codec").versionAsInProject()),
-            
wrappedBundle(mavenBundle().groupId("commons-logging").artifactId("commons-logging").versionAsInProject()),
-            
wrappedBundle(mavenBundle().groupId("org.json").artifactId("json").versionAsInProject()),
-
-            // The following 2 artifacts are necessary for default tenant 
resolving
-            
mavenBundle().groupId("org.amdatu.web").artifactId("org.amdatu.web.tenantresolver.hostname").versionAsInProject(),
-            
mavenBundle().groupId("org.amdatu.web").artifactId("org.amdatu.web.tenantresolver.parameter").versionAsInProject(),*/
-
-            // Provision Amdatu Auth bundles
+            // Provision Amdatu Cassandra bundles
             
mavenBundle().groupId("org.amdatu.cassandra").artifactId("org.amdatu.cassandra.test.integration.base").versionAsInProject(),
             
mavenBundle().groupId("org.amdatu.cassandra").artifactId("org.amdatu.cassandra.application").versionAsInProject(),
             
mavenBundle().groupId("org.amdatu.cassandra").artifactId("org.amdatu.cassandra.listener").versionAsInProject(),
-            
mavenBundle().groupId("org.amdatu.cassandra").artifactId("org.amdatu.cassandra.persistencemanager").versionAsInProject()
-            );
+            
mavenBundle().groupId("org.amdatu.cassandra").artifactId("org.amdatu.cassandra.persistencemanager").versionAsInProject(),
+            
mavenBundle().groupId("org.amdatu.cassandra").artifactId("org.amdatu.cassandra.useradminstore").versionAsInProject(),
+            
mavenBundle().groupId("org.amdatu.cassandra").artifactId("org.amdatu.cassandra.tenantstore").versionAsInProject()
+        );
     }
 
     /**
@@ -61,7 +53,7 @@
     public void configureCassandraDaemon(TestContext testContext) throws 
Exception {
         testContext.updateConfig(CassandraConfigurationService.PID, 
getCassandraDaemonCfg());
     }
-     
+
     private Properties getCassandraDaemonCfg() {
         Properties properties = new Properties();
         properties.put("workdir", "cassandra");

Modified: trunk/amdatu-cassandra/test-integration/tests/pom.xml
==============================================================================
--- trunk/amdatu-cassandra/test-integration/tests/pom.xml       (original)
+++ trunk/amdatu-cassandra/test-integration/tests/pom.xml       Tue May 31 
11:27:51 2011
@@ -38,73 +38,51 @@
       <!--
         External library dependencies used by the integration tests.
       -->
-
-
       <!--
-        Amdatu Web itest base to be used by the tests.
+        Amdatu Cassandra itest base to be used by the tests.
       -->
       <dependency>
-        <groupId>org.amdatu.web</groupId>
-        <artifactId>org.amdatu.web.tenantresolver.hostname</artifactId>
-        <version>${org.amdatu.web.version}</version>
+        <groupId>org.amdatu.cassandra</groupId>
+        <artifactId>org.amdatu.cassandra.test.integration.base</artifactId>
+        <version>${project.version}</version>
         <scope>test</scope>
         <type>bundle</type>
       </dependency>
       <dependency>
-        <groupId>org.amdatu.web</groupId>
-        <artifactId>org.amdatu.web.tenantresolver.parameter</artifactId>
-        <version>${org.amdatu.web.version}</version>
+        <groupId>org.amdatu.cassandra</groupId>
+        <artifactId>org.amdatu.cassandra.application</artifactId>
+        <version>${project.version}</version>
         <scope>test</scope>
         <type>bundle</type>
       </dependency>
-
-      <!--
-        Amdatu Cassandra itest base to be used by the tests.
-      -->
       <dependency>
         <groupId>org.amdatu.cassandra</groupId>
-        <artifactId>org.amdatu.cassandra.test.integration.base</artifactId>
+        <artifactId>org.amdatu.cassandra.listener</artifactId>
         <version>${project.version}</version>
         <scope>test</scope>
         <type>bundle</type>
       </dependency>
       <dependency>
         <groupId>org.amdatu.cassandra</groupId>
-        <artifactId>org.amdatu.cassandra.application</artifactId>
+        <artifactId>org.amdatu.cassandra.persistencemanager</artifactId>
         <version>${project.version}</version>
         <scope>test</scope>
         <type>bundle</type>
       </dependency>
       <dependency>
         <groupId>org.amdatu.cassandra</groupId>
-        <artifactId>org.amdatu.cassandra.listener</artifactId>
+        <artifactId>org.amdatu.cassandra.useradminstore</artifactId>
         <version>${project.version}</version>
         <scope>test</scope>
         <type>bundle</type>
       </dependency>
       <dependency>
         <groupId>org.amdatu.cassandra</groupId>
-        <artifactId>org.amdatu.cassandra.persistencemanager</artifactId>
+        <artifactId>org.amdatu.cassandra.tenantstore</artifactId>
         <version>${project.version}</version>
         <scope>test</scope>
         <type>bundle</type>
       </dependency>
-
-      <!--
-          This transitive dependency is in the end needed by
-          org.amdatu.cassandra.persistencemanager which depends on a maven 2
-          version of this artifact. The maven-model pom..xml does not include 
versions
-          for all its dependencies, which works for maven 2 but fails with 
maven 3.
-          We therefore overrule this version with the maven 3 one.
-          Without this dependency, you will get this error while running the 
test:
-          java.lang.AssertionError: Stream handler unavailable due to: null
-      -->
-      <dependency>
-        <groupId>org.apache.maven</groupId>
-        <artifactId>maven-model</artifactId>
-        <version>3.0.3</version>
-      </dependency>
-
     </dependencies>
   </dependencyManagement>
 
@@ -112,35 +90,34 @@
     <!--
       See explanation in the dependencyManagement section above.
     -->
-
     <dependency>
-      <groupId>org.amdatu.web</groupId>
-      <artifactId>org.amdatu.web.tenantresolver.hostname</artifactId>
+      <groupId>org.amdatu.cassandra</groupId>
+      <artifactId>org.amdatu.cassandra.test.integration.base</artifactId>
       <type>bundle</type>
     </dependency>
     <dependency>
-      <groupId>org.amdatu.web</groupId>
-      <artifactId>org.amdatu.web.tenantresolver.parameter</artifactId>
+      <groupId>org.amdatu.cassandra</groupId>
+      <artifactId>org.amdatu.cassandra.application</artifactId>
       <type>bundle</type>
     </dependency>
     <dependency>
       <groupId>org.amdatu.cassandra</groupId>
-      <artifactId>org.amdatu.cassandra.test.integration.base</artifactId>
+      <artifactId>org.amdatu.cassandra.listener</artifactId>
       <type>bundle</type>
     </dependency>
     <dependency>
       <groupId>org.amdatu.cassandra</groupId>
-      <artifactId>org.amdatu.cassandra.application</artifactId>
+      <artifactId>org.amdatu.cassandra.persistencemanager</artifactId>
       <type>bundle</type>
     </dependency>
     <dependency>
       <groupId>org.amdatu.cassandra</groupId>
-      <artifactId>org.amdatu.cassandra.listener</artifactId>
+      <artifactId>org.amdatu.cassandra.useradminstore</artifactId>
       <type>bundle</type>
     </dependency>
     <dependency>
       <groupId>org.amdatu.cassandra</groupId>
-      <artifactId>org.amdatu.cassandra.persistencemanager</artifactId>
+      <artifactId>org.amdatu.cassandra.tenantstore</artifactId>
       <type>bundle</type>
     </dependency>
   </dependencies>

Modified: 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/CassandraPersistenceManagerTest.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/CassandraPersistenceManagerTest.java
        (original)
+++ 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/CassandraPersistenceManagerTest.java
        Tue May 31 11:27:51 2011
@@ -25,6 +25,7 @@
 import org.amdatu.cassandra.persistencemanager.CassandraException;
 import org.amdatu.cassandra.persistencemanager.CassandraPersistenceManager;
 import org.amdatu.cassandra.test.integration.tests.framework.CassandraTestBase;
+import org.amdatu.cassandra.test.integration.tests.util.ServiceUtil;
 /**
  * This class provides an integration test for the Cassandra Persistence 
Manager.
  * 
@@ -48,7 +49,7 @@
         // Retrieve the CassandraPersistenceManager for the keyspace we just 
created
         m_pmFactory.createCassandraPersistenceManager(KEYSPACE);
         String filter = "(" + CassandraPersistenceManager.KEYSPACE_AWARE_KEY + 
"=" + KEYSPACE + ")";
-        m_pm = getService(CassandraPersistenceManager.class, filter);
+        m_pm = ServiceUtil.getService(m_testContext, 
CassandraPersistenceManager.class, filter);
     }
 
     public void execute() throws Exception {

Added: 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/UserAdminStoreTest.java
==============================================================================
--- (empty file)
+++ 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/UserAdminStoreTest.java
     Tue May 31 11:27:51 2011
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2010, 2011 The Amdatu Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.amdatu.cassandra.test.integration.tests;
+
+import junit.framework.Assert;
+
+import org.amdatu.cassandra.test.integration.tests.framework.CassandraTestBase;
+import org.osgi.service.useradmin.Group;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+
+public class UserAdminStoreTest extends CassandraTestBase {
+    // Amount of milliseconds to wait between WRITE and READ operations 
concerning the same row and same column.
+    // See AMDATU-137.
+    private static int WAIT = 20;
+
+    private static final String ADMIN_USER = "TestAdministrator";
+    private static final String EDITOR_USER = "TestEditor";
+    private static final String GUEST_USER = "TestGuest";
+
+    private static final String ADMIN_GROUP = "TestAdminUsers";
+    private static final String EDITOR_GROUP = "TestEditUsers";
+    private static final String GUEST_GROUP = "TestGuestUsers";
+
+    private void sleep() throws InterruptedException {
+        // Wait for 100 milliseconds, remember that Cassandra write operations 
are asynchronously
+        Thread.sleep(WAIT);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void execute() throws Exception {
+        // Start the test, first remove all existing roles
+        Role[] allRoles = m_userAdmin.getRoles(null);
+        if (allRoles != null) {
+            for (Role role : allRoles) {
+                String roleName = role.getName();
+                m_userAdmin.removeRole(roleName);
+                sleep();
+                Assert.assertTrue("Role '" + roleName + "' removed but still 
returned", m_userAdmin
+                    .getRole(roleName) == null);
+            }
+        }
+
+        // Test if all roles have been removed
+        Assert.assertTrue("All roles were removed, but getRoles() still 
returns roles",
+            m_userAdmin.getRoles(null) == null
+                || m_userAdmin.getRoles(null).length == 0);
+
+        // Create three test users and set the credentials
+        User adminUser = (User) m_userAdmin.createRole(ADMIN_USER, Role.USER);
+        User editorUser = (User) m_userAdmin.createRole(EDITOR_USER, 
Role.USER);
+        User guestUser = (User) m_userAdmin.createRole(GUEST_USER, Role.USER);
+
+        Assert.assertTrue("All users were removed, but still creating a user 
failed since it already exists",
+            adminUser != null && editorUser != null && guestUser != null);
+        adminUser.getCredentials().put("password", "adminpasswd");
+        editorUser.getCredentials().put("password", "editorpasswd");
+        guestUser.getCredentials().put("password", "guestpasswd");
+
+        // Now see if we can find these users from credentials
+        sleep();
+        Assert.assertTrue("TestAdmin user could not be found", 
m_userAdmin.getRole(ADMIN_USER) != null);
+        Assert.assertTrue("TestEditor user could not be found", 
m_userAdmin.getRole(EDITOR_USER) != null);
+        Assert.assertTrue("TestGuest user could not be found", 
m_userAdmin.getRole(GUEST_USER) != null);
+
+        Assert.assertTrue("TestAdmin user could be retrieved by undefined 
'name' property",
+            m_userAdmin.getUser("name", ADMIN_USER) == null);
+        Assert.assertTrue("TestEditor user could be retrieved by undefined 
'name' property",
+            m_userAdmin.getUser("name", EDITOR_USER) == null);
+        Assert.assertTrue("TestGuest user could be retrieved by undefined 
'name' property",
+            m_userAdmin.getUser("name", GUEST_USER) == null);
+
+        // Set user properties of admin
+        adminUser.getProperties().put("firstName", "John".getBytes());
+        adminUser.getProperties().put("lastName", "Doe".getBytes());
+
+        // And check if they were set correctly
+        sleep();
+        byte[] firstName = (byte[]) 
m_userAdmin.getRole(ADMIN_USER).getProperties().get("firstName");
+        Assert.assertTrue("firstName not properly set", new String(firstName, 
"UTF-8").equals("John"));
+        byte[] lastName = (byte[]) 
m_userAdmin.getRole(ADMIN_USER).getProperties().get("lastName");
+        Assert.assertTrue("lastName not properly set", new String(lastName, 
"UTF-8").equals("Doe"));
+
+        // Remove last name
+        adminUser.getProperties().remove("lastName");
+        sleep();
+        Assert.assertTrue("lastName not properly removed from property set",
+            m_userAdmin.getRole(ADMIN_USER).getProperties().get("lastName") == 
null);
+
+        // Now create "Administrator", "Editor" and "Guest" group and do some 
assignments
+        Group adminGroup = (Group) m_userAdmin.createRole(ADMIN_GROUP, 
Role.GROUP);
+        Group editorGroup = (Group) m_userAdmin.createRole(EDITOR_GROUP, 
Role.GROUP);
+        Group guestGroup = (Group) m_userAdmin.createRole(GUEST_GROUP, 
Role.GROUP);
+        adminGroup.addMember(adminUser);
+        adminGroup.addRequiredMember(adminUser);
+
+        // Excessive test of TestEditUsers group since this failed before
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 0);
+        assertRequiredMemberCount(EDITOR_GROUP, 0);
+        editorGroup.addMember(adminUser);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 1);
+        assertRequiredMemberCount(EDITOR_GROUP, 0);
+        editorGroup.addMember(editorUser);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 2);
+        assertRequiredMemberCount(EDITOR_GROUP, 0);
+        editorGroup.addRequiredMember(adminUser);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 2);
+        assertRequiredMemberCount(EDITOR_GROUP, 1);
+        editorGroup.addRequiredMember(editorUser);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 2);
+        assertRequiredMemberCount(EDITOR_GROUP, 2);
+
+        guestGroup.addMember(adminUser);
+        sleep();
+        guestGroup.addMember(editorUser);
+        sleep();
+        guestGroup.addMember(guestUser);
+        sleep();
+
+        assertBasicMemberCount(ADMIN_GROUP, 1);
+        assertRequiredMemberCount(ADMIN_GROUP, 1);
+        assertBasicMemberCount(EDITOR_GROUP, 2);
+        assertRequiredMemberCount(EDITOR_GROUP, 2);
+        assertBasicMemberCount(GUEST_GROUP, 3);
+        assertRequiredMemberCount(GUEST_GROUP, 0);
+
+        // Now remove some members
+        guestGroup.removeMember(adminUser);
+        sleep();
+        assertBasicMemberCount(GUEST_GROUP, 2);
+
+        // Remove the editor user, is it removed from the admin group?
+        m_userAdmin.removeRole(EDITOR_USER);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 1);
+        assertRequiredMemberCount(EDITOR_GROUP, 1);
+        Assert.assertTrue("TestEditor should have been removed", 
m_userAdmin.getRole(EDITOR_USER) == null);
+
+        // Now remove a user and verify that it is also removed as member of 
all groups it was member of
+        m_userAdmin.removeRole(ADMIN_USER);
+        assertBasicMemberCount(ADMIN_GROUP, 0);
+        assertRequiredMemberCount(ADMIN_GROUP, 0);
+        assertBasicMemberCount(GUEST_GROUP, 1);
+
+        m_userAdmin.removeRole(GUEST_USER);
+        assertBasicMemberCount(GUEST_GROUP, 0);
+
+        // Finally, remove all test users and groups
+        allRoles = m_userAdmin.getRoles(null);
+        if (allRoles != null) {
+            for (Role role : allRoles) {
+                String roleName = role.getName();
+                m_userAdmin.removeRole(roleName);
+                sleep();
+                Assert.assertTrue("Role '" + roleName + "' removed but still 
returned", m_userAdmin
+                    .getRole(roleName) == null);
+            }
+        }
+    }
+
+    private void assertBasicMemberCount(final String group, final int 
expected) {
+        Assert.assertTrue("Group '" + group + "' is unknown by UserAdmin", 
m_userAdmin.getRole(group) != null);
+        int count = 0;
+        if (((Group) m_userAdmin.getRole(group)).getMembers() != null) {
+            count = ((Group) m_userAdmin.getRole(group)).getMembers().length;
+        }
+        if (count != expected) {
+            Role[] members = ((Group) m_userAdmin.getRole(group)).getMembers();
+            String sMembers = toString(members);
+            Assert.assertTrue("Group '" + group + "' has " + count + " basic 
members. Expected: " + expected
+                        + ". Members found: " + sMembers, false);
+        }
+    }
+
+    private void assertRequiredMemberCount(final String group, final int 
expected) {
+        Assert.assertTrue("Group '" + group + "' is unknown by UserAdmin", 
m_userAdmin.getRole(group) != null);
+        int count = 0;
+        if (((Group) m_userAdmin.getRole(group)).getRequiredMembers() != null) 
{
+            count = ((Group) 
m_userAdmin.getRole(group)).getRequiredMembers().length;
+        }
+        if (count != expected) {
+            Role[] members = ((Group) 
m_userAdmin.getRole(group)).getRequiredMembers();
+            String sMembers = toString(members);
+            Assert.assertTrue("Group '" + group + "' has " + count + " 
required members. Expected: " + expected
+                        + ". Members found: " + sMembers, false);
+        }
+    }
+
+    private String toString(final Role[] members) {
+        String sMembers = "";
+        for (Role role : members) {
+            sMembers += role.getName() + " ";
+        }
+        return sMembers;
+    }
+}

Modified: 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/framework/CassandraTest.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/framework/CassandraTest.java
        (original)
+++ 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/framework/CassandraTest.java
        Tue May 31 11:27:51 2011
@@ -22,10 +22,13 @@
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.LibraryOptions.junitBundles;
 
+import org.amdatu.cassandra.application.CassandraConfigurationService;
 import org.amdatu.cassandra.application.CassandraDaemonService;
 import 
org.amdatu.cassandra.persistencemanager.CassandraPersistenceManagerFactory;
 import org.amdatu.cassandra.test.integration.base.CassandraFixture;
 import org.amdatu.cassandra.test.integration.tests.CassandraDaemonTest;
+import 
org.amdatu.cassandra.test.integration.tests.CassandraPersistenceManagerTest;
+import org.amdatu.cassandra.test.integration.tests.UserAdminStoreTest;
 import org.amdatu.core.itest.base.CoreFixture;
 import org.amdatu.core.itest.base.TestContext;
 import org.amdatu.web.itest.base.WebFixture;
@@ -40,6 +43,7 @@
 import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.log.LogService;
+import org.osgi.service.useradmin.UserAdmin;
 
 @RunWith(JUnit4TestRunner.class)
 @ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
@@ -55,6 +59,8 @@
     private CassandraDaemonService m_daemonService;
     private DependencyManager m_dependencyManager;
     private CassandraPersistenceManagerFactory m_pmFactory;
+    private TestContext m_testContext;
+    private UserAdmin m_userAdmin;
    
     @Configuration
     public Option[] config() {
@@ -79,7 +85,7 @@
 
         // FIXME quickfix to let configadmin settle to
         // prevent felix dropping configs
-        Thread.sleep(1000);
+        Thread.sleep(2000);
 
         return testContext;
     }
@@ -88,21 +94,26 @@
     public void runTest(BundleContext bundleContext) throws Exception {
         // Setup test context
         m_bundleContext = bundleContext;
-        TestContext testContext = testContextSetUp(bundleContext);
+        m_testContext = testContextSetUp(bundleContext);
 
         // Initialize services
-        m_logService = assertAvailable(testContext, LogService.class);
-        m_daemonService = assertAvailable(testContext, 
CassandraDaemonService.class);
-        m_pmFactory = assertAvailable(testContext, 
CassandraPersistenceManagerFactory.class);
+        m_logService = assertAvailable(m_testContext, LogService.class);
+        assertAvailable(m_testContext, CassandraConfigurationService.class);
+        
+        m_daemonService = assertAvailable(m_testContext, 
CassandraDaemonService.class);
+        m_pmFactory = assertAvailable(m_testContext, 
CassandraPersistenceManagerFactory.class);
+        m_userAdmin = assertAvailable(m_testContext, UserAdmin.class);
       
         // Create the dependency manager
-        m_dependencyManager = new 
DependencyManager(testContext.getBundleContext());
+        m_dependencyManager = new 
DependencyManager(m_testContext.getBundleContext());
         
         // Execute the tests
         test(CassandraDaemonTest.class);
-
+        test(CassandraPersistenceManagerTest.class);
+        test(UserAdminStoreTest.class);
+        
         // And we are done
-        testContext.tearDown();
+        m_testContext.tearDown();
     }
 
     private <T extends CassandraTestBase> void test(Class<T> testClass) throws 
Exception {
@@ -117,5 +128,7 @@
         test.setPMFactoryService(m_pmFactory);
         test.setDependencyManager(m_dependencyManager);
         test.setBundleContext(m_bundleContext);
+        test.setTestContext(m_testContext);
+        test.setUserAdmin(m_userAdmin);
     }
 }

Modified: 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/framework/CassandraTestBase.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/framework/CassandraTestBase.java
    (original)
+++ 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/framework/CassandraTestBase.java
    Tue May 31 11:27:51 2011
@@ -17,12 +17,11 @@
 
 import org.amdatu.cassandra.application.CassandraDaemonService;
 import 
org.amdatu.cassandra.persistencemanager.CassandraPersistenceManagerFactory;
+import org.amdatu.core.itest.base.TestContext;
 import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.log.LogService;
-
-
+import org.osgi.service.useradmin.UserAdmin;
 
 public abstract class CassandraTestBase {
     protected volatile BundleContext m_bundleContext;
@@ -30,6 +29,8 @@
     protected volatile CassandraDaemonService m_daemonService;
     protected volatile DependencyManager m_dependencyManager;
     protected volatile CassandraPersistenceManagerFactory m_pmFactory;
+    protected volatile TestContext m_testContext;
+    protected volatile UserAdmin m_userAdmin;
     
     public abstract void execute() throws Exception;
     
@@ -53,7 +54,11 @@
         m_bundleContext = context;
     }
     
-    protected <T extends Object> T getService(Class<T> clazz, String filter) 
throws InvalidSyntaxException {
-        return (T) m_bundleContext.getServiceReferences(clazz.getName(), 
filter);
+    public void setTestContext(TestContext context) {
+        m_testContext = context;
+    }
+    
+    public void setUserAdmin(UserAdmin userAdmin) {
+        m_userAdmin = userAdmin;
     }
 }

Modified: 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/util/ServiceUtil.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/util/ServiceUtil.java
       (original)
+++ 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/util/ServiceUtil.java
       Tue May 31 11:27:51 2011
@@ -15,10 +15,14 @@
     // 1. Try to get the service directly using getAllServiceReferences, 
return it if available
     // 2. Invoke super.getService using the service tracker, this will wait 
until the service is available
     // 3. Again try to get the service directly using getAllServiceReferences, 
as step 2. might ave failed
-    @SuppressWarnings("unchecked")
     public static <T extends Object> T getService(TestContext testContext, 
Class<T> clazz) throws Exception {
+        return getService(testContext, clazz, null);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public static <T extends Object> T getService(TestContext testContext, 
Class<T> clazz, String filter) throws Exception {
         BundleContext bundleContext = testContext.getBundleContext();
-        ServiceReference[] servRef = 
bundleContext.getAllServiceReferences(clazz.getName(), null);
+        ServiceReference[] servRef = 
bundleContext.getAllServiceReferences(clazz.getName(), filter);
         if (servRef != null && servRef.length > 0) {
             return (T) 
bundleContext.getService(getServiceRefWithHighestRank(servRef));
         }
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to