Örnek sınıfın, kurucusunda bir süper sınıf alma bağımsız değişkeninin bir alt sınıfı olduğu, uzaktaki uzaktan aktörleri kullanarak bir ileti göndermeye çalışıyorum. İşte Akka uzaktaki aktörler, varsayılan yapıcı olmadan süper sınıf
sorunu yeniden oluşturmaya minimum örnektir:package com.tuvistavie.testremote
import akka.actor.{ Actor, ActorSystem, Props, ActorLogging }
import com.typesafe.config.ConfigFactory
abstract class Foo(val a: Int)
case class MessageFoo(override val a: Int) extends Foo(a)
object Sender {
def main(args: Array[String]) {
val system = ActorSystem("Sender", ConfigFactory.load.getConfig("sender"))
val actor = system.actorFor("akka://[email protected]:2552/user/receiver")
actor ! MessageFoo(1)
}
}
object Receiver {
class ReceiverActor extends Actor with ActorLogging {
def receive = {
case m: MessageFoo => log.debug(m.toString)
}
}
def main(args: Array[String]) {
val system = ActorSystem("Receiver", ConfigFactory.load.getConfig("receiver"))
val actor = system.actorOf(Props[ReceiverActor], "receiver")
}
}
Bu kodu çalıştırırken, aşağıdaki hatayı alıyorum:
[ERROR] [06/26/2013 02:53:16.132] [Receiver-9]
[NettyRemoteTransport(akka://[email protected]:2552)]
[email protected]://[email protected]:2552] Error[java.io.InvalidClassException: com.tuvistavie.testremote.MessageFoo; no valid constructor]
ben mesajı serisi kaldırılan olamaz çünkü düşünüyorum (ebeveynlerin yapıcısı nedeniyle akka.serialization.JavaSerializer
kullanıyor. Sadece bir veya iki mesaj olsaydım, kendi diziselleştiricimi yazabilirdim, fakat benim uygulamada bunun gibi birçok vaka dersim var.
Bu tür nesneleri uzaktaki aktörler kullanarak iletmenin kolay bir yolu var mı?
trait Foo{
val a:Int
}
case class MessageFoo(a:Int) extends Foo
Genellikle deneyin ve vaka sınıfları ile deplasmanda sınıf miras uzak kalmak: Eğer şöyle yapılandırmışsam
Burada neler olup bittiğini açıklayabilir misiniz? Ne 'MessageFoo' ne de sizinkilerin argümansız bir kurucusu yoktur. Biri diğeri olmadığında neden Java serileştirme ile çalışır? –
@DanielDarabos, scala vaka sınıfları serileştirilebilir. Bir vaka sınıfı için oluşturulan java koduna bakarsanız, seri hale getirilebilmesi için sözleşmeyi yerine getirdiğini göreceksiniz. – cmbaxter
Ancak sorudaki dava sınıfı, serileştirilemezdi, değil mi? –