From 59bb23206147a0d10e5fe84c7dc16a484a548448 Mon Sep 17 00:00:00 2001 From: jboner Date: Fri, 30 Oct 2009 22:39:26 +0100 Subject: [PATCH] refactored and cleaned up --- .../main/scala/stm/TransactionalState.scala | 3 - .../scalablesolutions/akka/api/RestTest.java | 2 +- akka-kernel/src/main/scala/AkkaServlet.scala | 84 +-- akka-kernel/src/main/scala/Kernel.scala | 11 +- .../src/main/scala/CassandraSession.scala | 8 +- .../src/main/scala/CassandraStorage.scala | 6 - .../scala/ActorComponentProviderFactory.scala | 6 +- akka.iws | 578 +++++++++++++----- config/akka-reference.conf | 4 +- config/storage-conf.xml | 476 +++++++-------- 10 files changed, 733 insertions(+), 445 deletions(-) diff --git a/akka-actors/src/main/scala/stm/TransactionalState.scala b/akka-actors/src/main/scala/stm/TransactionalState.scala index 2081e04fdd..6a0e7af2e1 100644 --- a/akka-actors/src/main/scala/stm/TransactionalState.scala +++ b/akka-actors/src/main/scala/stm/TransactionalState.scala @@ -4,12 +4,9 @@ package se.scalablesolutions.akka.state -import se.scalablesolutions.akka.stm.TransactionManagement import se.scalablesolutions.akka.stm.Transaction.atomic import se.scalablesolutions.akka.collection._ -import org.multiverse.templates.AtomicTemplate -import org.multiverse.api.Transaction import org.multiverse.datastructures.refs.manual.Ref; import org.codehaus.aspectwerkz.proxy.Uuid diff --git a/akka-fun-test-java/src/test/java/se/scalablesolutions/akka/api/RestTest.java b/akka-fun-test-java/src/test/java/se/scalablesolutions/akka/api/RestTest.java index 0ba51ab239..c92735dba0 100644 --- a/akka-fun-test-java/src/test/java/se/scalablesolutions/akka/api/RestTest.java +++ b/akka-fun-test-java/src/test/java/se/scalablesolutions/akka/api/RestTest.java @@ -60,7 +60,7 @@ public class RestTest extends TestCase { */ private static SelectorThread startJersey() { try { - Servlet servlet = new se.scalablesolutions.akka.rest.AkkaServlet(); + Servlet servlet = new se.scalablesolutions.akka.AkkaServlet(); ServletAdapter adapter = new ServletAdapter(); adapter.setServletInstance(servlet); adapter.setContextPath(URI.getPath()); diff --git a/akka-kernel/src/main/scala/AkkaServlet.scala b/akka-kernel/src/main/scala/AkkaServlet.scala index 46a26bfcd4..bbfecbaf7c 100755 --- a/akka-kernel/src/main/scala/AkkaServlet.scala +++ b/akka-kernel/src/main/scala/AkkaServlet.scala @@ -2,9 +2,10 @@ * Copyright (C) 2009 Scalable Solutions. */ -package se.scalablesolutions.akka.rest +package se.scalablesolutions.akka import se.scalablesolutions.akka.config.ConfiguratorRepository +import se.scalablesolutions.akka.rest.ActorComponentProviderFactory import se.scalablesolutions.akka.util.Logging import com.sun.jersey.api.core.ResourceConfig @@ -14,58 +15,63 @@ import com.sun.jersey.spi.container.WebApplication import javax.servlet.{ServletConfig} import javax.servlet.http.{HttpServletRequest, HttpServletResponse} -import org.atmosphere.cpr.{AtmosphereServletProcessor, AtmosphereResource, AtmosphereResourceEvent} -import org.atmosphere.cpr.AtmosphereServlet.AtmosphereHandlerWrapper -import org.atmosphere.container.GrizzlyCometSupport +import org.atmosphere.cpr.{AtmosphereServlet, AtmosphereServletProcessor, AtmosphereResource, AtmosphereResourceEvent} import org.atmosphere.handler.{ReflectorServletProcessor, AbstractReflectorAtmosphereHandler} -import org.atmosphere.core.{JerseyBroadcaster} - -import java.net.URLClassLoader -import java.io.InputStream - -import scala.collection.jcl.Conversions._ +import org.atmosphere.core.JerseyBroadcaster /** + * Akka's servlet to be used when deploying actors exposed as REST services in a standard servlet container, + * e.g. not using the Akka Kernel. + * * @author Jonas Bonér */ class AkkaServlet extends ServletContainer with Logging { - override def initiate(rc: ResourceConfig, wa: WebApplication) = { - akka.Kernel.boot // will boot if not already booted by 'main' + import org.scala_tools.javautils.Imports._ + + override def initiate(resourceConfig: ResourceConfig, webApplication: WebApplication) = { + Kernel.boot // will boot if not already booted by 'main' + val configurators = ConfiguratorRepository.getConfigurators - rc.getClasses.addAll(configurators.flatMap(_.getComponentInterfaces)) - rc.getProperties.put("com.sun.jersey.spi.container.ResourceFilters", akka.Config.config.getString("akka.rest.filters").getOrElse("")) + resourceConfig.getClasses.addAll(configurators.flatMap(_.getComponentInterfaces).asJava) + resourceConfig.getProperties.put( + "com.sun.jersey.spi.container.ResourceFilters", + Config.config.getList("akka.rest.filters").mkString(",")) - wa.initiate(rc, new ActorComponentProviderFactory(configurators)) + webApplication.initiate(resourceConfig, new ActorComponentProviderFactory(configurators)) } } +/** + * Akka's Comet servlet to be used when deploying actors exposed as Comet (and REST) services in a + * standard servlet container, e.g. not using the Akka Kernel. + *

+ * Used by the Akka Kernel to bootstrap REST and Comet. + */ class AkkaCometServlet extends org.atmosphere.cpr.AtmosphereServlet { - val servlet = new AkkaServlet with AtmosphereServletProcessor { + val servlet = new AkkaServlet with AtmosphereServletProcessor { - //Delegate to implement the behavior for AtmosphereHandler - private val handler = new AbstractReflectorAtmosphereHandler { - override def onRequest(event: AtmosphereResource[HttpServletRequest, HttpServletResponse]) { - if(event ne null) - { - event.getRequest.setAttribute(ReflectorServletProcessor.ATMOSPHERE_RESOURCE, event) - event.getRequest.setAttribute(ReflectorServletProcessor.ATMOSPHERE_HANDLER, this) - service(event.getRequest, event.getResponse) - } - } - } - - override def onStateChange(event : AtmosphereResourceEvent[HttpServletRequest, HttpServletResponse] ) { - if(event ne null) - handler onStateChange event - } - - override def onRequest(resource: AtmosphereResource[HttpServletRequest, HttpServletResponse]) { - handler onRequest resource - } + //Delegate to implement the behavior for AtmosphereHandler + private val handler = new AbstractReflectorAtmosphereHandler { + override def onRequest(event: AtmosphereResource[HttpServletRequest, HttpServletResponse]) { + if (event ne null) { + event.getRequest.setAttribute(ReflectorServletProcessor.ATMOSPHERE_RESOURCE, event) + event.getRequest.setAttribute(ReflectorServletProcessor.ATMOSPHERE_HANDLER, this) + service(event.getRequest, event.getResponse) } - - override def loadConfiguration(sc : ServletConfig) { - atmosphereHandlers.put("/*", new AtmosphereHandlerWrapper(servlet, new JerseyBroadcaster)) + } } + + override def onStateChange(event: AtmosphereResourceEvent[HttpServletRequest, HttpServletResponse]) { + if (event ne null) handler onStateChange event + } + + override def onRequest(resource: AtmosphereResource[HttpServletRequest, HttpServletResponse]) { + handler onRequest resource + } + } + + override def loadConfiguration(sc: ServletConfig) { + atmosphereHandlers.put("/*", new AtmosphereServlet.AtmosphereHandlerWrapper(servlet, new JerseyBroadcaster)) + } } diff --git a/akka-kernel/src/main/scala/Kernel.scala b/akka-kernel/src/main/scala/Kernel.scala index c607fbe375..e5d85fb4df 100644 --- a/akka-kernel/src/main/scala/Kernel.scala +++ b/akka-kernel/src/main/scala/Kernel.scala @@ -12,10 +12,8 @@ import javax.ws.rs.core.UriBuilder import java.io.File import java.net.URLClassLoader -import rest.AkkaCometServlet -import nio.RemoteServer -import state.CassandraStorage -import util.Logging +import se.scalablesolutions.akka.nio.RemoteServer +import se.scalablesolutions.akka.util.Logging /** * @author Jonas Bonér @@ -112,19 +110,20 @@ object Kernel extends Logging { private def printBanner = { log.info( - """============================== +"""============================== __ __ _____ | | _| | _______ \__ \ | |/ / |/ /\__ \ / __ \| <| < / __ \_ (____ /__|_ \__|_ \(____ / \/ \/ \/ \/ - """) +""") log.info(" Running version " + VERSION) log.info("==============================") } private def cassandraBenchmark = { + import se.scalablesolutions.akka.state.CassandraStorage val NR_ENTRIES = 100000 println("=================================================") diff --git a/akka-persistence/src/main/scala/CassandraSession.scala b/akka-persistence/src/main/scala/CassandraSession.scala index 359b15619d..6a98228421 100644 --- a/akka-persistence/src/main/scala/CassandraSession.scala +++ b/akka-persistence/src/main/scala/CassandraSession.scala @@ -6,10 +6,10 @@ package se.scalablesolutions.akka.state import java.io.{Flushable, Closeable} -import util.Logging -import util.Helpers._ -import serialization.Serializer -import akka.Config.config +import se.scalablesolutions.akka.util.Logging +import se.scalablesolutions.akka.util.Helpers._ +import se.scalablesolutions.akka.serialization.Serializer +import se.scalablesolutions.akka.Config.config import scala.collection.mutable.Map diff --git a/akka-persistence/src/main/scala/CassandraStorage.scala b/akka-persistence/src/main/scala/CassandraStorage.scala index 370f573934..0769053909 100644 --- a/akka-persistence/src/main/scala/CassandraStorage.scala +++ b/akka-persistence/src/main/scala/CassandraStorage.scala @@ -4,21 +4,15 @@ package se.scalablesolutions.akka.state -import java.io.{Flushable, Closeable} - import se.scalablesolutions.akka.util.Logging import se.scalablesolutions.akka.util.Helpers._ import se.scalablesolutions.akka.serialization.Serializer import se.scalablesolutions.akka.Config.config -import org.apache.cassandra.db.ColumnFamily import org.apache.cassandra.service._ - import org.apache.thrift.transport._ import org.apache.thrift.protocol._ -import scala.collection.mutable.ArrayBuffer - /** * @author Jonas Bonér */ diff --git a/akka-rest/src/main/scala/ActorComponentProviderFactory.scala b/akka-rest/src/main/scala/ActorComponentProviderFactory.scala index 5917ea2ea8..7a56cdf76d 100755 --- a/akka-rest/src/main/scala/ActorComponentProviderFactory.scala +++ b/akka-rest/src/main/scala/ActorComponentProviderFactory.scala @@ -4,13 +4,11 @@ package se.scalablesolutions.akka.rest -import javax.ws.rs.core.Context - import com.sun.jersey.core.spi.component.ioc.{IoCComponentProvider,IoCComponentProviderFactory} import com.sun.jersey.core.spi.component.{ComponentContext} -import config.Configurator -import util.Logging +import se.scalablesolutions.akka.config.Configurator +import se.scalablesolutions.akka.util.Logging class ActorComponentProviderFactory(val configurators: List[Configurator]) extends IoCComponentProviderFactory with Logging { diff --git a/akka.iws b/akka.iws index a51ef5ae12..99032215d7 100644 --- a/akka.iws +++ b/akka.iws @@ -5,14 +5,16 @@ - + - + - + + + - + @@ -100,26 +102,8 @@ - - - - - - - - - - - - - - - - - - - - + + @@ -127,37 +111,37 @@ - - + + - + - - + + - + - - + + - + - - + + - + @@ -178,22 +162,22 @@ @@ -244,8 +228,8 @@ - - + + @@ -267,38 +251,6 @@ - + - + + + @@ -868,8 +1154,6 @@ - - @@ -907,106 +1191,116 @@ - + - - - - - - + - + - - - - - - - - - - - - - - - - + - + - + - + - + - + - - - - - - - - - - - - - - - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/akka-reference.conf b/config/akka-reference.conf index 2018edd7ff..c9394e2748 100644 --- a/config/akka-reference.conf +++ b/config/akka-reference.conf @@ -53,8 +53,8 @@ service = on hostname = "localhost" port = 9998 - filters = "se.scalablesolutions.akka.security.AkkaSecurityFilterFactory" - authenticator = "se.scalablesolutions.akka.security.samples.BasicAuthenticationService" + filters = "[se.scalablesolutions.akka.security.AkkaSecurityFilterFactory]" # List with all servlet filters to use + authenticator = "se.scalablesolutions.akka.security.samples.BasicAuthenticationService" # The authentication service to use diff --git a/config/storage-conf.xml b/config/storage-conf.xml index 86f933936f..9deee41c42 100644 --- a/config/storage-conf.xml +++ b/config/storage-conf.xml @@ -17,253 +17,253 @@ ~ under the License. --> - - - + + + - - akka + + akka - - - - + + + - 0.01 - - - - - - - - - - - - org.apache.cassandra.dht.RandomPartitioner - - - - - - - org.apache.cassandra.locator.EndPointSnitch - - - org.apache.cassandra.locator.RackUnawareStrategy - - - 1 - - - cassandra/commitlog - - cassandra/data - - cassandra/callouts - cassandra/bootstrap - cassandra/staging - - - - - 127.0.0.1 - - - - - - - 5000 - - 128 - - - - - - localhost - - 7000 - - 7001 - - - localhost - - 9160 - - - - - - - - 32 - 8 + 0.01 + - 64 + SuperColumns have a similar CompareSubcolumnsWith attribute. - - 64 - - 0.1 + ByteType: simple sort by byte value. No validation is performed. + AsciiType: like BytesType, but validates that the input can be parsed as US-ASCII. + UTF8Type: A string encoded as UTF8 + LongType: A 64bit long + LexicalUUIDType: a 128bit UUID, compared lexically (by byte value) + TimeUUIDType: a 128bit version 1 UUID, compared by timestamp - - 8 - 32 + (To get the closest approximation to 0.3-style supercolumns, + you would use CompareWith=UTF8Type CompareSubcolumnsWith=LongType.) - - false - - 1000 - + if FlushPeriodInMinutes is configured and positive, it will be + flushed to disk with that period whether it is dirty or not. + This is intended for lightly-used columnfamilies so that they + do not prevent commitlog segments from being purged. - - 864000 + --> + + + + + + + + + + + org.apache.cassandra.dht.RandomPartitioner + + + + + + + org.apache.cassandra.locator.EndPointSnitch + + + org.apache.cassandra.locator.RackUnawareStrategy + + + 1 + + + cassandra/commitlog + + cassandra/data + + cassandra/callouts + cassandra/bootstrap + cassandra/staging + + + + + 127.0.0.1 + + + + + + + 5000 + + 128 + + + + + + localhost + + 7000 + + 7001 + + + localhost + + 9160 + + + + + + + + 32 + 8 + + + 64 + + + 64 + + 0.1 + + + 8 + 32 + + + false + + 1000 + + + + 864000