Skip to content

Commit 01b86ff

Browse files
committed
Squashed commit of the following:
commit b5adc8d038ed359e8fa66cf05f6fff6382801355 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Mon Feb 1 10:37:30 2021 +0900 updated commit 0fe371b Author: tkote <7146253+tkote@users.noreply.github.com> Date: Thu Jan 28 17:13:51 2021 +0900 updated source tree commit eb6b84d Author: tkote <7146253+tkote@users.noreply.github.com> Date: Thu Jan 28 15:43:13 2021 +0900 typo commit 63701f0 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Thu Jan 28 10:43:12 2021 +0900 changed leading char of section commit 5124739 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Thu Jan 28 10:37:04 2021 +0900 new section mark test commit 670f226 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Wed Jan 27 17:49:33 2021 +0900 fixed internal links commit 6dd9d95 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Wed Jan 27 14:29:35 2021 +0900 fixed level commit ab3b1c3 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Wed Jan 27 13:56:09 2021 +0900 updated commit 6107aea Author: tkote <7146253+tkote@users.noreply.github.com> Date: Wed Jan 27 13:55:56 2021 +0900 change the name of key for datasources commit b873084 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Mon Jan 25 00:04:38 2021 +0900 define ORACLE_HOST to change it in rutime commit 4ff1f6d Author: tkote <7146253+tkote@users.noreply.github.com> Date: Mon Jan 25 00:03:02 2021 +0900 bug fix commit 7fe9433 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Sun Jan 24 23:38:46 2021 +0900 changed db to enterprise edition commit a633d49 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Sun Jan 24 03:14:04 2021 +0900 second commit of prototype commit 45f264d Author: tkote <7146253+tkote@users.noreply.github.com> Date: Thu Jan 21 18:43:18 2021 +0900 first commit of prototype
1 parent 1517f37 commit 01b86ff

File tree

1 file changed

+71
-45
lines changed

1 file changed

+71
-45
lines changed

README.md

Lines changed: 71 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,29 @@
77

88
## 目次
99

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-パッケージ)
2727

2828
## デモのソース
2929

30+
<details>
31+
<summary>ディレクトリ & ファイル</summary>
32+
3033
```text
3134
src/main
3235
├── java
@@ -90,7 +93,17 @@ src/main
9093
│ │ ├── Country.java
9194
│ │ ├── CountryResource.java
9295
│ │ ├── 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
94107
│   ├── grpc [拡張機能 gRPC]
95108
│   │   ├── javaobj [gRPC Javaシリアライゼーション版]
96109
│   │   │   ├── GreeterServiceImpl.java
@@ -128,15 +141,23 @@ demo
128141
│   └── simple-service.yaml
129142
├── tracing [トレーシングデモ]
130143
│ ├── 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
132151
└── weblogic [WebLogic Server コンテナ作成・設定]
133152
├── config-jms.sh
134153
├── config-jms.yaml
135154
├── domain.properties
136155
└── start-weblogic.sh
137156
```
157+
</details>
158+
<br>
138159

139-
## ビルド方法
160+
## § ビルド方法
140161

141162
```bash
142163
# for the first time, generate java source files for gRPC by compiling proto file
@@ -145,13 +166,18 @@ mvn clean -P protoc generate-sources
145166
mvn package
146167
```
147168

148-
## ■ アプリケーションの起動
169+
<br>
170+
171+
## § アプリケーションの起動
149172

150173
```bash
151174
java -jar target/helidon-demo-mp.jar
152175
```
153176

