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"> - + +