[scala-korea] 도움요청 - ActorDSL 한번만 실험해 봐 주세요... T.T

117 views
Skip to first unread message

Hyunsok Oh

unread,
Aug 29, 2014, 8:38:52 PM8/29/14
to scala...@googlegroups.com
안녕하세요? 프로그래밍 인 스칼라 책 번역하면서 액터 예제를 스칼라 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)


시간 나실때 다음을 실행해 보시고 결과를 알려주시면 감사하겠습니다.

최정열

unread,
Aug 29, 2014, 9:26:23 PM8/29/14
to scala...@googlegroups.com
scala 2.10 에서는 문제가 없고, 2.11에서 같은 오류가 발생하네요, 윈도우 맥, 자바, akka 버전 상관 없이요.

윈도우
jdk(oracle): 1.8.0_11
akka: 2.3.4

jdk(oracle): 1.7.0_45 & 1.8.0_05
akka: 2.3.4 & 2.3.5 




2014년 8월 30일 오전 9:38, Hyunsok Oh <ensh...@gmail.com>님이 작성:

--
Google 그룹스 '라 스칼라 코딩단' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 scala-korea...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 scala...@googlegroups.com(으)로 이메일을 보내세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/scala-korea/CAMzzDrx%2BFKeAjTOUD6D-GSnJHOPc93%2BKa3WO2RR3%2BwkB1g3sdw%40mail.gmail.com 을(를) 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

JONG-IL SEOK

unread,
Aug 29, 2014, 9:37:34 PM8/29/14
to scala...@googlegroups.com
저도 동일 합니다!

Mac OS X 10.9.4
Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_25)


> scala
Welcome to Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

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#-917645438]

scala> Uncaught error from thread [demo-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[demo]
java.lang.AbstractMethodError: $line9.$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 $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2$$anon$1.<init>(<console>:14)
        at $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
        at $line9.$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(AbstractDispatcher.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:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
[ERROR] [08/30/2014 10:33:26.094] [demo-akka.actor.default-dispatcher-3] [ActorSystem(demo)] Uncaught error from thread [demo-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
java.lang.AbstractMethodError: $line9.$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 $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2$$anon$1.<init>(<console>:14)
        at $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
        at $line9.$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(AbstractDispatcher.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:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)


2014년 8월 30일 오전 10:26, 최정열 <mye...@gmail.com>님이 작성:
--
이 메일은 Google 그룹스 '라 스칼라 코딩단' 그룹에 가입한 분들에게 전송되는 메시지입니다.

이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 scala-korea...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 scala...@googlegroups.com에 이메일을 보내세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/scala-korea/CAD5fO2pp_DctJGw56CQe%3D_r_7_P_G6A%2BPMusQ8qjFYHe3ho9Yw%40mail.gmail.com을(를) 방문하세요.

Seoh

unread,
Aug 30, 2014, 3:30:27 AM8/30/14
to scala...@googlegroups.com
OS: Mac OS X 10.10 DP2

java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

Scala code runner version 2.11.2 -- Copyright 2002-2013, LAMP/EPFL

Uncaught error from thread [demo-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[demo]
java.lang.AbstractMethodError: $line9.$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 $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2$$anon$1.<init>(<console>:14)
at $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
at $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
at akka.actor.TypedCreatorFunctionConsumer.produce(Props.scala:343)
at akka.actor.Props.newActor(Props.scala:252)
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(AbstractDispatcher.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:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
[ERROR] [08/30/2014 16:27:54.554] [demo-akka.actor.default-dispatcher-3] [ActorSystem(demo)] Uncaught error from thread [demo-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
java.lang.AbstractMethodError: $line9.$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 $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2$$anon$1.<init>(<console>:14)
at $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
at $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(<console>:14)
at akka.actor.TypedCreatorFunctionConsumer.produce(Props.scala:343)
at akka.actor.Props.newActor(Props.scala:252)
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(AbstractDispatcher.scala:393)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)

ikhoon

unread,
Aug 31, 2014, 12:05:57 AM8/31/14
to scala...@googlegroups.com
OS X 10.9.4 && scala 2.10.2 && (java 1.6 ||  java 1.7) 에서 문제 없이 동작합니니다.

Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_45).
Type in expressions to have them evaluated.
Type :help for more information.

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]

scala> Hello

$ scala
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_65).
Type in expressions to have them evaluated.
Type :help for more information.

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]

scala> Hello

Eun Song

unread,
Aug 31, 2014, 10:38:52 AM8/31/14
to scala...@googlegroups.com
어떤 버젼의 Akka 를 쓰셨나요? Akka 홈페이지를 확인 하니깐 2.3.5 버젼이 Scala 2.11 를 지원하는고 그 전 버젼들은 지원하지 않는것 같네요.

Eun Woo Song
=======================================
For God so loved the world that he gave his one and only Son, that whoever believes in him shall not perish but have eternal life. (John 3:16)


--
이 메일은 Google 그룹스 '라 스칼라 코딩단' 그룹에 가입한 분들에게 전송되는 메시지입니다.

이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 scala-korea...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 scala...@googlegroups.com에 이메일을 보내세요.

Hyunsok Oh

unread,
Aug 31, 2014, 8:02:00 PM8/31/14
to scala...@googlegroups.com
akka는 스칼라에 번들되어 있습니다(2.11.1 스칼라에는 2.11-2.3.3.jar가 번들). 최신 akka(2.5.5)
다운로드 해서 실험해봐도 증상은 같네요.

이게 재미있는게, 저 whenStarting 메서드 자체는 별로 하는 일이 없다는것.. ActorDSL의 Act를 보면 실제
하는 일은 별거 없거든요.

아래 코드가 원래 액터가 오버라이드해야 하는 preStart() 메서드를 Act안에 정의해 둔 것이고.. 코드 보시면 알겠지만
preStartFun이 정의되어 있으면 이걸 호출합니다. 없으면 수퍼클래스의 preStart()를 호출하고요(수퍼클래스는
akka.actor.Actor임)

override def preStart(): Unit = if (preStartFun != null)
preStartFun() else super.preStart()

whenStarting이라는 것은 그냥 청크 하나 받아서 preStartFun을 재설정해주는 코드고요..

def whenStarting(body: ⇒ Unit): Unit = preStartFun = () ⇒ body

Akka 유저 리스트에 질문을 올렸는데 답이 아직까진 없네요.. 좀 더 봐야겠습니다.

감사합니다.
> https://groups.google.com/d/msgid/scala-korea/CAFP4Upaz9dyis2CtR%3DvW_zM2e3fMq_OjBVuABaiGEv0ORP%2B6mQ%40mail.gmail.com을(를)

Hyunsok Oh

unread,
Aug 31, 2014, 8:26:31 PM8/31/14
to scala...@googlegroups.com
혹시나 해서 REPL에서 실행하지 않고 컴파일 해서 실행하거나 스크립트로 실행하니 잘 되네요.

결국 문제는 REPL에서 akka를 실행하는 방식과 무언가 안 맞는다는 이야기 인것 같습니다.

일단 여기까지만 파고 말아야겠네요.

실험해 주신 모든 분들께 감사드립니다.
Reply all
Reply to author
Forward
0 new messages