trait DDDDatabaseHelper {
def props():Props
}
object ObjectDatabaseHelper extends DDDDatabaseHelper{
def props(): Props = Props(new ObjectDatabaseHelper())
}
class ObjectDatabaseHelper extends Actor with DatabaseHelper{
def receive = {
case _ => "OK"
}
}
object ObjectRoute {
def props[T:ClassTag](t:T,t1:DDDDatabaseHelper): Props = Props(new ObjectRoute(t,t1))
}
class ObjectRoute[T:ClassTag](t:T,t1:DDDDatabaseHelper) extends Actor{
implicit val timeout = Timeout(5 seconds)
val accountDatabaseActor = context.actorOf(t1.props(), s"${t.getClass.getName}Actor")
def receive = {
case t@OperationMessage(operation, account: Company) if operation == Create || operation == Modify || operation == Delete =>
sender ! account.copy(name = accountDatabaseActor.path.name)
case _ => SSOException(-1, "Unknown Error")
}
}
object Main extends App{
import scala.concurrent.duration._
implicit val timeout: Timeout = 5.seconds
implicit val system = ActorSystem("SSOSprayRoot")
val companyRoute = system.actorOf(ObjectRoute.props(Company,ObjectDatabaseHelper), name = "sprayActor")
val companyBean=new Company(
1,
"1111111111",
"1111111111",
"1111111111",
"1111111111",
"1111111111",
"1111111111",
"1111111111",
1,
"1111111111",
"1111111111",
"1111111111",
"1111111111",
"1111111111",
InitState,
"1111111111",
"1111111111"
)
val t =companyRoute ? OperationMessage(Create, companyBean)
t.onSuccess{
case SSOException(err, str) => println(err + "\t" + str)
case other: Company => println("back Company\t" + other.name)
case otherwise => println("unknown")
}
}
终于可以把原来十几个相同的Actor替换掉了.