@@ -853,7 +853,7 @@ javax:
853
853
DEMO_DATASOURCE : OracleDataSource # default: H2DataSource
854
854
` ` `
855
855
856
- ### テスト用の Oracle Database インスタンスの作成するには ?
856
+ ### テスト用の Oracle Database インスタンスを作成するには ?
857
857
858
858
デモ用に設定済みの Oracle Database インスタンスを Docker コンテナで実行するためのスクリプトを用意しています。
859
859
@@ -1298,19 +1298,19 @@ java.util.logging.SimpleFormatter.format=!thread! ECID\{%X{ECID}\} %5$s%6$s%n
1298
1298
```
1299
1299
curl http: // localhost:8080/logging # MdcResource#nomdc()
1300
1300
// ログ出力
1301
- Thread [helidon- 1 ,5 ,server] ECID {} Invoking Sub #get()
1302
- Thread [helidon- 1 ,5 ,server] ECID {a7171880 - 0cb9 - 40f6 - 8178 - d1d385e85e4a} Sub #get() called
1303
- Thread [sub- 1 ,5 ,helidon- thread- pool- 7 ] ECID {a7171880 - 0cb9 - 40f6 - 8178 - d1d385e85e4a} Thread started
1304
- Thread [helidon- 1 ,5 ,server] ECID {a7171880 - 0cb9 - 40f6 - 8178 - d1d385e85e4a} Thread ended
1305
- Thread [helidon- 1 ,5 ,server] ECID {} Ended Sub #get()
1301
+ MdcResource Thread [helidon- 1 ,5 ,server]{} : Invoking Sub #get()
1302
+ Sub Thread [helidon- 1 ,5 ,server]{4cfbec87bab0829c} : Sub #get() called
1303
+ Sub Thread [sub- 1 ,5 ,helidon- thread- pool- 7 ]{4cfbec87bab0829c} : Thread started
1304
+ Sub Thread [helidon- 1 ,5 ,server]{4cfbec87bab0829c} : Thread ended
1305
+ MdcResource Thread [helidon- 1 ,5 ,server]{} : Ended Sub #get()
1306
1306
1307
1307
curl http: // localhost:8080/logging/mdc # @Mdc MdcResource#mdc()
1308
1308
// ログ出力
1309
- Thread [helidon- 2 ,5 ,server] ECID {c52dc4d6 - deb1 - 4de7 - 91b0 - 39b57fd12e7a} Invoking Sub #get()
1310
- Thread [helidon- 2 ,5 ,server] ECID {c52dc4d6 - deb1 - 4de7 - 91b0 - 39b57fd12e7a} Sub #get() called
1311
- Thread [sub- 2 ,5 ,helidon- thread- pool- 7 ] ECID {c52dc4d6 - deb1 - 4de7 - 91b0 - 39b57fd12e7a} Thread started
1312
- Thread [helidon- 2 ,5 ,server] ECID {c52dc4d6 - deb1 - 4de7 - 91b0 - 39b57fd12e7a} Thread ended
1313
- Thread [helidon- 2 ,5 ,server] ECID {c52dc4d6 - deb1 - 4de7 - 91b0 - 39b57fd12e7a} Ended Sub #get()
1309
+ MdcResource Thread [helidon- 2 ,5 ,server]{8cd601a8d345d884} : Invoking Sub #get()
1310
+ Sub Thread [helidon- 2 ,5 ,server]{8cd601a8d345d884} : Sub #get() called
1311
+ Sub Thread [sub- 2 ,5 ,helidon- thread- pool- 7 ]{8cd601a8d345d884} : Thread started
1312
+ Sub Thread [helidon- 2 ,5 ,server]{8cd601a8d345d884} : Thread ended
1313
+ MdcResource Thread [helidon- 2 ,5 ,server]{8cd601a8d345d884} : Ended Sub #get()
1314
1314
```
1315
1315
1316
1316
@Mdc を付与していないメソッドでは ECID が発行されていないのがわかります。またスレッドを超えて ECID が伝播されているのも確認できます。これは Helidon の提供する ThreadPoolSupplier から作成された ExecutorService が、Helidon のランタイム内で保持しているグローバル・コンテキストをスレッド間で受け渡しするからです。
@@ -1324,28 +1324,30 @@ ExecutorService es = Contexts.wrap(Executors.newSingleThreadExecutor());
1324
1324
ECID は 並行処理される実行ログの中から、リクエスト単位のログを識別するのに役立ちます。
1325
1325
1326
1326
```
1327
+ # Fault Tolerance のデモで使った「複数リクエスト同時発射装置」で試してみる
1327
1328
java -cp ./target/helidon-demo-mp.jar oracle.demo.ft.FaultToleranceTester -e http://localhost:8080/logging/mdc 3
1328
1329
// ログ出力
1329
- Thread[helidon-3 ,5,server] ECID{307aef62-bfe4-4220-bd3f-c72af557181e} Invoking Sub#get()
1330
- Thread[helidon-3 ,5,server] ECID{307aef62-bfe4-4220-bd3f-c72af557181e} Sub#get() called
1331
- Thread[sub-8 ,5,helidon-thread-pool-7] ECID{307aef62-bfe4-4220-bd3f-c72af557181e} Thread started
1332
- Thread[helidon-2 ,5,server] ECID{c9a77067-5f93-4a28-8135-067882e084bd} Invoking Sub#get()
1333
- Thread[helidon-1 ,5,server] ECID{4ce9e757-3ca9-4e68-99ad-0330c1675dbe} Invoking Sub#get()
1334
- Thread[helidon-1 ,5,server] ECID{4ce9e757-3ca9-4e68-99ad-0330c1675dbe} Sub#get() called
1335
- Thread[sub-9 ,5,helidon-thread-pool-7] ECID{4ce9e757-3ca9-4e68-99ad-0330c1675dbe} Thread started
1336
- Thread[helidon-1 ,5,server] ECID{4ce9e757-3ca9-4e68-99ad-0330c1675dbe} Thread ended
1337
- Thread[helidon-1 ,5,server] ECID{4ce9e757-3ca9-4e68-99ad-0330c1675dbe} Ended Sub#get()
1338
- Thread[helidon-2 ,5,server] ECID{c9a77067-5f93-4a28-8135-067882e084bd} Sub#get() called
1339
- Thread[helidon-3 ,5,server] ECID{307aef62-bfe4-4220-bd3f-c72af557181e} Thread ended
1340
- Thread[sub-10 ,5,helidon-thread-pool-7] ECID{c9a77067-5f93-4a28-8135-067882e084bd} Thread started
1341
- Thread[helidon-2 ,5,server] ECID{c9a77067-5f93-4a28-8135-067882e084bd} Thread ended
1342
- Thread[helidon-2 ,5,server] ECID{c9a77067-5f93-4a28-8135-067882e084bd} Ended Sub#get()
1343
- Thread[helidon-3 ,5,server] ECID{307aef62-bfe4-4220-bd3f-c72af557181e} Ended Sub#get()```
1330
+ Thread[helidon-4 ,5,server]{699595b3c0a746ff}: Invoking Sub#get()
1331
+ Thread[helidon-4 ,5,server]{699595b3c0a746ff}: Sub#get() called
1332
+ Thread[helidon-5 ,5,server]{a00dc58b026dec6c}: Invoking Sub#get()
1333
+ Thread[sub-3 ,5,helidon-thread-pool-7]{699595b3c0a746ff}: Thread started
1334
+ Thread[helidon-5 ,5,server]{a00dc58b026dec6c}: Sub#get() called
1335
+ Thread[helidon-3 ,5,server]{2e2f6112b8ec0330}: Invoking Sub#get()
1336
+ Thread[sub-4 ,5,helidon-thread-pool-7]{a00dc58b026dec6c}: Thread started
1337
+ Thread[helidon-5 ,5,server]{a00dc58b026dec6c}: Thread ended
1338
+ Thread[helidon-5 ,5,server]{a00dc58b026dec6c}: Ended Sub#get()
1339
+ Thread[helidon-3 ,5,server]{2e2f6112b8ec0330}: Sub#get() called
1340
+ Thread[sub-5 ,5,helidon-thread-pool-7]{2e2f6112b8ec0330}: Thread started
1341
+ Thread[helidon-3 ,5,server]{2e2f6112b8ec0330}: Thread ended
1342
+ Thread[helidon-3 ,5,server]{2e2f6112b8ec0330}: Ended Sub#get()
1343
+ Thread[helidon-4 ,5,server]{699595b3c0a746ff}: Thread ended
1344
+ Thread[helidon-4 ,5,server]{699595b3c0a746ff}: Ended Sub#get()
1344
1345
```
1345
1346
1346
1347
### (応用編) ECID による Oracle Database との連携 (oracle.demo.jpa.ecid パッケージ)
1347
1348
1348
- Helidon で設定した Mdc を Oracle Database の Execution Context ID (ECID) として連携してみます。Oracle Database の JDBCドライバは ECID を受け取るための標準的な方法を提供しています。JDBC クライアントは以下のような形で 実行中のセッションに ECID を設定できます。
1349
+ Helidon で設定した Mdc を Oracle Database の Execution Context ID (ECID) として連携してみます。さらに、このデモでは ECID として Open Tracing の Trace ID が利用できる場合はそれを利用するように実装していますので、RESTの最初の入り口から Database の SQL まで end-to-end でトレーシングが可能になります。
1350
+ Oracle Database の JDBCドライバは ECID を受け取るための標準的な方法を提供しています。JDBC クライアントは以下のような形で 実行中のセッションに ECID を設定できます。
1349
1351
1350
1352
```
1351
1353
String ecid = ...
@@ -1381,25 +1383,22 @@ oracale.demo.jpa.ecid.EcidExampleResource で定義されてる二つのエン
1381
1383
$ curl "http://localhost:8080/ecid/insert?id=9002&name=Test&delay=60"
1382
1384
```
1383
1385
1384
- Helidon のログには Insert 処理の ECID {e2f7bd76-b474-41bf-abe3-4e994fdfc251 } が出力されています。
1386
+ Helidon のログには Insert 処理の ECID {a32f6112b8ec0350 } が出力されています。
1385
1387
1386
1388
```
1387
- 2021.01.24 03:42:31 INFO oracle.demo.jpa.ecid.EcidExampleResource Thread[helidon-1,5,server]{e2f7bd76-b474-41bf-abe3-4e994fdfc251 }: Insert (id = 9002, name = Test, delay=60)
1389
+ 2021.01.24 03:42:31 INFO oracle.demo.jpa.ecid.EcidExampleResource Thread[helidon-1,5,server]{a32f6112b8ec0350 }: Insert (id = 9002, name = Test, delay=60)
1388
1390
```
1389
1391
1390
1392
では、このオペレーションが完了する前に、v$session で ECID が伝達されているか確認します。
1391
1393
1392
1394
```
1393
1395
SQL> select username, ecid, sql_id
1394
1396
from v$session
1395
- where ecid = ' e2f7bd76 - b474 - 41bf - abe3 - 4e994fdfc251 ' ;
1397
+ where ecid = ' a32f6112b8ec0350 ' ;
1396
1398
1397
- USERNAME
1398
- --------------------------------------------------------------------------------
1399
- ECID SQL_ID
1400
- ---------------------------------------------------------------- -------------
1401
- DEMO
1402
- e2f7bd76-b474-41bf-abe3-4e994fdfc251 fdw79cubmrrxz
1399
+ USERNAME ECID SQL_ID
1400
+ -------- ---------------- -------------
1401
+ DEMO a32f6112b8ec0350 fdw79cubmrrxz
1403
1402
```
1404
1403
1405
1404
実行された SQL_ID も分かりますので、実行に関する統計情報も確認できます。
0 commit comments