diff --git a/akka-persistence-cassandra/pom.xml b/akka-persistence-cassandra/pom.xml new file mode 100644 index 0000000000..25745d00fc --- /dev/null +++ b/akka-persistence-cassandra/pom.xml @@ -0,0 +1,51 @@ + + 4.0.0 + + akka-persistence-cassandra + Akka Persistence Cassandra Module + + jar + + + akka + se.scalablesolutions.akka + 0.6 + ../pom.xml + + + + + akka-persistence-common + ${project.groupId} + ${project.version} + + + + + org.apache.cassandra + cassandra + 0.4.1 + + + log4j + log4j + 1.2.13 + + + + + org.scalatest + scalatest + 1.0 + test + + + junit + junit + 4.5 + test + + + + diff --git a/akka-persistence/src/main/scala/CassandraSession.scala b/akka-persistence-cassandra/src/main/scala/CassandraSession.scala similarity index 100% rename from akka-persistence/src/main/scala/CassandraSession.scala rename to akka-persistence-cassandra/src/main/scala/CassandraSession.scala diff --git a/akka-persistence-cassandra/src/main/scala/CassandraStorage.scala b/akka-persistence-cassandra/src/main/scala/CassandraStorage.scala new file mode 100644 index 0000000000..5bb89c90c9 --- /dev/null +++ b/akka-persistence-cassandra/src/main/scala/CassandraStorage.scala @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2009 Scalable Solutions. + */ + +package se.scalablesolutions.akka.state + +import org.codehaus.aspectwerkz.proxy.Uuid + +object CassandraStorage extends Storage { + type ElementType = Array[Byte] + + def newMap: PersistentMap[ElementType, ElementType] = newMap(Uuid.newUuid.toString) + def newVector: PersistentVector[ElementType] = newVector(Uuid.newUuid.toString) + def newRef: PersistentRef[ElementType] = newRef(Uuid.newUuid.toString) + + def getMap(id: String): PersistentMap[ElementType, ElementType] = newMap(id) + def getVector(id: String): PersistentVector[ElementType] = newVector(id) + def getRef(id: String): PersistentRef[ElementType] = newRef(id) + + def newMap(id: String): PersistentMap[ElementType, ElementType] = new CassandraPersistentMap(id) + def newVector(id: String): PersistentVector[ElementType] = new CassandraPersistentVector(id) + def newRef(id: String): PersistentRef[ElementType] = new CassandraPersistentRef(id) +} + +/** + * Implements a persistent transactional map based on the Cassandra distributed P2P key-value storage. + * + * @author Jonas Bonér + */ +class CassandraPersistentMap(id: String) extends PersistentMap[Array[Byte], Array[Byte]] { + val uuid = id + val storage = CassandraStorageBackend +} + +/** + * Implements a persistent transactional vector based on the Cassandra + * distributed P2P key-value storage. + * + * @author Jonas Bonér + */ +class CassandraPersistentVector(id: String) extends PersistentVector[Array[Byte]] { + val uuid = id + val storage = CassandraStorageBackend +} + +class CassandraPersistentRef(id: String) extends PersistentRef[Array[Byte]] { + val uuid = id + val storage = CassandraStorageBackend +} diff --git a/akka-persistence/src/main/scala/CassandraStorageBackend.scala b/akka-persistence-cassandra/src/main/scala/CassandraStorageBackend.scala similarity index 100% rename from akka-persistence/src/main/scala/CassandraStorageBackend.scala rename to akka-persistence-cassandra/src/main/scala/CassandraStorageBackend.scala diff --git a/akka-persistence/src/test/scala/CassandraPersistentActorSpec.scala b/akka-persistence-cassandra/src/test/scala/CassandraPersistentActorSpec.scala similarity index 100% rename from akka-persistence/src/test/scala/CassandraPersistentActorSpec.scala rename to akka-persistence-cassandra/src/test/scala/CassandraPersistentActorSpec.scala diff --git a/akka-persistence/pom.xml b/akka-persistence-common/pom.xml similarity index 72% rename from akka-persistence/pom.xml rename to akka-persistence-common/pom.xml index 10f90035b9..d6c89cff02 100644 --- a/akka-persistence/pom.xml +++ b/akka-persistence-common/pom.xml @@ -2,8 +2,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - akka-persistence - Akka Persistence Module + akka-persistence-common + Akka Persistence Common Module jar @@ -26,19 +26,6 @@ ${project.version} - - - com.mongodb - mongo - 1.0 - - - - - org.apache.cassandra - cassandra - 0.4.1 - com.facebook thrift @@ -49,11 +36,6 @@ commons-pool 1.5.1 - - log4j - log4j - 1.2.13 - diff --git a/akka-persistence/src/main/scala/Pool.scala b/akka-persistence-common/src/main/scala/Pool.scala similarity index 100% rename from akka-persistence/src/main/scala/Pool.scala rename to akka-persistence-common/src/main/scala/Pool.scala diff --git a/akka-persistence/src/main/scala/Storage.scala b/akka-persistence-common/src/main/scala/Storage.scala similarity index 71% rename from akka-persistence/src/main/scala/Storage.scala rename to akka-persistence-common/src/main/scala/Storage.scala index 5f30cc3319..172fc78dfe 100644 --- a/akka-persistence/src/main/scala/Storage.scala +++ b/akka-persistence-common/src/main/scala/Storage.scala @@ -58,37 +58,9 @@ trait Storage { def newRef(id: String): PersistentRef[ElementType] } -object CassandraStorage extends Storage { - type ElementType = Array[Byte] - def newMap: PersistentMap[ElementType, ElementType] = newMap(Uuid.newUuid.toString) - def newVector: PersistentVector[ElementType] = newVector(Uuid.newUuid.toString) - def newRef: PersistentRef[ElementType] = newRef(Uuid.newUuid.toString) - def getMap(id: String): PersistentMap[ElementType, ElementType] = newMap(id) - def getVector(id: String): PersistentVector[ElementType] = newVector(id) - def getRef(id: String): PersistentRef[ElementType] = newRef(id) - def newMap(id: String): PersistentMap[ElementType, ElementType] = new CassandraPersistentMap(id) - def newVector(id: String): PersistentVector[ElementType] = new CassandraPersistentVector(id) - def newRef(id: String): PersistentRef[ElementType] = new CassandraPersistentRef(id) -} - -object MongoStorage extends Storage { - type ElementType = AnyRef - - def newMap: PersistentMap[ElementType, ElementType] = newMap(Uuid.newUuid.toString) - def newVector: PersistentVector[ElementType] = newVector(Uuid.newUuid.toString) - def newRef: PersistentRef[ElementType] = newRef(Uuid.newUuid.toString) - - def getMap(id: String): PersistentMap[ElementType, ElementType] = newMap(id) - def getVector(id: String): PersistentVector[ElementType] = newVector(id) - def getRef(id: String): PersistentRef[ElementType] = newRef(id) - - def newMap(id: String): PersistentMap[ElementType, ElementType] = new MongoPersistentMap(id) - def newVector(id: String): PersistentVector[ElementType] = new MongoPersistentVector(id) - def newRef(id: String): PersistentRef[ElementType] = new MongoPersistentRef(id) -} /** * Implementation of PersistentMap for every concrete @@ -190,26 +162,6 @@ trait PersistentMap[K, V] extends scala.collection.mutable.Map[K, V] } } -/** - * Implements a persistent transactional map based on the Cassandra distributed P2P key-value storage. - * - * @author Jonas Bonér - */ -class CassandraPersistentMap(id: String) extends PersistentMap[Array[Byte], Array[Byte]] { - val uuid = id - val storage = CassandraStorageBackend -} - -/** - * Implements a persistent transactional map based on the MongoDB document storage. - * - * @author Debasish Ghosh - */ -class MongoPersistentMap(id: String) extends PersistentMap[AnyRef, AnyRef] { - val uuid = id - val storage = MongoStorageBackend -} - /** * Implements a template for a concrete persistent transactional vector based storage. * @@ -286,28 +238,6 @@ trait PersistentVector[T] extends RandomAccessSeq[T] with Transactional with Com } } -/** - * Implements a persistent transactional vector based on the Cassandra - * distributed P2P key-value storage. - * - * @author Jonas Bonér - */ -class CassandraPersistentVector(id: String) extends PersistentVector[Array[Byte]] { - val uuid = id - val storage = CassandraStorageBackend -} - -/** - * Implements a persistent transactional vector based on the MongoDB - * document storage. - * - * @author Debaissh Ghosh - */ -class MongoPersistentVector(id: String) extends PersistentVector[AnyRef] { - val uuid = id - val storage = MongoStorageBackend -} - /** * Implements a persistent reference with abstract storage. * @@ -343,13 +273,3 @@ trait PersistentRef[T] extends Transactional with Committable { currentTransaction.get.get.register(uuid, this) } } - -class CassandraPersistentRef(id: String) extends PersistentRef[Array[Byte]] { - val uuid = id - val storage = CassandraStorageBackend -} - -class MongoPersistentRef(id: String) extends PersistentRef[AnyRef] { - val uuid = id - val storage = MongoStorageBackend -} diff --git a/akka-persistence/src/main/scala/StorageBackend.scala b/akka-persistence-common/src/main/scala/StorageBackend.scala similarity index 100% rename from akka-persistence/src/main/scala/StorageBackend.scala rename to akka-persistence-common/src/main/scala/StorageBackend.scala diff --git a/akka-persistence-mongo/pom.xml b/akka-persistence-mongo/pom.xml new file mode 100644 index 0000000000..656b7ba6cc --- /dev/null +++ b/akka-persistence-mongo/pom.xml @@ -0,0 +1,46 @@ + + 4.0.0 + + akka-persistence-mongo + Akka Persistence Mongo Module + + jar + + + akka + se.scalablesolutions.akka + 0.6 + ../pom.xml + + + + + akka-persistence-common + ${project.groupId} + ${project.version} + + + + + com.mongodb + mongo + 1.0 + + + + + org.scalatest + scalatest + 1.0 + test + + + junit + junit + 4.5 + test + + + + diff --git a/akka-persistence-mongo/src/main/scala/MongoStorage.scala b/akka-persistence-mongo/src/main/scala/MongoStorage.scala new file mode 100644 index 0000000000..7c45542b22 --- /dev/null +++ b/akka-persistence-mongo/src/main/scala/MongoStorage.scala @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2009 Scalable Solutions. + */ + +package se.scalablesolutions.akka.state + +import org.codehaus.aspectwerkz.proxy.Uuid + +object MongoStorage extends Storage { + type ElementType = AnyRef + + def newMap: PersistentMap[ElementType, ElementType] = newMap(Uuid.newUuid.toString) + def newVector: PersistentVector[ElementType] = newVector(Uuid.newUuid.toString) + def newRef: PersistentRef[ElementType] = newRef(Uuid.newUuid.toString) + + def getMap(id: String): PersistentMap[ElementType, ElementType] = newMap(id) + def getVector(id: String): PersistentVector[ElementType] = newVector(id) + def getRef(id: String): PersistentRef[ElementType] = newRef(id) + + def newMap(id: String): PersistentMap[ElementType, ElementType] = new MongoPersistentMap(id) + def newVector(id: String): PersistentVector[ElementType] = new MongoPersistentVector(id) + def newRef(id: String): PersistentRef[ElementType] = new MongoPersistentRef(id) +} + +/** + * Implements a persistent transactional map based on the MongoDB document storage. + * + * @author Debasish Ghosh + */ +class MongoPersistentMap(id: String) extends PersistentMap[AnyRef, AnyRef] { + val uuid = id + val storage = MongoStorageBackend +} + +/** + * Implements a persistent transactional vector based on the MongoDB + * document storage. + * + * @author Debaissh Ghosh + */ +class MongoPersistentVector(id: String) extends PersistentVector[AnyRef] { + val uuid = id + val storage = MongoStorageBackend +} + +class MongoPersistentRef(id: String) extends PersistentRef[AnyRef] { + val uuid = id + val storage = MongoStorageBackend +} \ No newline at end of file diff --git a/akka-persistence/src/main/scala/MongoStorageBackend.scala b/akka-persistence-mongo/src/main/scala/MongoStorageBackend.scala similarity index 100% rename from akka-persistence/src/main/scala/MongoStorageBackend.scala rename to akka-persistence-mongo/src/main/scala/MongoStorageBackend.scala diff --git a/akka-persistence/src/test/scala/MongoPersistentActorSpec.scala b/akka-persistence-mongo/src/test/scala/MongoPersistentActorSpec.scala similarity index 96% rename from akka-persistence/src/test/scala/MongoPersistentActorSpec.scala rename to akka-persistence-mongo/src/test/scala/MongoPersistentActorSpec.scala index 051cfbfa12..8681ebadb9 100644 --- a/akka-persistence/src/test/scala/MongoPersistentActorSpec.scala +++ b/akka-persistence-mongo/src/test/scala/MongoPersistentActorSpec.scala @@ -91,6 +91,14 @@ class BankAccountActor extends Actor { } } +@serializable class PersistentFailerActor extends Actor { + makeTransactionRequired + def receive = { + case "Failure" => + throw new RuntimeException("expected") + } +} + class MongoPersistentActorSpec extends TestCase { @Test def testSuccessfulDebit = { diff --git a/akka-persistence/src/test/scala/MongoStorageSpec.scala b/akka-persistence-mongo/src/test/scala/MongoStorageSpec.scala similarity index 100% rename from akka-persistence/src/test/scala/MongoStorageSpec.scala rename to akka-persistence-mongo/src/test/scala/MongoStorageSpec.scala diff --git a/akka-persistence/src/test/scala/AllTest.scala b/akka-persistence/src/test/scala/AllTest.scala deleted file mode 100644 index 2e9bc78178..0000000000 --- a/akka-persistence/src/test/scala/AllTest.scala +++ /dev/null @@ -1,18 +0,0 @@ -package se.scalablesolutions.akka - -import se.scalablesolutions.akka.state.{MongoStorageSpec, MongoPersistentActorSpec, CassandraPersistentActorSpec} -import junit.framework.Test -import junit.framework.TestCase -import junit.framework.TestSuite - -object AllTest extends TestCase { - def suite(): Test = { - val suite = new TestSuite("All Scala tests") - //suite.addTestSuite(classOf[CassandraPersistentActorSpec]) - //suite.addTestSuite(classOf[MongoPersistentActorSpec]) - //suite.addTestSuite(classOf[MongoStorageSpec]) - suite - } - - def main(args: Array[String]) = junit.textui.TestRunner.run(suite) -} \ No newline at end of file diff --git a/pom.xml b/pom.xml index d89166c09d..dca9af4e3e 100755 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,9 @@ akka-util-java akka-util akka-actors - akka-persistence + akka-persistence-common + akka-persistence-cassandra + akka-persistence-mongo akka-rest akka-camel akka-amqp