Rename Configurator to Aquarium
authorChristos KK Loverdos <loverdos@gmail.com>
Wed, 16 May 2012 12:23:30 +0000 (15:23 +0300)
committerChristos KK Loverdos <loverdos@gmail.com>
Wed, 16 May 2012 12:23:30 +0000 (15:23 +0300)
14 files changed:
src/main/scala/gr/grnet/aquarium/Aquarium.scala [moved from src/main/scala/gr/grnet/aquarium/Configurator.scala with 96% similarity]
src/main/scala/gr/grnet/aquarium/Main.scala
src/main/scala/gr/grnet/aquarium/ResourceLocator.scala
src/main/scala/gr/grnet/aquarium/actor/service/rest/RESTActor.scala
src/main/scala/gr/grnet/aquarium/actor/service/user/UserActor.scala
src/main/scala/gr/grnet/aquarium/connector/rabbitmq/RabbitMQConsumer.scala
src/main/scala/gr/grnet/aquarium/connector/rabbitmq/service/RabbitMQService.scala
src/main/scala/gr/grnet/aquarium/logic/accounting/Policy.scala
src/main/scala/gr/grnet/aquarium/logic/accounting/RoleAgreements.scala
src/main/scala/gr/grnet/aquarium/service/RESTActorService.scala
src/main/scala/gr/grnet/aquarium/store/LocalFSEventStore.scala
src/test/scala/gr/grnet/aquarium/StoreConfigurator.scala
src/test/scala/gr/grnet/aquarium/rest/actor/RESTActorTest.scala
src/test/scala/gr/grnet/aquarium/user/UserStateComputationsTest.scala

@@ -46,15 +46,16 @@ import gr.grnet.aquarium.util.{Lifecycle, Loggable, shortNameOfClass}
 import gr.grnet.aquarium.store._
 import gr.grnet.aquarium.connector.rabbitmq.service.RabbitMQService
 import gr.grnet.aquarium.converter.StdConverters
-import com.ckkloverdos.resource.FileStreamResource
 
 /**
- * The master configurator. Responsible to load all of application configuration and provide the relevant services.
+ * This is the Aquarium entry point.
+ *
+ * Responsible to load all of application configuration and provide the relevant services.
  *
  * @author Christos KK Loverdos <loverdos@gmail.com>.
  */
