안녕하세요? 프로그래밍 인 스칼라 책 번역하면서 액터 예제를 스칼라 2.11에 맞춰 akka로 (예제하고 일부 라이브러리 설명
부분만) 다시 쓰려고 합니다.
다시 쓰면서 코드를 돌려보는데 REPL에서 다음 코드에서 JVM이 뻗어버리네요. 웃기는게 간단한 액터 클래스르 만들어서
실행하는건 잘되고, 액터 DSL에서 Act 트레이트에 become같은 메시지 처리만 넣어서 actor()를 호출하면 또 메시지
잘 처리하고 안죽고 잘 도는데, whenStarting 만 사용하면 문제가 생기네요.
scala> import akka.actor._
import akka.actor._
scala> import ActorDSL._
import ActorDSL._
scala> implicit val system = ActorSystem("demo")
system: akka.actor.ActorSystem = akka://demo
scala> val x = actor( new Act { whenStarting { println("Hello") }} )
x: akka.actor.ActorRef = Actor[akka://demo/user/$a#-851040728]
정상이면 이렇게 하면 Hello를 화면에 찍고 프럼프트가 나타나야 합니다. 당혹스러운게 7월 초에는 잘 돌았거든요. 확신할 수
있는게 블로그에 글도 썼었기 때문에... (
http://www.enshahar.me/2014/07/akka.html에 증거는
있는데 verbose합니다).
집컴이나 회사 컴 모두 뻗어버리는데(JVM을 각각 1.8과 1.7 최신버전으로 업뎃해서 바꿔가면서 실험해 봄) 오류메시지는
메일 맨 마지막에 붙이겠습니다. 지저분하니까 --;;
부탁드리고 싶은것은 ...
시간 나시는 분들은 자기 컴에서 ...
1) 자바 버전과 스칼라 버전을 확인해 주시고,
2) 스칼라 REPL을 실행해서 다음을 copy & paste 해주세요.
import akka.actor._
import ActorDSL._
implicit val system = ActorSystem("demo")
val x = actor( new Act { whenStarting { println("Hello") }} )
3) 결과를 저(
ensh...@gmail.com)에게 이메일로 보내주십시오.
다른 사람들도 문제가 있다면 스칼라 오류로 등록도 하고 책에도 되는 버전을 지목(?)해야 할 것 같네요. 정말 정말 감사합니다.
오현석 드림
--------------- 오류메시지 ---------------------------------
scala> Uncaught error from thread [demo-akka.actor.default-dispatcher-2] shuttin
g down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[demo]
java.lang.AbstractMethodError: $line12.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2$
$anon$1.akka$actor$dsl$Creators$Act$$preStartFun_$eq(Lscala/Function0;)V
at akka.actor.dsl.Creators$Act$class.$init$(Creators.scala:44)
at $line12.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2$$anon$1.<init>(<cons
ole>:14)
[ERROR] [08/30/2014 10:25:39.562] [demo-akka.actor.default-dispatcher-2] [ActorS
ystem(demo)] Uncaught error from thread [demo-akka.actor.default-dispatcher-2] s
hutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
java.lang.AbstractMethodError: $line12.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2$
$anon$1.akka$actor$dsl$Creators$Act$$preStartFun_$eq(Lscala/Function0;)V
at akka.actor.dsl.Creators$Act$class.$init$(Creators.scala:44)
at $line12.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2$$anon$1.<init>(<cons
ole>:14)
at $line12.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
at $line12.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
at akka.actor.TypedCreatorFunctionConsumer.produce(Props.scala:340)
at akka.actor.Props.newActor(Props.scala:249)
at akka.actor.ActorCell.newActor(ActorCell.scala:552)
at akka.actor.ActorCell.create(ActorCell.scala:578)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:263)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(Abst
ractDispatcher.scala:393)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool
.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:19
79)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThre
ad.java:107)
at $line12.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
at $line12.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
at akka.actor.TypedCreatorFunctionConsumer.produce(Props.scala:340)
at akka.actor.Props.newActor(Props.scala:249)
at akka.actor.ActorCell.newActor(ActorCell.scala:552)
at akka.actor.ActorCell.create(ActorCell.scala:578)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:263)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(Abst
ractDispatcher.scala:393)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool
.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:19
79)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThre
ad.java:107)
시간 나실때 다음을 실행해 보시고 결과를 알려주시면 감사하겠습니다.