154-
## ■ Docker イメージの作成
177+
[目次に戻る](#目次)
178+
<br>
179+
180+
## § Docker イメージの作成
155181

156182
Dockerfileを使わずに、[Jib](https://github.com/GoogleContainerTools/jib) を使ってMavenから直接イメージをビルドします.
157183
ルートディレクトリにあるDockerfileを使ってもイメージの作成は可能です.
@@ -189,7 +215,7 @@ $ docker push (remote docker repository prefix/)helidon-demo-mp
189215
[目次に戻る](#目次)
190216
<br>
191217

192-
## MicroProfile Health デモ (oracle.demo.health パッケージ)
218+
## § MicroProfile Health デモ (oracle.demo.health パッケージ)
193219

194220
`/health/live` (Liveness)、`/health/ready` (Readiness) 及び `/health` (複合パターン) のエンドポイントを使ってヘルスチェックができます。
195221

@@ -290,7 +316,7 @@ Events:
290316
[目次に戻る](#目次)
291317
<br>
292318

293-
## Open Tracing デモ (oracle.demo.tracing パッケージ)
319+
## § Open Tracing デモ (oracle.demo.tracing パッケージ)
294320

295321
Kubernetes に デモのPodを4つと、jaegerのPodをデプロイします。
296322

@@ -342,7 +368,7 @@ $ demo/tracing/tracing-demo.sh [start | stop]
342368
[目次に戻る](#目次)
343369
<br>
344370

345-
## OpenTracing SPAN定義のためのアノテーション (oracle.demo.tracing.interceptor パッケージ)
371+
## § OpenTracing SPAN定義のためのアノテーション (oracle.demo.tracing.interceptor パッケージ)
346372

347373
MicroProfileのOpenTracingの実装の多くはSPANの定義を暗黙的に行っているケースが多く、コーディングしなくてもそれなりのトレース情報が出力されるので便利です。また、明示的にSPANを定義したい場合は@Tracedアノテーション(org.eclipse.microprofile.opentracing.Traced)を使って、メソッドにトレース出力をつけることができます。しかしながら、標準機能では必ずしも欲しい情報を出力してくれるとは限りません。そこで、ここではSPANの定義処理をCDI Interceptorとして実装して、Trace出力の内容をアノテーションである程度コントロールできるようにしてみました。
348374

@@ -383,7 +409,7 @@ public List<Country> getCountriesWithError(){
383409
[目次に戻る](#目次)
384410
<br>
385411

386-
## Metrics デモ (oracle.demo.metrics パッケージ)
412+
## § Metrics デモ (oracle.demo.metrics パッケージ)
387413

388414
Mwtrics には以下の3種類のスコープが存在します。
389415

@@ -434,7 +460,7 @@ $ curl localhost:8080/mpmetrics/count-total
434460
[目次に戻る](#目次)
435461
<br>
436462

437-
## Fault Tolerance デモ (oracle.demo.ft パッケージ)
463+
## § Fault Tolerance デモ (oracle.demo.ft パッケージ)
438464

439465
メソッドやクラスにアノテーションを付与して、障害発生時の振る舞いを設定することができます。
440466

@@ -505,7 +531,7 @@ application_ft_oracle_demo_ft_FaultToleranceResource_circuitBreaker_circuitbreak
505531
[目次に戻る](#目次)
506532
<br>
507533

508-
## Open API (oracle.demo.country パッケージ)
534+
## § Open API (oracle.demo.country パッケージ)
509535

510536
APIの仕様を定義する規約である Open API に基づいたRESTエンドポイントのメタデータを公開できます。
511537
特に何もしなくても最低限の仕様情報は自動的に生成できますが、アノテーションを使って付加的な情報を付加することができます。
@@ -582,7 +608,7 @@ paths:
582608
[目次に戻る](#目次)
583609
<br>
584610

585-
## MicroProfile Rest Client (oracle.demo.restclient パッケージ)
611+
## § MicroProfile Rest Client (oracle.demo.restclient パッケージ)
586612

587613
MicroProfile では RESTコールを行う「タイプセーフ」なクライアントAPIを規定しています。つまりJavaのメソッドを呼び出すと内部でREST呼び出しを行ってくれます。呼び出しのパラメータも返り値も全てJavaオブジェクトとして扱うことができ、RESTコールに関する手間を省きコーディング・ミスを減らすことができます。
588614

@@ -640,7 +666,7 @@ $ curl localhost:8080/restclient/1/reviews
640666
[目次に戻る](#目次)
641667
<br>
642668

643-
## Security (oracle.demo.security パッケージ)
669+
## § Security (oracle.demo.security パッケージ)
644670

645671
ユーザーに以下のロールがアサインされているとします。
646672

@@ -685,7 +711,7 @@ security:
685711
@GET @Path("/user") public String getUser() {}
686712
```
687713

688-
<details open="true">
714+
<details open>
689715
<summary>各々のRESTエンドポイントを異なるユーザーでGETしてみる</summary>
690716

691717
```bash
@@ -744,7 +770,7 @@ $ curl -v -u john:password1 localhost:8080/security/basic/admin
744770
[目次に戻る](#目次)
745771
<br>
746772

747-
## JPA (Java Persistence API) デモ (oracle.demo.jpa パッケージ)
773+
## § JPA (Java Persistence API) デモ (oracle.demo.jpa パッケージ)
748774

749775
Helidon は拡張機能として Java Persistence API (JPA) と Java Transaction API (JTA) をサポートしています。
750776
このデモでは
@@ -886,7 +912,7 @@ $ docker rm oracledb
886912
[目次に戻る](#目次)
887913
<br>
888914

889-
## gRPC デモ (oracle.demo.grpc パッケージ)
915+
## § gRPC デモ (oracle.demo.grpc パッケージ)
890916

891917
gRPCで転送するデータのフォーマットはprotobuが一般的ですが、仕様上は任意のものが利用可能です。HelidonはgRPCを簡単にプロトタイプできるように、Javaシリアライゼーションを使った実装方法も提供しています。このデモにおいても、**protobufを用いた方法** (oracle.demo.grpc.protobuf パッケージ) と **Javaシリアライゼーションを用いた方法** (oracle.demo.grpc.javaobj パッケージ) の2種類を提供しています。
892918

@@ -980,7 +1006,7 @@ pom.xml の通常ビルドフェーズとは独立してprotoファイルのコ
9801006
[目次に戻る](#目次)
9811007
<br>
9821008

983-
## MicroProfile Reactive Messaging デモ (oracle.demo.reactive パッケージ)
1009+
## § MicroProfile Reactive Messaging デモ (oracle.demo.reactive パッケージ)
9841010

9851011
JPA/JDBC経由でデータベースにアクセスするデモ(oracle.demo.jpaパッケージ)のバリエーションとして、MicroProfile Reactive Messaging を使ったデータベースの非同期更新(Event Sourcing)処理を実装しています。RESTでリクエストを受け付けた後、非同期更新イベントを発行します。
9861012
[データベースへのアクセスパターン](#データベースへのアクセスパターン) を参照してください。
@@ -1028,15 +1054,15 @@ curl -v http://localhost:8080/jpa/country/61 # 404 Not Found
10281054

10291055
適当なキューを定義して下さい。
10301056
後述する「テスト用の WebLogic Server Docker インスタンスの作成」の項の手順に従えば、
1031-
このデモ用の設定がされた Dockerコンテナ・ベースのWebLogic Serverを準備することができます
1057+
このデモ用の設定がされた Dockerコンテナ・ベースの WebLogic Server を準備することができます
10321058
</details>
10331059

10341060
<details>
1035-
<summary>2. Mavenのローカル・リポジトリを作成して、WebLogic Serverのクライアント・ライブラリ(wlthint3client.jar)をデプロイする</summary>
1061+
<summary>2. Mavenのローカル・リポジトリを作成して、WebLogic Server のクライアント・ライブラリ(wlthint3client.jar)をデプロイする</summary>
10361062

10371063
クライアント・ライブラリはパブリックMavenリポジトリからは入手できませんので、ローカル・リポジトリをマニュアルで作成します。
10381064
`create-local-repo.sh` を編集してこのシェルを実行してください。`m2repo`フォルダにjarファイルがデプロイされます。
1039-
wlthint3client.jar は後述するWebLogic Serverのコンテナ・イメージから入手するのが簡単かもしれません。
1065+
wlthint3client.jar は後述する WebLogic Server のコンテナ・イメージから入手するのが簡単かもしれません。
10401066

10411067
```bash
10421068
WL_HOME=${HOME}/opt/wls1411
@@ -1083,7 +1109,7 @@ public class ReactiveJmsResourceTest{
10831109
</details>
10841110

10851111
<details>
1086-
<summary>4. src/main/resources/application.yaml を編集して、WebLogic Serverの接続設定を行う</summary>
1112+
<summary>4. src/main/resources/application.yaml を編集して、WebLogic Server の接続設定を行う</summary>
10871113

10881114
```yaml
10891115
# Reactive Messaging
@@ -1125,7 +1151,7 @@ $ mvn package -P db-oracale,weblogic -DskipTests=true
11251151
</details>
11261152
<br>
11271153

1128-
### テスト用の WebLogic Server Docker インスタンスの作成するには
1154+
### WebLogic Server のテスト用 Docker インスタンスを作成するには
11291155

11301156
JMS Connector のデモに使うための設定済み WebLogic Server インスタンスを Docker コンテナで実行するためのスクリプトを用意しています。
11311157

@@ -1167,7 +1193,7 @@ docker cp wls1411:/u01/oracle/wlserver/server/lib/wlthint3client.jar wlthint3cli
11671193
[目次に戻る](#目次)
11681194
<br>
11691195

1170-
## MicroProfile GraphQL デモ (oracle.demo.graphql パッケージ)
1196+
## § MicroProfile GraphQL デモ (oracle.demo.graphql パッケージ)
11711197

11721198
JPA経由でデータベースのCRUD操作をRestで公開するコードは既に提供していましたが、これをMicroProfile GraphQL仕様にしたものを追加しました。
11731199
スキーマは `/graphql/schema.graphql` から取得できます。
@@ -1241,11 +1267,11 @@ curl -X POST -H "Content-Type: application/json" localhost:8080/graphql \
12411267
[目次に戻る](#目次)
12421268
<br>
12431269

1244-
## Mapped Diagnostic Context (Mdc) デモ (oracle.demo.logging パッケージ)
1270+
## § Mapped Diagnostic Context (Mdc) デモ (oracle.demo.logging パッケージ)
12451271

12461272
Mapped Diagnostic Context (Mdc) は、並列処理で実行されるログ出力をトレースするために使うことができます。サーバーが複数のクライアントからのリクエストをマルチスレッドで処理する(=同じクラス&メソッドのログ出力が入り乱れる)場合などに便利です。ログに実行スレッド名を出力することもできますが、単一のリクエストの処理が複数のスレッドにまたがって行われるようなケースでは、スレッドをまたがったトレースが困難になります。
12471273

1248-
このデモでは、実行コンテキストIDの付与 (Execution Context ID = ECID) を Mdc を使って実装します。Mdcの設定・消去は CDI Intercepter を使っていますので、本来の業務ロジックの処理(=メソッドの中身)には影響を与えずに、メソッドの実行前後で Mdc 関連の処理を割り込ませています。
1274+
このデモでは、実行コンテキストIDの付与 (Execution Context ID = ECID) を Mdc を使って実装します。Mdcの設定・消去は CDI Intercepter (@Mdc アノテーション) を使っていますので、本来の業務ロジックの処理(=メソッドの中身)には影響を与えずに、メソッドの実行前後で Mdc 関連の処理を割り込ませています。
12491275
ECID がメソッドの実行時に存在しない場合、IDを新たに設定し、メソッド終了時に新規設定した ID を消去します。 ECID がメソッドの実行時に既に存在する場合、処理は行わずスルーします。
12501276

12511277
**/logging**
@@ -1270,15 +1296,15 @@ java.util.logging.SimpleFormatter.format=!thread! ECID\{%X{ECID}\} %5$s%6$s%n
12701296
2つのエンドポイントに GET してみます。
12711297

12721298
```
1273-
curl http://localhost:8080/logging
1299+
curl http://localhost:8080/logging # MdcResource#nomdc()
12741300
// ログ出力
12751301
Thread[helidon-1,5,server] ECID{} Invoking Sub#get()
12761302
Thread[helidon-1,5,server] ECID{a7171880-0cb9-40f6-8178-d1d385e85e4a} Sub#get() called
12771303
Thread[sub-1,5,helidon-thread-pool-7] ECID{a7171880-0cb9-40f6-8178-d1d385e85e4a} Thread started
12781304
Thread[helidon-1,5,server] ECID{a7171880-0cb9-40f6-8178-d1d385e85e4a} Thread ended
12791305
Thread[helidon-1,5,server] ECID{} Ended Sub#get()
12801306

1281-
curl http://localhost:8080/logging/mdc
1307+
curl http://localhost:8080/logging/mdc # @Mdc MdcResource#mdc()
12821308
// ログ出力
12831309
Thread[helidon-2,5,server] ECID{c52dc4d6-deb1-4de7-91b0-39b57fd12e7a} Invoking Sub#get()
12841310
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;
13941420
[目次に戻る](#目次)
13951421
<br>
13961422
1397-
## (おまけ)Cowsay (oracle.demo.cowweb パッケージ)
1423+
## § (おまけ)Cowsay (oracle.demo.cowweb パッケージ)
13981424
13991425
https://github.com/ricksbrown/cowsay
14001426

0 commit comments

Comments
 (0)