-final class Configurator(val props: Props) extends Loggable {
-  import Configurator.Keys
+final class Aquarium(val props: Props) extends Loggable {
+  import Aquarium.Keys
 
   /**
    * Reflectively provide a new instance of a class and configure it appropriately.
@@ -310,22 +311,22 @@ final class Configurator(val props: Props) extends Loggable {
 
   def storeProvider = _storeProvider
   
-  def withStoreProviderClass[C <: StoreProvider](spc: Class[C]): Configurator = {
+  def withStoreProviderClass[C <: StoreProvider](spc: Class[C]): Aquarium = {
     val map = this.props.map
     val newMap = map.updated(Keys.store_provider_class, spc.getName)
     val newProps = new Props(newMap)
-    new Configurator(newProps)
+    new Aquarium(newProps)
   }
 
   def eventsStoreFolder = _eventsStoreFolder
 
-  def adminCookie: MaybeOption[String] = props.get(Configurator.Keys.admin_cookie) match {
+  def adminCookie: MaybeOption[String] = props.get(Aquarium.Keys.admin_cookie) match {
     case just @ Just(_) ⇒ just
     case _ ⇒ NoVal
   }
 }
 
-object Configurator {
+object Aquarium {
   implicit val DefaultConverters = TheDefaultConverters
 
   final val PolicyConfName = ResourceLocator.ResourceNames.POLICY_YAML
@@ -356,8 +357,11 @@ object Configurator {
     }
   }
 
-  lazy val MasterConfigurator = {
-    Maybe(new Configurator(AquariumProperties)) match {
+  /**
+   * The main [[gr.grnet.aquarium.Aquarium]] instance.
+   */
+  final lazy val Instance = {
+    Maybe(new Aquarium(AquariumProperties)) match {
       case Just(masterConf) ⇒
         masterConf
 
index cdfd770..6128963 100644 (file)
@@ -77,10 +77,10 @@ object Main extends LazyLoggable {
       throw error
     }
 
-    val mc = Configurator.MasterConfigurator
+    val mc = Aquarium.Instance
 
     for(folder ← mc.eventsStoreFolder) {
-      logger.info("{} = {}", Configurator.Keys.events_store_folder, folder)
+      logger.info("{} = {}", Aquarium.Keys.events_store_folder, folder)
     }
     mc.eventsStoreFolder.throwMe // on error
 
index 4710cd1..80878f2 100644 (file)
@@ -46,7 +46,7 @@ import com.ckkloverdos.resource.{FileStreamResource, StreamResource, CompositeSt
 /**
  * Locates resources.
  *
- * This code was initially in [[gr.grnet.aquarium.Configurator]].
+ * This code was initially in [[gr.grnet.aquarium.Aquarium]].
  *
  * @author Christos KK Loverdos <loverdos@gmail.com>
  */
index 5c2259d..8fd252a 100644 (file)
@@ -40,7 +40,7 @@ package rest
 import cc.spray.can.HttpMethods.GET
 import cc.spray.can._
 import gr.grnet.aquarium.util.Loggable
-import gr.grnet.aquarium.Configurator
+import gr.grnet.aquarium.Aquarium
 import akka.actor.Actor
 import gr.grnet.aquarium.actor.{RESTRole, RoleableActor, RouterRole}
 import RESTPaths.{UserBalancePath, UserStatePath, AdminPingAll}
@@ -107,10 +107,10 @@ class RESTActor private(_id: String) extends RoleableActor with Loggable {
           callRouter(GetUserStateRequest(userId, millis), responder)
 
         case AdminPingAll() ⇒
-          val mc = Configurator.MasterConfigurator
+          val mc = Aquarium.Instance
           mc.adminCookie match {
             case Just(adminCookie) ⇒
-              headers.find(_.name.toLowerCase == Configurator.HTTP.RESTAdminHeaderNameLowerCase) match {
+              headers.find(_.name.toLowerCase == Aquarium.HTTP.RESTAdminHeaderNameLowerCase) match {
                 case Some(cookieHeader) if(cookieHeader.value == adminCookie) ⇒
                   callRouter(PingAllRequest(), responder)
 
@@ -143,7 +143,7 @@ class RESTActor private(_id: String) extends RoleableActor with Loggable {
 
   private[this]
   def callRouter(message: RouterRequestMessage, responder: RequestResponder): Unit = {
-    val configurator = Configurator.MasterConfigurator
+    val configurator = Aquarium.Instance
     val actorProvider = configurator.actorProvider
     val router = actorProvider.actorForRole(RouterRole)
     val futureResponse = router ask message
index 77ebfb9..6bc11f9 100644 (file)
@@ -42,7 +42,7 @@ import gr.grnet.aquarium.actor._
 import gr.grnet.aquarium.util.shortClassNameOf
 import message.config.{ActorProviderConfigured, AquariumPropertiesLoaded}
 import akka.config.Supervision.Temporary
-import gr.grnet.aquarium.Configurator
+import gr.grnet.aquarium.Aquarium
 import gr.grnet.aquarium.util.date.{TimeHelpers, MutableDateCalc}
 import gr.grnet.aquarium.actor.message.event.{ProcessResourceEvent, ProcessIMEvent}
 import gr.grnet.aquarium.actor.message.{GetUserStateResponse, GetUserBalanceResponse, GetUserStateRequest, GetUserBalanceRequest}
@@ -79,10 +79,10 @@ class UserActor extends ReflectiveRoleableActor {
 
   def role = UserActorRole
 
-  private[this] def _configurator: Configurator = Configurator.MasterConfigurator
+  private[this] def _configurator: Aquarium = Aquarium.Instance
 
   private[this] def _timestampTheshold =
-    _configurator.props.getLong(Configurator.Keys.user_state_timestamp_threshold).getOr(10000)
+    _configurator.props.getLong(Aquarium.Keys.user_state_timestamp_threshold).getOr(10000)
 
 
   private[this] def _haveUserState = {
index f73167c..02c7aa6 100644 (file)
@@ -40,7 +40,7 @@ import gr.grnet.aquarium.util.{Lifecycle, Loggable}
 import gr.grnet.aquarium.util.{safeUnit, shortClassNameOf}
 import com.rabbitmq.client.{Envelope, Consumer, ShutdownSignalException, ShutdownListener, ConnectionFactory, Channel, Connection}
 import com.rabbitmq.client.AMQP.BasicProperties
-import gr.grnet.aquarium.Configurator
+import gr.grnet.aquarium.Aquarium
 import gr.grnet.aquarium.connector.rabbitmq.eventbus.RabbitMQError
 import gr.grnet.aquarium.service.event.BusEvent
 import gr.grnet.aquarium.connector.handler.{PayloadHandlerExecutor, HandlerResultPanic, HandlerResultRequeue, HandlerResultReject, HandlerResultSuccess, PayloadHandler}
@@ -104,7 +104,7 @@ class RabbitMQConsumer(conf: RabbitMQConsumerConf,
   case object ReconnectStartReason extends StartReason
   case object PingStartReason extends StartReason
 
-  private[this] def timerService = Configurator.MasterConfigurator.timerService
+  private[this] def timerService = Aquarium.Instance.timerService
 
   private[this] def doSafeShutdownSequence(): Unit = {
     _state.set(ShutdownSequence)
@@ -234,7 +234,7 @@ class RabbitMQConsumer(conf: RabbitMQConsumerConf,
   }
 
   private[this] def postBusError(event: BusEvent): Unit = {
-    Configurator.MasterConfigurator.eventBus ! event
+    Aquarium.Instance.eventBus ! event
   }
 
   private[this] def doSchedulePing(): Unit = {
index 901d990..2ea9708 100644 (file)
 package gr.grnet.aquarium.connector.rabbitmq.service
 
 import com.ckkloverdos.props.Props
-import gr.grnet.aquarium.util.date.TimeHelpers
 import gr.grnet.aquarium.util.{Loggable, Lifecycle}
 import gr.grnet.aquarium.util.safeUnit
 import com.rabbitmq.client.Address
-import gr.grnet.aquarium.{Configurator, Configurable}
+import gr.grnet.aquarium.{Aquarium, Configurable}
 import gr.grnet.aquarium.connector.rabbitmq.conf.{TopicExchange, RabbitMQConsumerConf, RabbitMQExchangeType}
 import gr.grnet.aquarium.connector.rabbitmq.service.RabbitMQService.RabbitMQConfKeys
 import com.ckkloverdos.env.{EnvKey, Env}
@@ -65,17 +64,17 @@ class RabbitMQService extends Loggable with Lifecycle with Configurable {
 
   def propertyPrefix = Some(RabbitMQService.PropertiesPrefix)
 
-  def configurator = Configurator.MasterConfigurator
+  def aquarium = Aquarium.Instance
 
-  def eventBus = configurator.eventBus
+  def eventBus = aquarium.eventBus
 
-  def resourceEventStore = configurator.resourceEventStore
+  def resourceEventStore = aquarium.resourceEventStore
 
-  def imEventStore = configurator.imEventStore
+  def imEventStore = aquarium.imEventStore
 
-  def converters = configurator.converters
+  def converters = aquarium.converters
 
-  def router = configurator.actorProvider.actorForRole(RouterRole)
+  def router = aquarium.actorProvider.actorForRole(RouterRole)
 
   /**
    * Configure this instance with the provided properties.
@@ -119,7 +118,7 @@ class RabbitMQService extends Loggable with Lifecycle with Configurable {
 
     val rcHandler = new GenericPayloadHandler[ResourceEventModel, ResourceEventStore#ResourceEvent](
       jsonParser,
-      (payload, error) ⇒ LocalFSEventStore.storeUnparsedResourceEvent(configurator, payload, error),
+      (payload, error) ⇒ LocalFSEventStore.storeUnparsedResourceEvent(aquarium, payload, error),
       rcEventParser,
       rcEvent ⇒ resourceEventStore.insertResourceEvent(rcEvent),
       rcDebugForwardAction
@@ -127,7 +126,7 @@ class RabbitMQService extends Loggable with Lifecycle with Configurable {
 
     val imHandler = new GenericPayloadHandler[IMEventModel, IMEventStore#IMEvent](
       jsonParser,
-      (payload, error) ⇒ LocalFSEventStore.storeUnparsedIMEvent(configurator, payload, error),
+      (payload, error) ⇒ LocalFSEventStore.storeUnparsedIMEvent(aquarium, payload, error),
       imEventParser,
       imEvent ⇒ imEventStore.insertIMEvent(imEvent),
       imDebugForwardAction
index a7abb0b..94f009c 100644 (file)
 package gr.grnet.aquarium.logic.accounting
 
 import dsl.{Timeslot, DSLPolicy, DSL}
-import gr.grnet.aquarium.Configurator._
+import gr.grnet.aquarium.Aquarium._
 import java.io.{InputStream, FileInputStream, File}
 import java.util.Date
 import gr.grnet.aquarium.util.date.TimeHelpers
 import gr.grnet.aquarium.util.Loggable
 import java.util.concurrent.atomic.AtomicReference
-import gr.grnet.aquarium.Configurator
-import gr.grnet.aquarium.Configurator.Keys
+import gr.grnet.aquarium.Aquarium
+import gr.grnet.aquarium.Aquarium.Keys
 import com.ckkloverdos.maybe.{Failed, NoVal, Just}
 import collection.immutable.{TreeMap, SortedMap}
 
@@ -62,8 +62,8 @@ object Policy extends DSL with Loggable {
   /* Pointer to the latest policy */
   private lazy val currentPolicy = {new AtomicReference[DSLPolicy](latestPolicy)}
 
-  /* Configurator to use for loading information about the policy store */
-  private var config: Configurator = _
+  /* Aquarium to use for loading information about the policy store */
+  private var config: Aquarium = _
 
   /**
    * Get the latest defined policy.
@@ -153,7 +153,7 @@ object Policy extends DSL with Loggable {
    * Set the configurator to use for loading policy stores. Should only
    * used for unit testing.
    */
-  def withConfigurator(config: Configurator): Unit =
+  def withConfigurator(config: Aquarium): Unit =
     this.config = config
 
   /**
@@ -163,18 +163,18 @@ object Policy extends DSL with Loggable {
    */
   private[logic] def reloadPolicies: SortedMap[Timeslot, DSLPolicy] =
     if (config == null)
-      reloadPolicies(MasterConfigurator)
+      reloadPolicies(Instance)
     else
       reloadPolicies(config)
 
-  private def reloadPolicies(config: Configurator):
+  private def reloadPolicies(config: Aquarium):
   SortedMap[Timeslot, DSLPolicy] = {
     //1. Load policies from db
     val pol = config.policyStore.loadPolicyEntriesAfter(0)
 
     //2. Check whether policy file has been updated
     val latestPolicyChange = if (pol.isEmpty) 0 else pol.last.validFrom
-    val policyf = MasterConfigurator.findConfigFile(PolicyConfName, Keys.aquarium_policy, PolicyConfName)
+    val policyf = Instance.findConfigFile(PolicyConfName, Keys.aquarium_policy, PolicyConfName)
     var updated = false
 
     if (policyf.exists) {
index d2eb1c7..ea26311 100644 (file)
@@ -37,8 +37,8 @@ package gr.grnet.aquarium.logic.accounting
 
 import dsl.DSLAgreement
 import gr.grnet.aquarium.util.Loggable
-import gr.grnet.aquarium.Configurator
-import gr.grnet.aquarium.Configurator.{MasterConfigurator, Keys}
+import gr.grnet.aquarium.Aquarium
+import gr.grnet.aquarium.Aquarium.{Instance, Keys}
 import io.Source
 import java.io.{InputStream, File}
 import java.util.regex.Pattern
@@ -77,13 +77,13 @@ object RoleAgreements extends Loggable {
    * Load and parse the mappings file
    */
   private[logic] def loadMappings = synchronized {
-    val config = MasterConfigurator.get(Keys.aquarium_role_agreement_map)
-    val configFile = MasterConfigurator.findConfigFile(
-      Configurator.RolesAgreementsName, Keys.aquarium_role_agreement_map,
-      Configurator.RolesAgreementsName)
+    val config = Aquarium.Instance.get(Keys.aquarium_role_agreement_map)
+    val configFile = Aquarium.Instance.findConfigFile(
+      Aquarium.RolesAgreementsName, Keys.aquarium_role_agreement_map,
+      Aquarium.RolesAgreementsName)
 
     def loadFromClasspath: Source = {
-      getClass.getClassLoader.getResourceAsStream(Configurator.RolesAgreementsName) match {
+      getClass.getClassLoader.getResourceAsStream(Aquarium.RolesAgreementsName) match {
         case x: InputStream =>
           logger.warn("Using default role to agreement mappings, this is " +
             "problably not what you want")
index b38f37d..9d3ca22 100644 (file)
@@ -38,9 +38,8 @@ package gr.grnet.aquarium.service
 import gr.grnet.aquarium.actor.RESTRole
 import _root_.akka.actor._
 import cc.spray.can.{ServerConfig, HttpClient, HttpServer}
-import gr.grnet.aquarium.util.date.TimeHelpers
-import gr.grnet.aquarium.util.{LogHelpers, Loggable, Lifecycle}
-import gr.grnet.aquarium.{AquariumInternalError, AquariumException, Configurator}
+import gr.grnet.aquarium.util.{Loggable, Lifecycle}
+import gr.grnet.aquarium.{AquariumInternalError, Aquarium}
 
 /**
  * REST service based on Actors and Spray.
@@ -54,13 +53,13 @@ class RESTActorService extends Lifecycle with Loggable {
   private[this] var _clientActor: ActorRef = _
 
   def start(): Unit = {
-    val mc = Configurator.MasterConfigurator
-    this._port = mc.props.getInt(Configurator.Keys.rest_port).getOr(
+    val aquarium = Aquarium.Instance
+    this._port = aquarium.props.getInt(Aquarium.Keys.rest_port).getOr(
       throw new AquariumInternalError(
-        "%s was not specified in Aquarium properties".format(Configurator.Keys.rest_port)))
+        "%s was not specified in Aquarium properties".format(Aquarium.Keys.rest_port)))
 
     logStoppingF("on port %s", this._port) {
-      this._restActor = mc.actorProvider.actorForRole(RESTRole)
+      this._restActor = aquarium.actorProvider.actorForRole(RESTRole)
       // Start Spray subsystem
       this._serverActor = Actor.actorOf(new HttpServer(ServerConfig(port = this._port))).start()
       this._clientActor = Actor.actorOf(new HttpClient()).start()
index 06dbaa8..7c80cfe 100644 (file)
@@ -35,7 +35,7 @@
 
 package gr.grnet.aquarium.store
 
-import gr.grnet.aquarium.Configurator
+import gr.grnet.aquarium.Aquarium
 import java.io.{FileOutputStream, File}
 import gr.grnet.aquarium.util.{Loggable, stringOfStackTrace}
 import gr.grnet.aquarium.util.date.{TimeHelpers, MutableDateCalc}
@@ -101,7 +101,7 @@ object LocalFSEventStore extends Loggable {
     writeToFile(file, jsonPayload, appendString)
   }
 
-  def storeUnparsedResourceEvent(mc: Configurator, initialPayload: Array[Byte], exception: Throwable): Unit = {
+  def storeUnparsedResourceEvent(mc: Aquarium, initialPayload: Array[Byte], exception: Throwable): Unit = {
     for(root <- mc.eventsStoreFolder) {
       val occurredMDC = new MutableDateCalc(TimeHelpers.nowMillis())
       val occurredString = occurredMDC.toFilename_YYYYMMDDHHMMSSSSS
@@ -112,7 +112,7 @@ object LocalFSEventStore extends Loggable {
     }
   }
 
-  def storeResourceEvent(mc: Configurator, event: ResourceEventModel, initialPayload: Array[Byte]): Unit = {
+  def storeResourceEvent(mc: Aquarium, event: ResourceEventModel, initialPayload: Array[Byte]): Unit = {
     require(event ne null, "Resource event must be not null")
 
     for(root <- mc.eventsStoreFolder) {
@@ -137,7 +137,7 @@ object LocalFSEventStore extends Loggable {
     }
   }
 
-  def storeUnparsedIMEvent(mc: Configurator, initialPayload: Array[Byte], exception: Throwable): Unit = {
+  def storeUnparsedIMEvent(mc: Aquarium, initialPayload: Array[Byte], exception: Throwable): Unit = {
     for(root <- mc.eventsStoreFolder) {
       val occurredMDC = new MutableDateCalc(TimeHelpers.nowMillis())
       val occurredString = occurredMDC.toFilename_YYYYMMDDHHMMSSSSS
@@ -148,7 +148,7 @@ object LocalFSEventStore extends Loggable {
     }
   }
 
-  def storeIMEvent(mc: Configurator, event: IMEventModel, initialPayload: Array[Byte]): Unit = {
+  def storeIMEvent(mc: Aquarium, event: IMEventModel, initialPayload: Array[Byte]): Unit = {
     require(event ne null, "IM event must be not null")
     for(root <- mc.eventsStoreFolder) {
       val occurredMDC = new MutableDateCalc(event.occurredMillis)
index 1dd1a90..95cf7a4 100644 (file)
@@ -47,12 +47,12 @@ import util.Loggable
  */
 trait StoreConfigurator extends Loggable {
 
-  def configurator: Configurator =
+  def configurator: Aquarium =
     LogicTestsAssumptions.propertyValue(PropertyNames.TestStore) match {
-      case "mem" => Configurator.MasterConfigurator.withStoreProviderClass(classOf[MemStore])
-      case "mongo" => Configurator.MasterConfigurator.withStoreProviderClass(classOf[MongoDBStoreProvider])
+      case "mem" => Aquarium.Instance.withStoreProviderClass(classOf[MemStore])
+      case "mongo" => Aquarium.Instance.withStoreProviderClass(classOf[MongoDBStoreProvider])
       case _ =>
         logger.warn("Unknown store type, defaulting to \"mem\"")
-        Configurator.MasterConfigurator.withStoreProviderClass(classOf[MemStore])
+        Aquarium.Instance.withStoreProviderClass(classOf[MemStore])
   }
 }
index d00f424..13a4337 100644 (file)
@@ -46,7 +46,8 @@ import cc.spray.can.{HttpResponse, HttpHeader, HttpRequest}
 import gr.grnet.aquarium.util.makeString
 import gr.grnet.aquarium.converter.StdConverters
 import net.liftweb.json.JsonAST.{JValue, JInt}
-import gr.grnet.aquarium.{AquariumException, LogicTestsAssumptions, Configurator}
+import gr.grnet.aquarium.{AquariumException, LogicTestsAssumptions, Aquarium}
+import org.apache.ivy.util.Configurator
 
 /**
  * 
@@ -58,10 +59,10 @@ class RESTActorTest {
     assumeTrue(LogicTestsAssumptions.EnableSprayTests)
     
     // Initialize configuration subsystem
-    val mc = Configurator.MasterConfigurator
-    mc.startServices()
-    val port = mc.props.getInt(Configurator.Keys.rest_port).getOr(
-      throw new AquariumException("No %s specified in aquarium properties".format(Configurator.Keys.rest_port)))
+    val aquarium = Aquarium.Instance
+    aquarium.startServices()
+    val port = aquarium.props.getInt(Aquarium.Keys.rest_port).getOr(
+      throw new AquariumException("No %s specified in aquarium properties".format(Aquarium.Keys.rest_port)))
     val dialog = SprayHttpDialog("localhost", port)
 
     val pingReq = HttpRequest(method = GET, uri = "/ping", headers = HttpHeader("Content-Type", "text/plain; charset=UTF-8")::Nil)
@@ -84,6 +85,6 @@ class RESTActorTest {
       }
     }
 
-    mc.stopServicesWithDelay(1000)
+    aquarium.stopServicesWithDelay(1000)
   }
 }
\ No newline at end of file
index 133b292..c602707 100644 (file)
@@ -45,9 +45,11 @@ import gr.grnet.aquarium.uid.{UIDGenerator, ConcurrentVMLocalUIDGenerator}
 import com.ckkloverdos.maybe.{Maybe, Just}
 import org.junit.{Assert, Ignore, Test}
 import gr.grnet.aquarium.logic.accounting.algorithm.{ExecutableCostPolicyAlgorithm, CostPolicyAlgorithmCompiler}
-import gr.grnet.aquarium.{AquariumException, Configurator}
+import gr.grnet.aquarium.{AquariumException}
+import gr.grnet.aquarium.Aquarium.{Instance ⇒ AquariumInstance}
 import gr.grnet.aquarium.computation.{UserState, BillingMonthInfo, UserStateComputations}
 import gr.grnet.aquarium.computation.reason.MonthlyBillingCalculation
+import org.apache.ivy.util.Configurator
 
 
 /**
@@ -215,9 +217,9 @@ aquariumpolicy:
   val Synnefo = ClientSim("synnefo")(TheUIDGenerator)
   val Pithos  = ClientSim("pithos" )(TheUIDGenerator)
 
-  val mc = Configurator.MasterConfigurator.withStoreProviderClass(classOf[MemStore])
-  Policy.withConfigurator(mc)
-  val StoreProvider = mc.storeProvider
+  val aquarium = AquariumInstance.withStoreProviderClass(classOf[MemStore])
+  Policy.withConfigurator(aquarium)
+  val StoreProvider = aquarium.storeProvider
   val ResourceEventStore = StoreProvider.resourceEventStore
 
   val StartOfBillingYearDateCalc = new MutableDateCalc(2012,  1, 1)