7
7
8
8
## 目次
9
9
10
- + [ ビルド方法] ( #■ -ビルド方法 )
11
- + [ アプリケーションの起動] ( #■ -アプリケーションの起動 )
12
- + [ Docker イメージの作成] ( #■ -docker-イメージの作成 )
13
- + [ Health デモ] ( #■ -microprofile-health-デモ-oracledemohealth-パッケージ )
14
- + [ Open Tracing デモ] ( #■ -open-tracing-デモ-oracledemotracing-パッケージ )
15
- + [ Open Tracing 拡張] ( #■ -opentracing-span定義のためのアノテーション-oracledemotracinginterceptor-パッケージ )
16
- + [ Metrics デモ] ( #■ -metrics-デモ-oracledemometrics-パッケージ )
17
- + [ Fault Tolerance デモ] ( #■ -fault-tolerance-デモ-oracledemoft-パッケージ )
18
- + [ Open API デモ] ( #■ -open-api-oracledemocountry-パッケージ )
19
- + [ Rest Client デモ] ( #■ -microprofile-rest-client-oracledemorestclient-パッケージ )
20
- + [ Security デモ] ( #■ -security-oracledemosecurity-パッケージ )
21
- + [ JPA/Transaction デモ] ( #■ -jpa-java-persistence-api-デモ-oracledemojpa-パッケージ )
22
- + [ gRPC デモ] ( #■ -grpc-デモ-oracledemogrpc-パッケージ )
23
- + [ Reactive Messaging デモ] ( #■ -microprofile-reactive-messaging-デモ-oracledemoreactive-パッケージ )
24
- + [ GraphQL デモ] ( #■ -microprofile-graphql-デモ-oracledemographql-パッケージ )
25
- + [ Mapped Diagnostic Context (Mdc) デモ] ( #■ -Mapped-Diagnostic-Context-Mdc-デモ-oracledemologging-パッケージ )
26
- + [ おまけ] ( #■ -おまけcowsay-oracledemocowweb-パッケージ )
10
+ + [ ビルド方法] ( #-ビルド方法 )
11
+ + [ アプリケーションの起動] ( #-アプリケーションの起動 )
12
+ + [ Docker イメージの作成] ( #-docker-イメージの作成 )
13
+ + [ Health デモ] ( #-microprofile-health-デモ-oracledemohealth-パッケージ )
14
+ + [ Open Tracing デモ] ( #-open-tracing-デモ-oracledemotracing-パッケージ )
15
+ + [ Open Tracing 拡張] ( #-opentracing-span定義のためのアノテーション-oracledemotracinginterceptor-パッケージ )
16
+ + [ Metrics デモ] ( #-metrics-デモ-oracledemometrics-パッケージ )
17
+ + [ Fault Tolerance デモ] ( #-fault-tolerance-デモ-oracledemoft-パッケージ )
18
+ + [ Open API デモ] ( #-open-api-oracledemocountry-パッケージ )
19
+ + [ Rest Client デモ] ( #-microprofile-rest-client-oracledemorestclient-パッケージ )
20
+ + [ Security デモ] ( #-security-oracledemosecurity-パッケージ )
21
+ + [ JPA/Transaction デモ] ( #-jpa-java-persistence-api-デモ-oracledemojpa-パッケージ )
22
+ + [ gRPC デモ] ( #-grpc-デモ-oracledemogrpc-パッケージ )
23
+ + [ Reactive Messaging デモ] ( #-microprofile-reactive-messaging-デモ-oracledemoreactive-パッケージ )
24
+ + [ GraphQL デモ] ( #-microprofile-graphql-デモ-oracledemographql-パッケージ )
25
+ + [ Mapped Diagnostic Context (Mdc) デモ] ( #-Mapped-Diagnostic-Context-Mdc-デモ-oracledemologging-パッケージ )
26
+ + [ おまけ] ( #-おまけcowsay-oracledemocowweb-パッケージ )
27
27
28
28
## デモのソース
29
29
30
+ <details >
31
+ <summary >ディレクトリ & ファイル</summary >
32
+
30
33
``` text
31
34
src/main
32
35
├── java
@@ -90,7 +93,17 @@ src/main
90
93
│ │ ├── Country.java
91
94
│ │ ├── CountryResource.java
92
95
│ │ ├── Greeting.java
93
- │ │ └── JPAExampleResource.java
96
+ │ │ ├── JPAExampleResource.java
97
+ │ │ └── ecid [ECID Database連携]
98
+ │ │ ├── EcidAware.java
99
+ │ │ ├── EcidExampleResource.java
100
+ │ │ ├── EcidInterceptor.java
101
+ │ │ └── Ecid.java
102
+ │ ├── logging [拡張機能 Mdc]
103
+ │ │ ├── MdcInterceptor.java
104
+ │ │ ├── Mdc.java
105
+ │ │ ├── MdcResource.java
106
+ │ │ └── Sub.java
94
107
│ ├── grpc [拡張機能 gRPC]
95
108
│ │ ├── javaobj [gRPC Javaシリアライゼーション版]
96
109
│ │ │ ├── GreeterServiceImpl.java
@@ -128,15 +141,23 @@ demo
128
141
│ └── simple-service.yaml
129
142
├── tracing [トレーシングデモ]
130
143
│ ├── request.json
131
- │ └── tracing-demo.sh
144
+ │ ├── tracing-demo.sh
145
+ │ └── oracledb [Oracle database コンテナ作成・設定]
146
+ │ ├── populate-demodata.sh
147
+ │ ├── populate-demodata.sql
148
+ │ ├── sqlplus.sh
149
+ │ ├── sql.sh
150
+ │ └── start-oracledb.sh
132
151
└── weblogic [WebLogic Server コンテナ作成・設定]
133
152
├── config-jms.sh
134
153
├── config-jms.yaml
135
154
├── domain.properties
136
155
└── start-weblogic.sh
137
156
```
157
+ </details >
158
+ <br >
138
159
139
- ## ■ ビルド方法
160
+ ## § ビルド方法
140
161
141
162
``` bash
142
163
# for the first time, generate java source files for gRPC by compiling proto file
@@ -145,13 +166,18 @@ mvn clean -P protoc generate-sources
145
166
mvn package
146
167
```
147
168
148
- ## ■ アプリケーションの起動
169
+ <br >
170
+
171
+ ## § アプリケーションの起動
149
172
150
173
``` bash
151
174
java -jar target/helidon-demo-mp.jar
152
175
```
153
176
154
- ## ■ Docker イメージの作成
177
+ [ 目次に戻る] ( #目次 )
178
+ <br >
179
+
180
+ ## § Docker イメージの作成
155
181
156
182
Dockerfileを使わずに、[ Jib] ( https://github.com/GoogleContainerTools/jib ) を使ってMavenから直接イメージをビルドします.
157
183
ルートディレクトリにあるDockerfileを使ってもイメージの作成は可能です.
@@ -189,7 +215,7 @@ $ docker push (remote docker repository prefix/)helidon-demo-mp
189
215
[ 目次に戻る] ( #目次 )
190
216
<br >
191
217
192
- ## ■ MicroProfile Health デモ (oracle.demo.health パッケージ)
218
+ ## § MicroProfile Health デモ (oracle.demo.health パッケージ)
193
219
194
220
` /health/live ` (Liveness)、` /health/ready ` (Readiness) 及び ` /health ` (複合パターン) のエンドポイントを使ってヘルスチェックができます。
195
221
@@ -290,7 +316,7 @@ Events:
290
316
[ 目次に戻る] ( #目次 )
291
317
<br >
292
318
293
- ## ■ Open Tracing デモ (oracle.demo.tracing パッケージ)
319
+ ## § Open Tracing デモ (oracle.demo.tracing パッケージ)
294
320
295
321
Kubernetes に デモのPodを4つと、jaegerのPodをデプロイします。
296
322
@@ -342,7 +368,7 @@ $ demo/tracing/tracing-demo.sh [start | stop]
342
368
[ 目次に戻る] ( #目次 )
343
369
<br >
344
370
345
- ## ■ OpenTracing SPAN定義のためのアノテーション (oracle.demo.tracing.interceptor パッケージ)
371
+ ## § OpenTracing SPAN定義のためのアノテーション (oracle.demo.tracing.interceptor パッケージ)
346
372
347
373
MicroProfileのOpenTracingの実装の多くはSPANの定義を暗黙的に行っているケースが多く、コーディングしなくてもそれなりのトレース情報が出力されるので便利です。また、明示的にSPANを定義したい場合は@Traced アノテーション(org.eclipse.microprofile.opentracing.Traced)を使って、メソッドにトレース出力をつけることができます。しかしながら、標準機能では必ずしも欲しい情報を出力してくれるとは限りません。そこで、ここではSPANの定義処理をCDI Interceptorとして実装して、Trace出力の内容をアノテーションである程度コントロールできるようにしてみました。
348
374
@@ -383,7 +409,7 @@ public List<Country> getCountriesWithError(){
383
409
[ 目次に戻る] ( #目次 )
384
410
<br >
385
411
386
- ## ■ Metrics デモ (oracle.demo.metrics パッケージ)
412
+ ## § Metrics デモ (oracle.demo.metrics パッケージ)
387
413
388
414
Mwtrics には以下の3種類のスコープが存在します。
389
415
@@ -434,7 +460,7 @@ $ curl localhost:8080/mpmetrics/count-total
434
460
[ 目次に戻る] ( #目次 )
435
461
<br >
436
462
437
- ## ■ Fault Tolerance デモ (oracle.demo.ft パッケージ)
463
+ ## § Fault Tolerance デモ (oracle.demo.ft パッケージ)
438
464
439
465
メソッドやクラスにアノテーションを付与して、障害発生時の振る舞いを設定することができます。
440
466
@@ -505,7 +531,7 @@ application_ft_oracle_demo_ft_FaultToleranceResource_circuitBreaker_circuitbreak
505
531
[ 目次に戻る] ( #目次 )
506
532
<br >
507
533
508
- ## ■ Open API (oracle.demo.country パッケージ)
534
+ ## § Open API (oracle.demo.country パッケージ)
509
535
510
536
APIの仕様を定義する規約である Open API に基づいたRESTエンドポイントのメタデータを公開できます。
511
537
特に何もしなくても最低限の仕様情報は自動的に生成できますが、アノテーションを使って付加的な情報を付加することができます。
@@ -582,7 +608,7 @@ paths:
582
608
[ 目次に戻る] ( #目次 )
583
609
<br >
584
610
585
- ## ■ MicroProfile Rest Client (oracle.demo.restclient パッケージ)
611
+ ## § MicroProfile Rest Client (oracle.demo.restclient パッケージ)
586
612
587
613
MicroProfile では RESTコールを行う「タイプセーフ」なクライアントAPIを規定しています。つまりJavaのメソッドを呼び出すと内部でREST呼び出しを行ってくれます。呼び出しのパラメータも返り値も全てJavaオブジェクトとして扱うことができ、RESTコールに関する手間を省きコーディング・ミスを減らすことができます。
588
614
@@ -640,7 +666,7 @@ $ curl localhost:8080/restclient/1/reviews
640
666
[ 目次に戻る] ( #目次 )
641
667
<br >
642
668
643
- ## ■ Security (oracle.demo.security パッケージ)
669
+ ## § Security (oracle.demo.security パッケージ)
644
670
645
671
ユーザーに以下のロールがアサインされているとします。
646
672
@@ -685,7 +711,7 @@ security:
685
711
@GET @Path (" /user" ) public String getUser() {}
686
712
```
687
713
688
- <details open = " true " >
714
+ <details open >
689
715
<summary >各々のRESTエンドポイントを異なるユーザーでGETしてみる</summary >
690
716
691
717
``` bash
@@ -744,7 +770,7 @@ $ curl -v -u john:password1 localhost:8080/security/basic/admin
744
770
[ 目次に戻る] ( #目次 )
745
771
<br >
746
772
747
- ## ■ JPA (Java Persistence API) デモ (oracle.demo.jpa パッケージ)
773
+ ## § JPA (Java Persistence API) デモ (oracle.demo.jpa パッケージ)
748
774
749
775
Helidon は拡張機能として Java Persistence API (JPA) と Java Transaction API (JTA) をサポートしています。
750
776
このデモでは
@@ -886,7 +912,7 @@ $ docker rm oracledb
886
912
[ 目次に戻る] ( #目次 )
887
913
<br >
888
914
889
- ## ■ gRPC デモ (oracle.demo.grpc パッケージ)
915
+ ## § gRPC デモ (oracle.demo.grpc パッケージ)
890
916
891
917
gRPCで転送するデータのフォーマットはprotobuが一般的ですが、仕様上は任意のものが利用可能です。HelidonはgRPCを簡単にプロトタイプできるように、Javaシリアライゼーションを使った実装方法も提供しています。このデモにおいても、** protobufを用いた方法** (oracle.demo.grpc.protobuf パッケージ) と ** Javaシリアライゼーションを用いた方法** (oracle.demo.grpc.javaobj パッケージ) の2種類を提供しています。
892
918
@@ -980,7 +1006,7 @@ pom.xml の通常ビルドフェーズとは独立してprotoファイルのコ
980
1006
[ 目次に戻る] ( #目次 )
981
1007
<br >
982
1008
983
- ## ■ MicroProfile Reactive Messaging デモ (oracle.demo.reactive パッケージ)
1009
+ ## § MicroProfile Reactive Messaging デモ (oracle.demo.reactive パッケージ)
984
1010
985
1011
JPA/JDBC経由でデータベースにアクセスするデモ(oracle.demo.jpaパッケージ)のバリエーションとして、MicroProfile Reactive Messaging を使ったデータベースの非同期更新(Event Sourcing)処理を実装しています。RESTでリクエストを受け付けた後、非同期更新イベントを発行します。
986
1012
[ データベースへのアクセスパターン] ( #データベースへのアクセスパターン ) を参照してください。
@@ -1028,15 +1054,15 @@ curl -v http://localhost:8080/jpa/country/61 # 404 Not Found
1028
1054
1029
1055
適当なキューを定義して下さい。
1030
1056
後述する「テスト用の WebLogic Server Docker インスタンスの作成」の項の手順に従えば、
1031
- このデモ用の設定がされた Dockerコンテナ・ベースのWebLogic Serverを準備することができます 。
1057
+ このデモ用の設定がされた Dockerコンテナ・ベースの WebLogic Server を準備することができます 。
1032
1058
</details >
1033
1059
1034
1060
<details >
1035
- <summary >2. Mavenのローカル・リポジトリを作成して、WebLogic Serverのクライアント ・ライブラリ(wlthint3client.jar)をデプロイする</summary >
1061
+ <summary >2. Mavenのローカル・リポジトリを作成して、WebLogic Server のクライアント ・ライブラリ(wlthint3client.jar)をデプロイする</summary >
1036
1062
1037
1063
クライアント・ライブラリはパブリックMavenリポジトリからは入手できませんので、ローカル・リポジトリをマニュアルで作成します。
1038
1064
` create-local-repo.sh ` を編集してこのシェルを実行してください。` m2repo ` フォルダにjarファイルがデプロイされます。
1039
- wlthint3client.jar は後述するWebLogic Serverのコンテナ ・イメージから入手するのが簡単かもしれません。
1065
+ wlthint3client.jar は後述する WebLogic Server のコンテナ ・イメージから入手するのが簡単かもしれません。
1040
1066
1041
1067
``` bash
1042
1068
WL_HOME=${HOME} /opt/wls1411
@@ -1083,7 +1109,7 @@ public class ReactiveJmsResourceTest{
1083
1109
< / details>
1084
1110
1085
1111
< details>
1086
- < summary> 4. src/ main/ resources/ application. yaml を編集して、WebLogic Server の接続設定を行う < / summary>
1112
+ < summary> 4. src/ main/ resources/ application. yaml を編集して、WebLogic Server の接続設定を行う < / summary>
1087
1113
1088
1114
```yaml
1089
1115
# Reactive Messaging
@@ -1125,7 +1151,7 @@ $ mvn package -P db-oracale,weblogic -DskipTests=true
1125
1151
< / details>
1126
1152
< br>
1127
1153
1128
- ### テスト用の WebLogic Server Docker インスタンスの作成するには ?
1154
+ ### WebLogic Server のテスト用 Docker インスタンスを作成するには ?
1129
1155
1130
1156
JMS Connector のデモに使うための設定済み WebLogic Server インスタンスを Docker コンテナで実行するためのスクリプトを用意しています。
1131
1157
@@ -1167,7 +1193,7 @@ docker cp wls1411:/u01/oracle/wlserver/server/lib/wlthint3client.jar wlthint3cli
1167
1193
[目次に戻る](#目次)
1168
1194
< br>
1169
1195
1170
- ## ■ MicroProfile GraphQL デモ (oracle. demo. graphql パッケージ)
1196
+ ## § MicroProfile GraphQL デモ (oracle. demo. graphql パッケージ)
1171
1197
1172
1198
JPA 経由でデータベースのCRUD 操作をRest で公開するコードは既に提供していましたが、これをMicroProfile GraphQL 仕様にしたものを追加しました。
1173
1199
スキーマは `/ graphql/ schema. graphql` から取得できます。
@@ -1241,11 +1267,11 @@ curl -X POST -H "Content-Type: application/json" localhost:8080/graphql \
1241
1267
[目次に戻る](#目次)
1242
1268
< br>
1243
1269
1244
- ## ■ Mapped Diagnostic Context (Mdc ) デモ (oracle. demo. logging パッケージ)
1270
+ ## § Mapped Diagnostic Context (Mdc ) デモ (oracle. demo. logging パッケージ)
1245
1271
1246
1272
Mapped Diagnostic Context (Mdc ) は、並列処理で実行されるログ出力をトレースするために使うことができます。サーバーが複数のクライアントからのリクエストをマルチスレッドで処理する(= 同じクラス&メソッドのログ出力が入り乱れる)場合などに便利です。ログに実行スレッド名を出力することもできますが、単一のリクエストの処理が複数のスレッドにまたがって行われるようなケースでは、スレッドをまたがったトレースが困難になります。
1247
1273
1248
- このデモでは、実行コンテキストID の付与 (Execution Context ID = ECID ) を Mdc を使って実装します。Mdc の設定・消去は CDI Intercepter を使っていますので、本来の業務ロジックの処理(= メソッドの中身)には影響を与えずに、メソッドの実行前後で Mdc 関連の処理を割り込ませています。
1274
+ このデモでは、実行コンテキストID の付与 (Execution Context ID = ECID ) を Mdc を使って実装します。Mdc の設定・消去は CDI Intercepter ( @Mdc アノテーション) を使っていますので、本来の業務ロジックの処理(= メソッドの中身)には影響を与えずに、メソッドの実行前後で Mdc 関連の処理を割り込ませています。
1249
1275
ECID がメソッドの実行時に存在しない場合、ID を新たに設定し、メソッド終了時に新規設定した ID を消去します。 ECID がメソッドの実行時に既に存在する場合、処理は行わずスルーします。
1250
1276
1251
1277
**/ logging**
@@ -1270,15 +1296,15 @@ java.util.logging.SimpleFormatter.format=!thread! ECID\{%X{ECID}\} %5$s%6$s%n
1270
1296
2 つのエンドポイントに GET してみます。
1271
1297
1272
1298
```
1273
- curl http: // localhost:8080/logging
1299
+ curl http: // localhost:8080/logging # MdcResource#nomdc()
1274
1300
// ログ出力
1275
1301
Thread [helidon- 1 ,5 ,server] ECID {} Invoking Sub #get()
1276
1302
Thread [helidon- 1 ,5 ,server] ECID {a7171880- 0cb9- 40f6- 8178 - d1d385e85e4a} Sub #get() called
1277
1303
Thread [sub- 1 ,5 ,helidon- thread- pool- 7 ] ECID {a7171880- 0cb9- 40f6- 8178 - d1d385e85e4a} Thread started
1278
1304
Thread [helidon- 1 ,5 ,server] ECID {a7171880- 0cb9- 40f6- 8178 - d1d385e85e4a} Thread ended
1279
1305
Thread [helidon- 1 ,5 ,server] ECID {} Ended Sub #get()
1280
1306
1281
- curl http: // localhost:8080/logging/mdc
1307
+ curl http: // localhost:8080/logging/mdc # @Mdc MdcResource#mdc()
1282
1308
// ログ出力
1283
1309
Thread [helidon- 2 ,5 ,server] ECID {c52dc4d6- deb1- 4de7- 91b0- 39b57fd12e7a} Invoking Sub #get()
1284
1310
Thread [helidon- 2 ,5 ,server] ECID {c52dc4d6- deb1- 4de7- 91b0- 39b57fd12e7a} Sub #get() called
@@ -1394,7 +1420,7 @@ BEGIN DEMO.INSERT_COUNTRY(:1 , :2 , :3 ); END;
1394
1420
[目次に戻る](#目次)
1395
1421
<br>
1396
1422
1397
- ## ■ (おまけ)Cowsay (oracle.demo.cowweb パッケージ)
1423
+ ## § (おまけ)Cowsay (oracle.demo.cowweb パッケージ)
1398
1424
1399
1425
https://github.com/ricksbrown/cowsay
1400
1426
0 commit comments