From 787e7e45b7be6421a7ca9e605bf103a7aec6c9ef Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Sat, 20 Feb 2010 23:56:25 +0100 Subject: [PATCH] Working nine to five ... --- akka-amqp/src/main/scala/AMQP.scala | 7 +++-- .../src/main/scala/JGroupsClusterActor.scala | 4 +-- .../src/main/scala/ShoalClusterActor.scala | 4 +-- akka-comet/src/main/scala/AkkaServlet.scala | 4 +-- akka-core/pom.xml | 11 +++----- .../src/main/scala/actor/ActiveObject.scala | 7 ++--- akka-core/src/main/scala/actor/Actor.scala | 12 ++++----- .../src/main/scala/actor/Scheduler.scala | 5 ++-- .../scala/config/ConfiguratorRepository.scala | 2 +- akka-core/src/main/scala/remote/Cluster.scala | 2 +- .../src/main/scala/remote/RemoteClient.scala | 2 +- .../scala/remote/RemoteProtocolBuilder.scala | 24 +++++++++--------- .../src/main/scala/remote/RemoteServer.scala | 2 +- .../src/main/scala/serialization/Binary.scala | 3 ++- .../scala/serialization/Serializable.scala | 8 +++--- .../main/scala/serialization/Serializer.scala | 6 ++--- akka-core/src/main/scala/stm/HashTrie.scala | 2 +- .../src/main/scala/stm/ResultOrFailure.scala | 2 +- .../main/scala/stm/TransactionalState.scala | 12 +++++++-- .../src/main/scala/CassandraSession.scala | 5 ++-- akka-rest/src/main/scala/AkkaServlet.scala | 4 +-- .../sjson-0.5-SNAPSHOT-2.8.Beta1.jar | Bin 0 -> 45808 bytes .../sjson-0.5-SNAPSHOT-2.8.Beta1.pom | 8 ++++++ 23 files changed, 73 insertions(+), 63 deletions(-) create mode 100644 embedded-repo/sjson/json/sjson/0.5-SNAPSHOT-2.8.Beta1/sjson-0.5-SNAPSHOT-2.8.Beta1.jar create mode 100755 embedded-repo/sjson/json/sjson/0.5-SNAPSHOT-2.8.Beta1/sjson-0.5-SNAPSHOT-2.8.Beta1.pom diff --git a/akka-amqp/src/main/scala/AMQP.scala b/akka-amqp/src/main/scala/AMQP.scala index 81c6e5a64a..a03a2cb056 100644 --- a/akka-amqp/src/main/scala/AMQP.scala +++ b/akka-amqp/src/main/scala/AMQP.scala @@ -13,8 +13,7 @@ import se.scalablesolutions.akka.config.ScalaConfig._ import se.scalablesolutions.akka.util.{HashCode, Logging} import scala.collection.mutable.HashMap - -import org.scala_tools.javautils.Imports._ +import scala.collection.JavaConversions._ import java.util.concurrent.ConcurrentHashMap import java.util.{Timer, TimerTask} @@ -411,7 +410,7 @@ object AMQP { protected def setupChannel = { connection = connectionFactory.newConnection(hostname, port) channel = connection.createChannel - channel.exchangeDeclare(exchangeName.toString, exchangeType.toString, passive, durable, autoDelete, configurationArguments.asJava) + channel.exchangeDeclare(exchangeName.toString, exchangeType.toString, passive, durable, autoDelete, configurationArguments) listeners.elements.toList.map(_._2).foreach(registerListener) if (shutdownListener.isDefined) connection.addShutdownListener(shutdownListener.get) } @@ -426,7 +425,7 @@ object AMQP { listener.queueName, passive, durable, listener.exclusive, listener.autoDelete, - configurationArguments.asJava) + configurationArguments) } log.debug("Binding new queue for MessageConsumerListener [%s]", listener.queueName) diff --git a/akka-cluster/akka-cluster-jgroups/src/main/scala/JGroupsClusterActor.scala b/akka-cluster/akka-cluster-jgroups/src/main/scala/JGroupsClusterActor.scala index 2b6730dd60..afc917260e 100644 --- a/akka-cluster/akka-cluster-jgroups/src/main/scala/JGroupsClusterActor.scala +++ b/akka-cluster/akka-cluster-jgroups/src/main/scala/JGroupsClusterActor.scala @@ -8,7 +8,7 @@ import org.jgroups.{JChannel, View => JG_VIEW, Address, Message => JG_MSG, Exten */ class JGroupsClusterActor extends BasicClusterActor { import ClusterActor._ - import org.scala_tools.javautils.Imports._ + import scala.collection.JavaConversions._ type ADDR_T = Address @@ -32,7 +32,7 @@ class JGroupsClusterActor extends BasicClusterActor { if (isActive && m.getSrc != channel.map(_.getAddress).getOrElse(m.getSrc)) me send Message(m.getSrc,m.getRawBuffer) def viewAccepted(view: JG_VIEW): Unit = - if (isActive) me send View(Set[ADDR_T]() ++ view.getMembers.asScala - channel.get.getAddress) + if (isActive) me send View(Set[ADDR_T]() ++ view.getMembers - channel.get.getAddress) def suspect(a: Address): Unit = if (isActive) me send Zombie(a) diff --git a/akka-cluster/akka-cluster-shoal/src/main/scala/ShoalClusterActor.scala b/akka-cluster/akka-cluster-shoal/src/main/scala/ShoalClusterActor.scala index c656bd4b81..007cc96b9a 100644 --- a/akka-cluster/akka-cluster-shoal/src/main/scala/ShoalClusterActor.scala +++ b/akka-cluster/akka-cluster-shoal/src/main/scala/ShoalClusterActor.scala @@ -84,7 +84,7 @@ class ShoalClusterActor extends BasicClusterActor { * Creates a CallBack instance that deals with the cluster signalling */ protected def createCallback : CallBack = { - import org.scala_tools.javautils.Imports._ + import scala.collection.JavaConversions._ val me = this new CallBack { def processNotification(signal : Signal) { @@ -93,7 +93,7 @@ class ShoalClusterActor extends BasicClusterActor { if(isActive) { signal match { case ms : MessageSignal => me send Message(ms.getMemberToken,ms.getMessage) - case jns : JoinNotificationSignal => me send View(Set[ADDR_T]() ++ jns.getCurrentCoreMembers.asScala - serverName) + case jns : JoinNotificationSignal => me send View(Set[ADDR_T]() ++ jns.getCurrentCoreMembers - serverName) case fss : FailureSuspectedSignal => me send Zombie(fss.getMemberToken) case fns : FailureNotificationSignal => me send Zombie(fns.getMemberToken) case _ => log.debug("Unhandled signal: [%s]",signal) diff --git a/akka-comet/src/main/scala/AkkaServlet.scala b/akka-comet/src/main/scala/AkkaServlet.scala index 6e37d56c49..cae6dd3000 100644 --- a/akka-comet/src/main/scala/AkkaServlet.scala +++ b/akka-comet/src/main/scala/AkkaServlet.scala @@ -59,12 +59,12 @@ class AkkaServlet extends org.atmosphere.cpr.AtmosphereServlet with Logging { * we need to handle that. */ override def createCometSupportResolver() : CometSupportResolver = { - import org.scala_tools.javautils.Imports._ + import scala.collection.JavaConversions._ new DefaultCometSupportResolver(config) { type CS = CometSupport[_ <: AtmosphereResource[_,_]] override def resolveMultipleNativeSupportConflict(available : JList[Class[_ <: CS]]) : CS = { - available.asScala.filter(_ != classOf[GrizzlyCometSupport]).toList match { + available.filter(_ != classOf[GrizzlyCometSupport]).toList match { case Nil => new GrizzlyCometSupport(config) case x :: Nil => newCometSupport(x.asInstanceOf[Class[_ <: CS]]) case _ => super.resolveMultipleNativeSupportConflict(available) diff --git a/akka-core/pom.xml b/akka-core/pom.xml index 14ebdcfd14..10e05fe701 100644 --- a/akka-core/pom.xml +++ b/akka-core/pom.xml @@ -46,11 +46,6 @@ netty 3.2.0.ALPHA3 - - org.scala-tools - javautils - 2.7.4-0.1 - @@ -68,11 +63,11 @@ jackson-mapper-asl 1.2.1 - + net.databinder dispatch-json_2.8.0.Beta1 @@ -91,7 +86,7 @@ sjson.json sjson - 0.4 + 0.5-SNAPSHOT-2.8.Beta1 diff --git a/akka-core/src/main/scala/actor/ActiveObject.scala b/akka-core/src/main/scala/actor/ActiveObject.scala index 1858952f40..56d78268f5 100644 --- a/akka-core/src/main/scala/actor/ActiveObject.scala +++ b/akka-core/src/main/scala/actor/ActiveObject.scala @@ -260,9 +260,10 @@ private[akka] sealed class ActiveObjectAspect { } private def localDispatch(joinPoint: JoinPoint): AnyRef = { - import Actor.Sender.Self val rtti = joinPoint.getRtti.asInstanceOf[MethodRtti] - if (isOneWay(rtti)) actor ! Invocation(joinPoint, true, true) + if (isOneWay(rtti)) { + (actor ! Invocation(joinPoint, true, true) ).asInstanceOf[AnyRef] + } else { val result = actor !! Invocation(joinPoint, false, isVoid(rtti)) if (result.isDefined) result.get @@ -357,7 +358,7 @@ private[akka] sealed class ActiveObjectAspect { */ private[akka] class Dispatcher(transactionalRequired: Boolean, val callbacks: Option[RestartCallbacks]) extends Actor { private val ZERO_ITEM_CLASS_ARRAY = Array[Class[_]]() - private val ZERO_ITEM_OBJECT_ARRAY = Array[Object[_]]() + private val ZERO_ITEM_OBJECT_ARRAY = Array[Object]() private[actor] var target: Option[AnyRef] = None private var preRestart: Option[Method] = None diff --git a/akka-core/src/main/scala/actor/Actor.scala b/akka-core/src/main/scala/actor/Actor.scala index f8eb5e0347..b4e10057b4 100644 --- a/akka-core/src/main/scala/actor/Actor.scala +++ b/akka-core/src/main/scala/actor/Actor.scala @@ -73,7 +73,7 @@ object Actor extends Logging { val PORT = config.getInt("akka.remote.server.port", 9999) object Sender{ - implicit val Self: Option[Actor] = None + object Self } /** @@ -474,7 +474,7 @@ trait Actor extends TransactionManagement { * actor.send(message) * */ - def !(message: Any)(implicit sender: Option[Actor]) = { + def !(message: Any)(implicit sender: Option[Actor] = None) = { //FIXME 2.8 def !(message: Any)(implicit sender: Option[Actor] = None) = { if (_isKilled) throw new ActorKilledException("Actor [" + toString + "] has been killed, can't respond to messages") if (_isRunning) postMessageToMailbox(message, sender) @@ -539,8 +539,7 @@ trait Actor extends TransactionManagement { /* - //FIXME 2.8 def !!!(message: Any)(implicit sender: AnyRef = None): FutureResult = { - def !!!(message: Any)(implicit sender: AnyRef): FutureResult = { + def !!!(message: Any)(implicit sender: Option[Actor] = None): FutureResult = { if (_isKilled) throw new ActorKilledException("Actor [" + toString + "] has been killed, can't respond to messages") if (_isRunning) { val from = if (sender != null && sender.isInstanceOf[Actor]) Some(sender.asInstanceOf[Actor]) @@ -562,7 +561,7 @@ trait Actor extends TransactionManagement { *

* Works with both '!' and '!!'. */ - def forward(message: Any)(implicit sender: Option[Actor]) = { + def forward(message: Any)(implicit sender: Option[Actor] = None) = { if (_isKilled) throw new ActorKilledException("Actor [" + toString + "] has been killed, can't respond to messages") if (_isRunning) { val forwarder = sender.getOrElse(throw new IllegalStateException("Can't forward message when the forwarder/mediator is not an actor")) @@ -1027,7 +1026,8 @@ trait Actor extends TransactionManagement { !message.isInstanceOf[List[_]] && !message.isInstanceOf[scala.collection.immutable.Map[_, _]] && !message.isInstanceOf[scala.collection.immutable.Set[_]] && - !message.isInstanceOf[scala.collection.immutable.Tree[_, _]] && + //Removed in Scala 2.8 + //!message.isInstanceOf[scala.collection.immutable.Tree[_, _]] && !message.getClass.isAnnotationPresent(Annotations.immutable)) { Serializer.Java.deepClone(message) } else message diff --git a/akka-core/src/main/scala/actor/Scheduler.scala b/akka-core/src/main/scala/actor/Scheduler.scala index 8205db5843..7217af7574 100644 --- a/akka-core/src/main/scala/actor/Scheduler.scala +++ b/akka-core/src/main/scala/actor/Scheduler.scala @@ -19,8 +19,6 @@ import se.scalablesolutions.akka.config.ScalaConfig._ import se.scalablesolutions.akka.config.{AllForOneStrategy, OneForOneStrategy, FaultHandlingStrategy} import se.scalablesolutions.akka.util.{Logging} -import org.scala_tools.javautils.Imports._ - case object UnSchedule case class SchedulerException(msg: String, e: Throwable) extends RuntimeException(msg, e) @@ -66,7 +64,8 @@ object Scheduler extends Actor { } override def shutdown = { - schedulers.values.asScala.foreach(_ ! UnSchedule) + import scala.collection.JavaConversions._ + schedulers.values.foreach(_ ! UnSchedule) service.shutdown } diff --git a/akka-core/src/main/scala/config/ConfiguratorRepository.scala b/akka-core/src/main/scala/config/ConfiguratorRepository.scala index 9c12bf4b32..097259164b 100644 --- a/akka-core/src/main/scala/config/ConfiguratorRepository.scala +++ b/akka-core/src/main/scala/config/ConfiguratorRepository.scala @@ -6,7 +6,7 @@ package se.scalablesolutions.akka.config import scala.collection.mutable.HashSet -import util.Logging +import se.scalablesolutions.akka.util.Logging object ConfiguratorRepository extends Logging { diff --git a/akka-core/src/main/scala/remote/Cluster.scala b/akka-core/src/main/scala/remote/Cluster.scala index c2e9069a01..cb68b271ed 100644 --- a/akka-core/src/main/scala/remote/Cluster.scala +++ b/akka-core/src/main/scala/remote/Cluster.scala @@ -133,7 +133,7 @@ abstract class BasicClusterActor extends ClusterActor { case RegisterLocalNode(s) => { log debug ("RegisterLocalNode: %s", s) - local = Node(local.endpoints + s) + local = Node(s :: local.endpoints) broadcast(Papers(local.endpoints)) } diff --git a/akka-core/src/main/scala/remote/RemoteClient.scala b/akka-core/src/main/scala/remote/RemoteClient.scala index f97f014f06..7d22f4289b 100644 --- a/akka-core/src/main/scala/remote/RemoteClient.scala +++ b/akka-core/src/main/scala/remote/RemoteClient.scala @@ -267,7 +267,7 @@ class RemoteClientPipelineFactory(name: String, /** * @author Jonas Bonér */ -@ChannelPipelineCoverage {val value = "all"} +@ChannelPipelineCoverage(value = "all") class RemoteClientHandler(val name: String, val futures: ConcurrentMap[Long, CompletableFutureResult], val supervisors: ConcurrentMap[String, Actor], diff --git a/akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala b/akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala index 287168140a..ac0a3986c6 100644 --- a/akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala +++ b/akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala @@ -4,7 +4,7 @@ package se.scalablesolutions.akka.remote -import se.scalablesolutions.akka.serialization.Serializable.SBinary +//import se.scalablesolutions.akka.serialization.Serializable.SBinary import se.scalablesolutions.akka.serialization.{Serializer, Serializable, SerializationProtocol} import se.scalablesolutions.akka.remote.protobuf.RemoteProtocol.{RemoteRequest, RemoteReply} @@ -14,7 +14,7 @@ object RemoteProtocolBuilder { private var SERIALIZER_JAVA: Serializer.Java = Serializer.Java private var SERIALIZER_JAVA_JSON: Serializer.JavaJSON = Serializer.JavaJSON private var SERIALIZER_SCALA_JSON: Serializer.ScalaJSON = Serializer.ScalaJSON - private var SERIALIZER_SBINARY: Serializer.SBinary = Serializer.SBinary + //private var SERIALIZER_SBINARY: Serializer.SBinary = Serializer.SBinary private var SERIALIZER_PROTOBUF: Serializer.Protobuf = Serializer.Protobuf @@ -29,9 +29,9 @@ object RemoteProtocolBuilder { def getMessage(request: RemoteRequest): Any = { request.getProtocol match { - case SerializationProtocol.SBINARY => - val renderer = Class.forName(new String(request.getMessageManifest.toByteArray)).newInstance.asInstanceOf[SBinary[_ <: AnyRef]] - renderer.fromBytes(request.getMessage.toByteArray) + //case SerializationProtocol.SBINARY => + // val renderer = Class.forName(new String(request.getMessageManifest.toByteArray)).newInstance.asInstanceOf[SBinary[_ <: AnyRef]] + // renderer.fromBytes(request.getMessage.toByteArray) case SerializationProtocol.SCALA_JSON => val manifest = SERIALIZER_JAVA.in(request.getMessageManifest.toByteArray, None).asInstanceOf[String] SERIALIZER_SCALA_JSON.in(request.getMessage.toByteArray, Some(Class.forName(manifest))) @@ -50,9 +50,9 @@ object RemoteProtocolBuilder { def getMessage(reply: RemoteReply): Any = { reply.getProtocol match { - case SerializationProtocol.SBINARY => - val renderer = Class.forName(new String(reply.getMessageManifest.toByteArray)).newInstance.asInstanceOf[SBinary[_ <: AnyRef]] - renderer.fromBytes(reply.getMessage.toByteArray) + //case SerializationProtocol.SBINARY => + // val renderer = Class.forName(new String(reply.getMessageManifest.toByteArray)).newInstance.asInstanceOf[SBinary[_ <: AnyRef]] + // renderer.fromBytes(reply.getMessage.toByteArray) case SerializationProtocol.SCALA_JSON => val manifest = SERIALIZER_JAVA.in(reply.getMessageManifest.toByteArray, None).asInstanceOf[String] SERIALIZER_SCALA_JSON.in(reply.getMessage.toByteArray, Some(Class.forName(manifest))) @@ -70,12 +70,12 @@ object RemoteProtocolBuilder { } def setMessage(message: Any, builder: RemoteRequest.Builder) = { - if (message.isInstanceOf[Serializable.SBinary[_]]) { + /*if (message.isInstanceOf[Serializable.SBinary[_]]) { val serializable = message.asInstanceOf[Serializable.SBinary[_ <: Any]] builder.setProtocol(SerializationProtocol.SBINARY) builder.setMessage(ByteString.copyFrom(serializable.toBytes)) builder.setMessageManifest(ByteString.copyFrom(serializable.getClass.getName.getBytes)) - } else if (message.isInstanceOf[Message]) { + } else*/ if (message.isInstanceOf[Message]) { val serializable = message.asInstanceOf[Message] builder.setProtocol(SerializationProtocol.PROTOBUF) builder.setMessage(ByteString.copyFrom(serializable.toByteArray)) @@ -98,12 +98,12 @@ object RemoteProtocolBuilder { } def setMessage(message: Any, builder: RemoteReply.Builder) = { - if (message.isInstanceOf[Serializable.SBinary[_]]) { + /*if (message.isInstanceOf[Serializable.SBinary[_]]) { val serializable = message.asInstanceOf[Serializable.SBinary[_ <: Any]] builder.setProtocol(SerializationProtocol.SBINARY) builder.setMessage(ByteString.copyFrom(serializable.toBytes)) builder.setMessageManifest(ByteString.copyFrom(serializable.getClass.getName.getBytes)) - } else if (message.isInstanceOf[Message]) { + } else*/ if (message.isInstanceOf[Message]) { val serializable = message.asInstanceOf[Message] builder.setProtocol(SerializationProtocol.PROTOBUF) builder.setMessage(ByteString.copyFrom(serializable.toByteArray)) diff --git a/akka-core/src/main/scala/remote/RemoteServer.scala b/akka-core/src/main/scala/remote/RemoteServer.scala index 5288bd7bd4..7564fe757c 100644 --- a/akka-core/src/main/scala/remote/RemoteServer.scala +++ b/akka-core/src/main/scala/remote/RemoteServer.scala @@ -244,7 +244,7 @@ class RemoteServerPipelineFactory( /** * @author Jonas Bonér */ -@ChannelPipelineCoverage {val value = "all"} +@ChannelPipelineCoverage(value = "all") class RemoteServerHandler( val name: String, val openChannels: ChannelGroup, diff --git a/akka-core/src/main/scala/serialization/Binary.scala b/akka-core/src/main/scala/serialization/Binary.scala index 01a530b215..818131cbf8 100644 --- a/akka-core/src/main/scala/serialization/Binary.scala +++ b/akka-core/src/main/scala/serialization/Binary.scala @@ -1,7 +1,7 @@ /** * Copyright (C) 2009-2010 Scalable Solutions AB */ - +/* package se.scalablesolutions.akka.serialization // --- PRIMITIVES --- @@ -373,3 +373,4 @@ case class BinaryStringByteArrayMap(val value: Map[String, Array[Byte]]) extends def fromBytes(bytes: Array[Byte]) = BinaryStringByteArrayMap(fromByteArray[Map[String, Array[Byte]]](bytes)) def toBytes: Array[Byte] = toByteArray(value) } +*/ \ No newline at end of file diff --git a/akka-core/src/main/scala/serialization/Serializable.scala b/akka-core/src/main/scala/serialization/Serializable.scala index b9a3cf5927..0111cdfc8c 100644 --- a/akka-core/src/main/scala/serialization/Serializable.scala +++ b/akka-core/src/main/scala/serialization/Serializable.scala @@ -7,12 +7,12 @@ package se.scalablesolutions.akka.serialization import org.codehaus.jackson.map.ObjectMapper import com.google.protobuf.Message import reflect.Manifest -import sbinary.DefaultProtocol +//import sbinary.DefaultProtocol import java.io.{StringWriter, ByteArrayOutputStream, ObjectOutputStream} import sjson.json.{Serializer=>SJSONSerializer} object SerializationProtocol { - val SBINARY = 1 + //val SBINARY = 1 val SCALA_JSON = 2 val JAVA_JSON = 3 val PROTOBUF = 4 @@ -60,10 +60,10 @@ object Serializable { * * @author Jonas Bonér */ - trait SBinary[T <: AnyRef] extends Serializable { + /*trait SBinary[T <: AnyRef] extends Serializable { def fromBytes(bytes: Array[Byte]): T def toBytes: Array[Byte] - } + } */ /** * @author Jonas Bonér diff --git a/akka-core/src/main/scala/serialization/Serializer.scala b/akka-core/src/main/scala/serialization/Serializer.scala index 3eb9315126..55f695a5c4 100644 --- a/akka-core/src/main/scala/serialization/Serializer.scala +++ b/akka-core/src/main/scala/serialization/Serializer.scala @@ -29,7 +29,7 @@ class SerializerFactory { def getJava: Java.type = Java def getJavaJSON: JavaJSON.type = JavaJSON def getScalaJSON: ScalaJSON.type = ScalaJSON - def getSBinary: SBinary.type = SBinary + //def getSBinary: SBinary.type = SBinary def getProtobuf: Protobuf.type = Protobuf } @@ -165,7 +165,7 @@ object Serializer { /** * @author Jonas Bonér */ - object SBinary extends SBinary + /*object SBinary extends SBinary class SBinary { import sbinary.DefaultProtocol._ @@ -176,6 +176,6 @@ object Serializer { def in[T](array : Array[Byte], clazz: Option[Class[T]])(implicit bin : Reads[T]): T = fromByteArray[T](array) def in[T](array : Array[Byte])(implicit bin : Reads[T]): T = fromByteArray[T](array) - } + } */ } diff --git a/akka-core/src/main/scala/stm/HashTrie.scala b/akka-core/src/main/scala/stm/HashTrie.scala index 02b7ad2145..5f79004ef0 100644 --- a/akka-core/src/main/scala/stm/HashTrie.scala +++ b/akka-core/src/main/scala/stm/HashTrie.scala @@ -68,7 +68,7 @@ final class HashTrie[K, +V] private (root: Node[K, V]) extends Map[K, V] with Pe } object HashTrie { - def apply[K, V](pairs: (K, V)*) = pairs.foldLeft(new HashTrie[K, V]) { _ + _ } + def apply[K, V](pairs: (K, V)*) = pairs.foldLeft((new HashTrie[K, V]).asInstanceOf[Map[K,V]]) { _ + _ } def unapplySeq[K, V](map: HashTrie[K, V]) = map.toSeq } diff --git a/akka-core/src/main/scala/stm/ResultOrFailure.scala b/akka-core/src/main/scala/stm/ResultOrFailure.scala index 51ce6ddf68..a8b5090a68 100644 --- a/akka-core/src/main/scala/stm/ResultOrFailure.scala +++ b/akka-core/src/main/scala/stm/ResultOrFailure.scala @@ -4,7 +4,7 @@ package se.scalablesolutions.akka.util -import stm.Transaction +import se.scalablesolutions.akka.stm.Transaction /** * Reference that can hold either a typed value or an exception. diff --git a/akka-core/src/main/scala/stm/TransactionalState.scala b/akka-core/src/main/scala/stm/TransactionalState.scala index 6003a89f89..3898409e67 100644 --- a/akka-core/src/main/scala/stm/TransactionalState.scala +++ b/akka-core/src/main/scala/stm/TransactionalState.scala @@ -173,11 +173,19 @@ class TransactionalMap[K, V] extends Transactional with scala.collection.mutable ref.swap(new HashTrie[K, V]) - def -=(key: K) = remove(key) + def -=(key: K) = { + remove(key) + this + } def +=(key: K, value: V) = put(key, value) - def remove(key: K) = ref.swap(ref.get.get - key) + def remove(key: K) = { + val map = ref.get.get + val oldValue = map.get(key) + ref.swap(ref.get.get - key) + oldValue + } def get(key: K): Option[V] = ref.get.get.get(key) diff --git a/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraSession.scala b/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraSession.scala index 0cbf9fa04b..2db1f7a2ba 100644 --- a/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraSession.scala +++ b/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraSession.scala @@ -23,8 +23,7 @@ import org.apache.thrift.protocol._ * @author Jonas Bonér */ trait CassandraSession extends Closeable with Flushable { - import scala.collection.jcl.Conversions._ - import org.scala_tools.javautils.Imports._ + import scala.collection.JavaConversions._ import java.util.{Map => JMap, List => JList} protected val client: Cassandra.Client @@ -91,7 +90,7 @@ trait CassandraSession extends Closeable with Flushable { def ++|(key: String, batch: Map[String, List[ColumnOrSuperColumn]], consistencyLevel: Int): Unit = { val jmap = new java.util.HashMap[String, JList[ColumnOrSuperColumn]] - for (entry <- batch; (key, value) = entry) jmap.put(key, value.asJava) + for (entry <- batch; (key, value) = entry) jmap.put(key, value) client.batch_insert(keyspace, key, jmap, consistencyLevel) } diff --git a/akka-rest/src/main/scala/AkkaServlet.scala b/akka-rest/src/main/scala/AkkaServlet.scala index 2aa2a6b2c5..c79f4b17d1 100644 --- a/akka-rest/src/main/scala/AkkaServlet.scala +++ b/akka-rest/src/main/scala/AkkaServlet.scala @@ -17,14 +17,14 @@ import com.sun.jersey.spi.container.WebApplication * @author Jonas Bonér */ class AkkaServlet extends ServletContainer { - import org.scala_tools.javautils.Imports._ + import scala.collection.JavaConversions._ override def initiate(resourceConfig: ResourceConfig, webApplication: WebApplication) = { //Kernel.boot // will boot if not already booted by 'main' val configurators = ConfiguratorRepository.getConfigurators - resourceConfig.getClasses.addAll(configurators.flatMap(_.getComponentInterfaces).asJava) + resourceConfig.getClasses.addAll(configurators.flatMap(_.getComponentInterfaces)) resourceConfig.getProperties.put( "com.sun.jersey.spi.container.ResourceFilters", Config.config.getList("akka.rest.filters").mkString(",")) diff --git a/embedded-repo/sjson/json/sjson/0.5-SNAPSHOT-2.8.Beta1/sjson-0.5-SNAPSHOT-2.8.Beta1.jar b/embedded-repo/sjson/json/sjson/0.5-SNAPSHOT-2.8.Beta1/sjson-0.5-SNAPSHOT-2.8.Beta1.jar new file mode 100644 index 0000000000000000000000000000000000000000..4543815742cf38a8cf8a9fcc862e4d2340195c5e GIT binary patch literal 45808 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 + + 4.0.0 + sjson.json + sjson + 0.5-SNAPSHOT-2.8.Beta1 + jar +