Так что я играл с удаленными актерами и столкнулся с некоторыми трудностями с исключениями сериализации. Одно из моих сообщений - это экземпляр класса case, который сам содержит экземпляр списка классов Path. Класс Path определяется следующим образом и представляет собой набор экземпляров Point с предварительно вычисленным атрибутом расстояния:
class Point (xi:Int,yi:Int) {
val x: Int = xi
val y: Int = yi
// Determine distance to another point
def distanceTo(p:Point):Int={
val dx = (x - p.x).toDouble
val dy = (y - p.y).toDouble
sqrt(dx*dx + dy*dy).round.toInt
}
override def equals(arg0:Any) : Boolean = {
if (arg0.isInstanceOf[Point] && arg0.asInstanceOf[Point].x == x && arg0.asInstanceOf[Point].y == y) return true
false
}
}
class Path(p: List[Point]) {
val path: List[Point] = p
val length: Int = Point.pathLength(p)
}
Хотя эти экземпляры класса могут передаваться без проблем с использованием обычных акторов, любая попытка отправить сообщение, содержащее коллекцию List [Path], завершается неудачно с java.io.NotSerializableException.
Так что мне делать? Нужно ли определять методы сериализации для этих классов? Есть ли лучший способ для этой цели, кроме отправки экземпляров классов по сети?
Любая помощь будет принята с благодарностью - похоже, существует реальная нехватка информации и примеров материалов для удаленных актеров Scala.