added generic actor scheduler
This commit is contained in:
parent
fc3943580c
commit
69aeb2ad35
6 changed files with 4307 additions and 3648 deletions
3
akka.iml
3
akka.iml
|
|
@ -5,10 +5,9 @@
|
||||||
<configuration />
|
<configuration />
|
||||||
</facet>
|
</facet>
|
||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
|
||||||
<output url="file://$MODULE_DIR$/target/classes" />
|
<output url="file://$MODULE_DIR$/target/classes" />
|
||||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||||
<exclude-output />
|
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
</content>
|
</content>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module relativePaths="true" MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
<module relativePaths="true" MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
|
||||||
<output url="file://$MODULE_DIR$/target/classes" />
|
<output url="file://$MODULE_DIR$/target/classes" />
|
||||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
|
|
@ -12,26 +12,27 @@
|
||||||
<orderEntry type="module" module-name="akka-kernel" exported="" />
|
<orderEntry type="module" module-name="akka-kernel" exported="" />
|
||||||
<orderEntry type="module" module-name="akka-util-java" exported="" />
|
<orderEntry type="module" module-name="akka-util-java" exported="" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-core:2.0-beta-4" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-core:2.0-beta-4" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-jsr250:2.0-SNAPSHOT" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: javax.annotation:jsr250-api:1.0" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: com.google.protobuf:protobuf-java:2.1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.google.protobuf:protobuf-java:2.1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.scala-lang:scala-library:2.7.5" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.scala-lang:scala-library:2.7.5" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: org.codehaus.aspectwerkz:aspectwerkz-jdk5:2.1" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: com.twitter:scala-stats:1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: net.lag:configgy:1.3" level="project" />
|
<orderEntry type="library" exported="" name="Maven: net.lag:configgy:1.3" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.scala-lang:scala-compiler:2.7.4" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.scala-lang:scala-compiler:2.7.4" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.scala-tools:vscaladoc:1.1-md-3" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.scala-tools:vscaladoc:1.1-md-3" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: markdownj:markdownj:1.0.2b4-0.3.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: markdownj:markdownj:1.0.2b4-0.3.0" level="project" />
|
||||||
<orderEntry type="library" name="Maven: junit:junit:4.5" level="project" />
|
<orderEntry type="library" name="Maven: junit:junit:4.5" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.scala-tools.testing:specs:1.4.4" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.scala-tools.testing:specs:1.4.4" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guiceyfruit-core:2.0" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-all:2.0" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: javax.annotation:com.springsource.javax.annotation:1.0.0" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: org.aopalliance:com.springsource.org.aopalliance:1.0.0" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: com.google.code.google-collections:google-collect:snapshot-20080530" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.google.code.google-collections:google-collect:snapshot-20080530" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: cglib:cglib:2.2" level="project" />
|
<orderEntry type="library" exported="" name="Maven: cglib:cglib:2.2" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: asm:asm:3.1" level="project" />
|
<orderEntry type="library" exported="" name="Maven: asm:asm:3.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: aopalliance:aopalliance:1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: aopalliance:aopalliance:1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.apache.camel:camel-core:2.0-SNAPSHOT" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.apache.camel:camel-core:2.0-SNAPSHOT" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: commons-logging:commons-logging-api:1.1" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: javax.xml.bind:jaxb-api:2.1" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.10" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.GA" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.GA" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.apache:zookeeper:3.1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.apache:zookeeper:3.1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.scala-tools:javautils:2.7.4-0.1" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.scala-tools:javautils:2.7.4-0.1" level="project" />
|
||||||
|
|
@ -39,13 +40,10 @@
|
||||||
<orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: sbinary:sbinary:0.3" level="project" />
|
<orderEntry type="library" exported="" name="Maven: sbinary:sbinary:0.3" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.twitter:scala-json:1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.twitter:scala-json:1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.apache.cassandra:cassandra:0.4.0-dev" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.mongodb:mongo:0.6" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: org.apache.cassandra:cassandra:0.4.0-trunk" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.facebook:thrift:1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.facebook:thrift:1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.facebook:fb303:1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.facebook:fb303:1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: commons-pool:commons-pool:1.5.1" level="project" />
|
<orderEntry type="library" exported="" name="Maven: commons-pool:commons-pool:1.5.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9" level="project" />
|
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9" level="project" />
|
||||||
|
|
@ -62,10 +60,6 @@
|
||||||
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-json:1.0.3" level="project" />
|
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-json:1.0.3" level="project" />
|
||||||
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.0.1" level="project" />
|
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.0.1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
|
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.10" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-asl:0.9.4" level="project" />
|
<orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-asl:0.9.4" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.sun.jersey.contribs:jersey-scala:1.1.2-ea-SNAPSHOT" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.sun.jersey.contribs:jersey-scala:1.1.2-ea-SNAPSHOT" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.atmosphere:atmosphere-core:0.3" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.atmosphere:atmosphere-core:0.3" level="project" />
|
||||||
|
|
@ -75,8 +69,8 @@
|
||||||
<orderEntry type="library" exported="" name="Maven: org.slf4j:slf4j-api:1.4.3" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.slf4j:slf4j-api:1.4.3" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: log4j:log4j:1.2.13" level="project" />
|
<orderEntry type="library" exported="" name="Maven: log4j:log4j:1.2.13" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: commons-logging:commons-logging:1.0.4" level="project" />
|
<orderEntry type="library" exported="" name="Maven: commons-logging:commons-logging:1.0.4" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-client:1.1.0-ea" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-utils:1.9.9" level="project" />
|
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-utils:1.9.9" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-client:1.1.0-ea" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-atom:1.0.3" level="project" />
|
<orderEntry type="library" name="Maven: com.sun.jersey:jersey-atom:1.0.3" level="project" />
|
||||||
<orderEntry type="library" name="Maven: rome:rome:0.9" level="project" />
|
<orderEntry type="library" name="Maven: rome:rome:0.9" level="project" />
|
||||||
<orderEntry type="library" name="Maven: jdom:jdom:1.0" level="project" />
|
<orderEntry type="library" name="Maven: jdom:jdom:1.0" level="project" />
|
||||||
|
|
|
||||||
75
kernel/src/main/scala/util/Scheduler.scala
Normal file
75
kernel/src/main/scala/util/Scheduler.scala
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2009 Scalable Solutions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package se.scalablesolutions.akka.kernel.util
|
||||||
|
|
||||||
|
import java.util.concurrent._
|
||||||
|
import kernel.actor.{OneForOneStrategy, Actor}
|
||||||
|
|
||||||
|
import org.scala_tools.javautils.Imports._
|
||||||
|
|
||||||
|
case object Schedule
|
||||||
|
case object UnSchedule
|
||||||
|
case class SchedulerException(msg: String, e: Throwable) extends RuntimeException(msg, e)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Based on David Pollak's ActorPing class in the Lift Project.
|
||||||
|
* Licensed under Apache 2 License.
|
||||||
|
*/
|
||||||
|
class ScheduleActor(val receiver: Actor, val future: ScheduledFuture[AnyRef]) extends Actor with Logging {
|
||||||
|
receiver ! Schedule
|
||||||
|
|
||||||
|
def receive: PartialFunction[Any, Unit] = {
|
||||||
|
case UnSchedule =>
|
||||||
|
Scheduler.stopSupervising(this)
|
||||||
|
future.cancel(true)
|
||||||
|
stop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object Scheduler extends Actor {
|
||||||
|
private var service = Executors.newSingleThreadScheduledExecutor(SchedulerThreadFactory)
|
||||||
|
private val schedulers = new ConcurrentHashMap[Actor, Actor]
|
||||||
|
faultHandler = Some(OneForOneStrategy(5, 5000))
|
||||||
|
trapExit = true
|
||||||
|
|
||||||
|
def schedule(receiver: Actor, message: AnyRef, initialDelay: Long, delay: Long, timeUnit: TimeUnit) = {
|
||||||
|
try {
|
||||||
|
startLink(new ScheduleActor(
|
||||||
|
receiver,
|
||||||
|
service.scheduleAtFixedRate(new java.lang.Runnable {
|
||||||
|
def run = receiver ! message;
|
||||||
|
}, initialDelay, delay, timeUnit).asInstanceOf[ScheduledFuture[AnyRef]]))
|
||||||
|
} catch {
|
||||||
|
case e => throw SchedulerException(message + " could not be scheduled on " + receiver, e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def restart = service = Executors.newSingleThreadScheduledExecutor(SchedulerThreadFactory)
|
||||||
|
|
||||||
|
def stopSupervising(actor: Actor) = {
|
||||||
|
unlink(actor)
|
||||||
|
schedulers.remove(actor)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def shutdown = {
|
||||||
|
schedulers.values.asScala.foreach(_ ! UnSchedule)
|
||||||
|
service.shutdown
|
||||||
|
}
|
||||||
|
|
||||||
|
def receive: PartialFunction[Any, Unit] = {
|
||||||
|
case _ => {} // ignore all messages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private object SchedulerThreadFactory extends ThreadFactory {
|
||||||
|
private var count = 0
|
||||||
|
val threadFactory = Executors.defaultThreadFactory()
|
||||||
|
def newThread(r: Runnable): Thread = {
|
||||||
|
val thread = threadFactory.newThread(r)
|
||||||
|
thread.setName("Scheduler-" + count)
|
||||||
|
thread.setDaemon(true)
|
||||||
|
thread
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,21 +9,21 @@
|
||||||
<output url="file://$MODULE_DIR$/target/classes" />
|
<output url="file://$MODULE_DIR$/target/classes" />
|
||||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/scala" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/config" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/config" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/scala" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/test/scala" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/test/scala" isTestSource="true" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" level="project" />
|
<orderEntry type="library" exported="" name="Maven: se.scalablesolutions.akka:akka-kernel:0.5" level="project" />
|
||||||
<orderEntry type="module" module-name="akka-kernel" exported="" />
|
<orderEntry type="library" exported="" name="Maven: se.scalablesolutions.akka:akka-util-java:0.5" level="project" />
|
||||||
<orderEntry type="module" module-name="akka-util-java" exported="" />
|
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-core:2.0-beta-4" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-core:2.0-beta-4" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-jsr250:2.0-SNAPSHOT" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-jsr250:2.0-SNAPSHOT" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: javax.annotation:jsr250-api:1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: javax.annotation:jsr250-api:1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.google.protobuf:protobuf-java:2.1.0" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.google.protobuf:protobuf-java:2.1.0" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.scala-lang:scala-library:2.7.5" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.scala-lang:scala-library:2.7.5" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: net.lag:configgy:1.3" level="project" />
|
<orderEntry type="library" exported="" name="Maven: net.lag:configgy:1.3" level="project" />
|
||||||
<orderEntry type="library" name="Maven: org.scala-lang:scala-compiler:2.7.5" level="project" />
|
<orderEntry type="library" name="Maven: org.scala-lang:scala-compiler:2.7.5" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.scala-tools:vscaladoc:1.1-md-3" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.scala-tools:vscaladoc:1.1-md-3" level="project" />
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue