diff --git a/akka-spring/src/main/resources/se/scalablesolutions/akka/spring/akka-0.10.xsd b/akka-spring/src/main/resources/se/scalablesolutions/akka/spring/akka-0.10.xsd
index 76cd477a10..fc83bea3e3 100644
--- a/akka-spring/src/main/resources/se/scalablesolutions/akka/spring/akka-0.10.xsd
+++ b/akka-spring/src/main/resources/se/scalablesolutions/akka/spring/akka-0.10.xsd
@@ -76,6 +76,7 @@
+
diff --git a/akka-spring/src/main/scala/AkkaSpringConfigurationTags.scala b/akka-spring/src/main/scala/AkkaSpringConfigurationTags.scala
index 6b598a4a31..e432edaf23 100644
--- a/akka-spring/src/main/scala/AkkaSpringConfigurationTags.scala
+++ b/akka-spring/src/main/scala/AkkaSpringConfigurationTags.scala
@@ -55,6 +55,7 @@ object AkkaSpringConfigurationTags {
val NAME = "name"
val REF = "ref"
val TYPE = "type"
+ val AGGREGATE = "aggregate" // HawtDispatcher
// thread pool attributes
val QUEUE = "queue"
diff --git a/akka-spring/src/main/scala/DispatcherFactoryBean.scala b/akka-spring/src/main/scala/DispatcherFactoryBean.scala
index 5eafdda4f3..273d8d38b8 100644
--- a/akka-spring/src/main/scala/DispatcherFactoryBean.scala
+++ b/akka-spring/src/main/scala/DispatcherFactoryBean.scala
@@ -22,7 +22,7 @@ object DispatcherFactoryBean {
case REACTOR_BASED_THREAD_POOL_EVENT_DRIVEN => Dispatchers.newReactorBasedThreadPoolEventDrivenDispatcher(properties.name)
case REACTOR_BASED_SINGLE_THREAD_EVENT_DRIVEN => Dispatchers.newReactorBasedSingleThreadEventDrivenDispatcher(properties.name)
case THREAD_BASED => throw new IllegalArgumentException("not implemented yet") //FIXME
- case HAWT => throw new IllegalArgumentException("not implemented yet") //FIXME
+ case HAWT => Dispatchers.newHawtDispatcher(properties.aggregate)
case _ => throw new IllegalArgumentException("unknown dispatcher type")
}
if ((properties.threadPool != null) && (properties.threadPool.queue != null)) {
diff --git a/akka-spring/src/main/scala/DispatcherParser.scala b/akka-spring/src/main/scala/DispatcherParser.scala
index c3f802018e..a8ffdd4886 100644
--- a/akka-spring/src/main/scala/DispatcherParser.scala
+++ b/akka-spring/src/main/scala/DispatcherParser.scala
@@ -28,7 +28,7 @@ trait DispatcherParser extends BeanParser {
throw new IllegalArgumentException("Referenced dispatcher not found: '" + ref + "'")
}
}
- properties.name = mandatory(dispatcherElement, NAME)
+
properties.dispatcherType = mandatory(dispatcherElement, TYPE)
if (properties.dispatcherType == THREAD_BASED) {
if ((dispatcherElement.getParentNode.getNodeName != "akka:typed-actor") &&
@@ -36,6 +36,16 @@ trait DispatcherParser extends BeanParser {
throw new IllegalArgumentException("Thread based dispatcher must be nested in typed-actor element!")
}
}
+
+ if (properties.dispatcherType == HAWT) { // no name for HawtDispatcher
+ properties.name = dispatcherElement.getAttribute(NAME)
+ if (dispatcherElement.hasAttribute(AGGREGATE)) {
+ properties.aggregate = dispatcherElement.getAttribute(AGGREGATE).toBoolean
+ }
+ } else {
+ properties.name = mandatory(dispatcherElement, NAME)
+ }
+
val threadPoolElement = DomUtils.getChildElementByTagName(dispatcherElement, THREAD_POOL_TAG);
if (threadPoolElement != null) {
if (properties.dispatcherType == REACTOR_BASED_SINGLE_THREAD_EVENT_DRIVEN ||
diff --git a/akka-spring/src/main/scala/DispatcherProperties.scala b/akka-spring/src/main/scala/DispatcherProperties.scala
index e35bb62d27..183b3825bb 100644
--- a/akka-spring/src/main/scala/DispatcherProperties.scala
+++ b/akka-spring/src/main/scala/DispatcherProperties.scala
@@ -14,6 +14,7 @@ class DispatcherProperties {
var dispatcherType: String = ""
var name: String = ""
var threadPool: ThreadPoolProperties = _
+ var aggregate = true
/**
* Sets the properties to the given builder.
diff --git a/akka-spring/src/test/resources/dispatcher-config.xml b/akka-spring/src/test/resources/dispatcher-config.xml
index 67d48b0183..2d295f7614 100644
--- a/akka-spring/src/test/resources/dispatcher-config.xml
+++ b/akka-spring/src/test/resources/dispatcher-config.xml
@@ -69,8 +69,8 @@ http://scalablesolutions.se/akka/akka-0.10.xsd">
-
+
+