|
Akka/Scala example source code file (OsgiActorSystemFactory.scala)
The OsgiActorSystemFactory.scala Akka example source code
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.osgi
import akka.actor.ActorSystem
import com.typesafe.config.{ ConfigFactory, Config }
import org.osgi.framework.BundleContext
import java.io.File
/**
* Factory class to create ActorSystem implementations in an OSGi environment. This mainly involves dealing with
* bundle classloaders appropriately to ensure that configuration files and classes get loaded properly
*/
class OsgiActorSystemFactory(val context: BundleContext, val fallbackClassLoader: Option[ClassLoader], config: Config = ConfigFactory.empty) {
/*
* Classloader that delegates to the bundle for which the factory is creating an ActorSystem
*/
private val classloader = BundleDelegatingClassLoader(context, fallbackClassLoader)
/**
* Creates the [[akka.actor.ActorSystem]], using the name specified
*/
def createActorSystem(name: String): ActorSystem = createActorSystem(Option(name))
/**
* Creates the [[akka.actor.ActorSystem]], using the name specified.
*
* A default name (`bundle-<bundle id>-ActorSystem`) is assigned when you pass along [[scala.None]] instead.
*/
def createActorSystem(name: Option[String]): ActorSystem =
ActorSystem(actorSystemName(name), actorSystemConfig(context), classloader)
/**
* Strategy method to create the Config for the ActorSystem
* ensuring that the default/reference configuration is loaded from the akka-actor bundle.
* Configuration files found in akka-actor bundle
*/
def actorSystemConfig(context: BundleContext): Config = {
config.withFallback(ConfigFactory.load(classloader).withFallback(ConfigFactory.defaultReference(OsgiActorSystemFactory.akkaActorClassLoader)))
}
/**
* Determine the name for the [[akka.actor.ActorSystem]]
* Returns a default value of `bundle-<bundle id>-ActorSystem` is no name is being specified
*/
def actorSystemName(name: Option[String]): String =
name.getOrElse("bundle-%s-ActorSystem".format(context.getBundle.getBundleId))
}
object OsgiActorSystemFactory {
/**
* Class loader of akka-actor bundle.
*/
def akkaActorClassLoader = classOf[ActorSystemActivator].getClassLoader
/*
* Create an [[OsgiActorSystemFactory]] instance to set up Akka in an OSGi environment
*/
def apply(context: BundleContext, config: Config): OsgiActorSystemFactory = new OsgiActorSystemFactory(context, Some(akkaActorClassLoader), config)
}
Other Akka source code examplesHere is a short list of links related to this Akka OsgiActorSystemFactory.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.