--- /dev/null
+version = 0.0.2-SNAPSHOT
+
+# Actor subsystem
+actor.provider.class=gr.grnet.aquarium.actor.SimpleLocalActorProvider
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2011 GRNET S.A. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and
+ * documentation are those of the authors and should not be
+ * interpreted as representing official policies, either expressed
+ * or implied, of GRNET S.A.
+ */
+
+package gr.grnet.aquarium
+
+import com.ckkloverdos.props.Props
+
+/**
+ *
+ * @author Christos KK Loverdos <loverdos@gmail.com>.
+ */
+trait Configurable {
+ def configure(props: Props): Unit
+}
\ No newline at end of file
package gr.grnet.aquarium
+import actor.ActorProvider
import com.ckkloverdos.resource._
import com.ckkloverdos.sys.SysProp
-import com.ckkloverdos.maybe.{Failed, Just, NoVal}
+import com.ckkloverdos.props.Props
+import com.ckkloverdos.maybe.{Maybe, Failed, Just, NoVal}
+import com.ckkloverdos.convert.Converters.{DefaultConverters => TheDefaultConverters}
/**
* The master configurator. Responsible to load all of application configuration and provide the relevant services.
*
* @author Christos KK Loverdos <loverdos@gmail.com>.
*/
-class MasterConf(masterConf: StreamResource) {
+class MasterConf(props: Props) {
+ import MasterConf.Keys
+
+ private[this] val _actorProvider: ActorProvider = {
+ val className = props.getEx(Keys.actor_provider_class)
+ val actorProvider = defaultClassLoader.loadClass(className).newInstance().asInstanceOf[ActorProvider]
+
+ actorProvider match {
+ case configurable: Configurable ⇒
+ configurable configure props
+ }
+
+ actorProvider
+ }
+
+ def defaultClassLoader = Thread.currentThread().getContextClassLoader
+
+ def actorProvider = _actorProvider
}
object MasterConf {
+ implicit val DefaultConverters = TheDefaultConverters
+
val MasterConfName = "aquarium.properties"
/**
}
}
- lazy val MasterConf = new MasterConf(MasterConfResource)
+ lazy val MasterConfProps = {
+ val maybeProps = Props apply MasterConfResource
+ maybeProps match {
+ case Just(props) ⇒
+ props
+ case NoVal ⇒
+ throw new RuntimeException("Could not load master configuration file: %s".format(MasterConfName))
+ case Failed(e, m) ⇒
+ throw new RuntimeException(m, e)
+ }
+ }
+
+ lazy val MasterConf = {
+ Maybe(new MasterConf(MasterConfProps)) match {
+ case Just(masterConf) ⇒
+ masterConf
+ case NoVal ⇒
+ throw new RuntimeException("Could not initialize master configuration file: %s".format(MasterConfName))
+ case Failed(e, m) ⇒
+ throw new RuntimeException(m, e)
+ }
+ }
+
+ /**
+ * Defines the names of all the known keys inside the master properties file.
+ */
+ final object Keys {
+ /**
+ * The Aquarium version. Will be reported in any due occasion.
+ */
+ final val version = "version"
+
+ /**
+ * The fully qualified name of the class that implements the `ActorProvider`.
+ * Will be instantiated reflectively and should have a public default constructor.
+ */
+ final val actor_provider_class = "actor.provider.class"
+ }
}
\ No newline at end of file