Mercurial > hg > Members > anatofuz > slides
annotate 20170116/slide.md @ 1:ac148561d3ef
add 20170116 slide
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 16 Jan 2018 20:37:49 +0900 |
parents | |
children |
rev | line source |
---|---|
1
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 title: 分散フレームワークakkaの調査 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 author: Takahiro Shimizu |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 profile: |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 lang: Japanese |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 # 調査目的 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 * 先輩の修論の比較材料の為に行う |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 * 分散フレームワークの1つであるakkaがどのような書き方、及び処理なのかを調査する |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 # 調査内容 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 * akkaのmac osx,ubuntu上の導入 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 * [公式チュートリアル](https://developer.lightbend.com/guides/akka-quickstart-java/)の例題を行う |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 * 今回はJavaで実行した |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 # 環境構築 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 * 公式からzipファイルで提供されているので落とす |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 * 例題はGradleで実行できるように作成されているので `$ gradle run` を実行可能. |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 # akkaの分散処理 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 * akkaはアクターモデルを採用したフレームワーク |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 * アクターモデルでは「アクター」と呼ばれるオブジェクト同士がメッセージ通信を行うことで並列処理を実現する(イベント・ドリブン) |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 * publicなAPIを持っていない為,強力な分離機能を持っており、複数のJVMなどでも連携可能 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 * 環境透過性 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 * 軽量 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 * JVM上で動き、ScalaとJavaをサポートしている |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 # 例題(Hello,World) |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 * 今回は公式チュートリアルにある、複数のアクターが挨拶をするHello Worldの例題を実行する |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 * <img src="https://developer.lightbend.com/guides/akka-quickstart-java/images/hello-akka-architecture.png"> |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 * 実行結果 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 $ gradle run |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 Starting a Gradle Daemon (subsequent builds will be faster) |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 > Task :run |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 >>> Press ENTER to exit <<< |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 [INFO] [01/16/2018 15:33:05.871] [helloakka-akka.actor.default-dispatcher-4] [akka://helloakka/user/printerActor] Howdy, Akka |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 [INFO] [01/16/2018 15:33:05.872] [helloakka-akka.actor.default-dispatcher-4] [akka://helloakka/user/printerActor] Howdy, Lightbend |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 [INFO] [01/16/2018 15:33:05.872] [helloakka-akka.actor.default-dispatcher-4] [akka://helloakka/user/printerActor] Good day, Play |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 [INFO] [01/16/2018 15:33:05.872] [helloakka-akka.actor.default-dispatcher-4] [akka://helloakka/user/printerActor] Hello, Java |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 # Hello World Actors |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 * 例題のActorrは3種類のmessageを利用する |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 * `WhoToGreet` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 * greetingの受取用オブジェクト |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 * `Greet` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 * greetingの実行用 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 * `Greeting` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 * `greeting`にメッセージを含める為の命令 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 * 複数のスレッドで共有をする必要がある為、メッセージはimmutableでなければならない |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 # Greeter Actor |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 * `Greeter` のコンストラクタは、送信用メッセージと出力用のActorのリファレンスを必要とする |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 * mainの中ではGreeterは複数呼ばれている |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 package com.lightbend.akka.sample; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 import akka.actor.AbstractActor; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 import akka.actor.ActorRef; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 import akka.actor.Props; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 import com.lightbend.akka.sample.Printer.Greeting; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 public class Greeter extends AbstractActor { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 static public Props props(String message, ActorRef printerActor) { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 return Props.create(Greeter.class, () -> new Greeter(message, printerActor)); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 static public class WhoToGreet { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 public final String who; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 public WhoToGreet(String who) { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 this.who = who; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 static public class Greet { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 public Greet() { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 private final String message; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 private final ActorRef printerActor; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 private String greeting = ""; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 public Greeter(String message, ActorRef printerActor) { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 this.message = message; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 this.printerActor = printerActor; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 @Override |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 public Receive createReceive() { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 return receiveBuilder() |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 .match(WhoToGreet.class, wtg -> { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 this.greeting = message + ", " + wtg.who; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 }) |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 .match(Greet.class, x -> { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 printerActor.tell(new Greeting(greeting), getSelf()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 }) |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 .build(); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 # Printer Actor |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 * `Logging.getLogger(getContext().getSystem(), this);` で各Actorが `log.info()` に追記していく |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 * `Greeting` とlogsに対してhandleを所持している |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 package com.lightbend.akka.sample; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 import akka.actor.AbstractActor; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 import akka.actor.ActorRef; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 import akka.actor.Props; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 import akka.event.Logging; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 import akka.event.LoggingAdapter; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 public class Printer extends AbstractActor { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 static public Props props() { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 return Props.create(Printer.class, () -> new Printer()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 static public class Greeting { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 public final String message; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 public Greeting(String message) { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 this.message = message; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 private LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 public Printer() { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 @Override |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 public Receive createReceive() { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 return receiveBuilder() |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 .match(Greeting.class, greeting -> { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 log.info(greeting.message); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 }) |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 .build(); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 # Actorを作る |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 * akkaはインスタンスを作る際に `new` を使わない。これはakkaのインスタンスがリファレンスである為 (`akka.actor.ActorRef`)である。 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 * その為、軽量かつ柔軟にシステムに組み込むことが可能である |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 * akkaのActorは `akka.actor.ActorSystem` が管理する。(factoryなどとも呼ばれる) |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 * 例題では次のようにakkaのインスタンスを作成している。 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 public class AkkaQuickstart { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 public static void main(String[] args) { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 final ActorSystem system = ActorSystem.create("helloakka"); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 try { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 //#create-actors |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 final ActorRef printerActor = |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 system.actorOf(Printer.props(), "printerActor"); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
176 final ActorRef howdyGreeter = |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
177 system.actorOf(Greeter.props("Howdy", printerActor), "howdyGreeter"); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 final ActorRef helloGreeter = |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 system.actorOf(Greeter.props("Hello", printerActor), "helloGreeter"); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180 final ActorRef goodDayGreeter = |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181 system.actorOf(Greeter.props("Good day", printerActor), "goodDayGreeter"); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182 //#create-actors |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 # メッセージ送信 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 * akkaのメッセージ送信は `ActorRef`の`tell`メソッドを呼ぶ。 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 howdyGreeter.tell(new WhoToGreet("Akka"), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 howdyGreeter.tell(new Greet(), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193 howdyGreeter.tell(new WhoToGreet("Lightbend"), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 howdyGreeter.tell(new Greet(), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
195 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196 helloGreeter.tell(new WhoToGreet("Java"), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 helloGreeter.tell(new Greet(), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199 goodDayGreeter.tell(new WhoToGreet("Play"), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200 goodDayGreeter.tell(new Greet(), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203 * `Greeter` Actrorは `Printer` Actorにメッセージを送信している |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 printerActor.tell(new Greeting(greeting), getSelf()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 # テスト |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 * Javaで使われているのでテストはJUnitを利用できる |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
212 * akkaaでは `akka.test.javadsl.TestKit` が用意されており, TestKit が推奨されている。 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
213 * 詳しくは[公式ドキュメント](https://doc.akka.io/docs/akka/current/testing.html?language=java)を見ろということらしい… |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 ``` |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
216 `ckage com.lightbend.akka.sample; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 import akka.actor.ActorRef; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219 import akka.actor.ActorSystem; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 import akka.testkit.javadsl.TestKit; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 import com.lightbend.akka.sample.Greeter.*; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 import com.lightbend.akka.sample.Printer.*; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 import static org.junit.Assert.assertEquals; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 import org.junit.AfterClass; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 import org.junit.BeforeClass; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 import org.junit.Test; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 public class AkkaQuickstartTest { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
231 static ActorSystem system; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
232 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
233 @BeforeClass |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
234 public static void setup() { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
235 system = ActorSystem.create(); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
237 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
238 @AfterClass |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
239 public static void teardown() { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
240 TestKit.shutdownActorSystem(system); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
241 system = null; |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
242 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
243 |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
244 @Test |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
245 public void testGreeterActorSendingOfGreeting() { |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
246 final TestKit testProbe = new TestKit(system); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
247 final ActorRef helloGreeter = system.actorOf(Greeter.props("Hello", testProbe.getRef())); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
248 helloGreeter.tell(new WhoToGreet("Akka"), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 helloGreeter.tell(new Greet(), ActorRef.noSender()); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
250 Greeting greeting = testProbe.expectMsgClass(Greeting.class); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
251 assertEquals("Hello, Akka", greeting.message); |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
252 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
253 } |
ac148561d3ef
add 20170116 slide
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
254 ``` |