Skip to content

Commit 22d2cd8

Browse files
committed
Squashed commit of the following:
commit 3cc5d5599f2857aab0ba1b2a4d0fc063602be74d Author: tkote <7146253+tkote@users.noreply.github.com> Date: Mon Apr 12 11:45:41 2021 +0900 updaed to 2.2.2 commit 4943dd93347ca66eadfafc21c1eea6bc30a18e4b Author: tkote <7146253+tkote@users.noreply.github.com> Date: Mon Apr 12 11:16:05 2021 +0900 updated commit eded83dfda338a2354c95bc43c874931533e33c4 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Fri Feb 26 18:00:29 2021 +0900 updated grpc lib version commit ff4c90a54e30565e9ebc713b1ebe987633ae7a0d Author: tkote <7146253+tkote@users.noreply.github.com> Date: Fri Feb 26 17:59:50 2021 +0900 typo commit 9873aefa10be66abd2f00fd0b7f3956f844b2405 Author: tkote <7146253+tkote@users.noreply.github.com> Date: Thu Feb 25 17:40:24 2021 +0900 change helidon ver to 2.2.1
1 parent 46ccfba commit 22d2cd8

File tree

6 files changed

+73
-74
lines changed

6 files changed

+73
-74
lines changed

.gitignore

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
/.settings/
2-
/.classpath
3-
/.project
4-
/.metadata
5-
/.vscode
6-
/.factorypath
1+
.settings
2+
.classpath
3+
.project
4+
.metadata
5+
.vscode
6+
.dockerignore
7+
.factorypath
78

89
/m2repo
910

10-
.dockerignore
1111
/.gradle/
1212
/gradle.properties
1313
/gradle-app.setting

README.md

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -853,7 +853,7 @@ javax:
853853
DEMO_DATASOURCE: OracleDataSource # default: H2DataSource
854854
```
855855
856-
### テスト用の Oracle Database インスタンスの作成するには
856+
### テスト用の Oracle Database インスタンスを作成するには
857857
858858
デモ用に設定済みの Oracle Database インスタンスを Docker コンテナで実行するためのスクリプトを用意しています。
859859
@@ -1298,19 +1298,19 @@ java.util.logging.SimpleFormatter.format=!thread! ECID\{%X{ECID}\} %5$s%6$s%n
12981298
```
12991299
curl http://localhost:8080/logging # MdcResource#nomdc()
13001300
// ログ出力
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()
13061306

13071307
curl http://localhost:8080/logging/mdc # @Mdc MdcResource#mdc()
13081308
// ログ出力
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()
13141314
```
13151315

13161316
@Mdc を付与していないメソッドでは ECID が発行されていないのがわかります。またスレッドを超えて ECID が伝播されているのも確認できます。これは Helidon の提供する ThreadPoolSupplier から作成された ExecutorService が、Helidon のランタイム内で保持しているグローバル・コンテキストをスレッド間で受け渡しするからです。
@@ -1324,28 +1324,30 @@ ExecutorService es = Contexts.wrap(Executors.newSingleThreadExecutor());
13241324
ECID は 並行処理される実行ログの中から、リクエスト単位のログを識別するのに役立ちます。
13251325
13261326
```
1327+
# Fault Tolerance のデモで使った「複数リクエスト同時発射装置」で試してみる
13271328
java -cp ./target/helidon-demo-mp.jar oracle.demo.ft.FaultToleranceTester -e http://localhost:8080/logging/mdc 3
13281329
// ログ出力
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()
13441345
```
13451346
13461347
### (応用編) ECID による Oracle Database との連携 (oracle.demo.jpa.ecid パッケージ)
13471348
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 を設定できます。
13491351
13501352
```
13511353
String ecid = ...
@@ -1381,25 +1383,22 @@ oracale.demo.jpa.ecid.EcidExampleResource で定義されてる二つのエン
13811383
$ curl "http://localhost:8080/ecid/insert?id=9002&name=Test&delay=60"
13821384
```
13831385
1384-
Helidon のログには Insert 処理の ECID {e2f7bd76-b474-41bf-abe3-4e994fdfc251} が出力されています。
1386+
Helidon のログには Insert 処理の ECID {a32f6112b8ec0350} が出力されています。
13851387
13861388
```
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)
13881390
```
13891391
13901392
では、このオペレーションが完了する前に、v$session で ECID が伝達されているか確認します。
13911393
13921394
```
13931395
SQL> select username, ecid, sql_id
13941396
from v$session
1395-
where ecid = 'e2f7bd76-b474-41bf-abe3-4e994fdfc251';
1397+
where ecid = 'a32f6112b8ec0350';
13961398
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
14031402
```
14041403
14051404
実行された SQL_ID も分かりますので、実行に関する統計情報も確認できます。

pom.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
<parent>
66
<groupId>io.helidon.applications</groupId>
77
<artifactId>helidon-mp</artifactId>
8-
<version>2.2.0</version>
8+
<version>2.2.2</version>
99
<relativePath />
1010
</parent>
1111

1212
<groupId>oracle.demo</groupId>
1313
<artifactId>helidon-demo-mp</artifactId>
14-
<version>2.2.0-SNAPSHOT</version>
14+
<version>2.2.2-SNAPSHOT</version>
1515
<!-- packaging>jar</packaging -->
1616
<name>${project.artifactId}</name>
1717

@@ -21,7 +21,7 @@
2121
<!-- prefix for remote repository ending with /-->
2222
<docker.repo.remote.prefix>${REMOTE_REPO_PREFIX}</docker.repo.remote.prefix>
2323
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
24-
<grpc.version>1.30.2</grpc.version>
24+
<grpc.version>1.35.0</grpc.version>
2525
</properties>
2626

2727
<profiles>
@@ -48,9 +48,9 @@
4848
<artifactId>protobuf-maven-plugin</artifactId>
4949
<version>0.6.1</version>
5050
<configuration>
51-
<protocArtifact>com.google.protobuf:protoc:3.11.0:exe:${os.detected.classifier}</protocArtifact>
51+
<protocArtifact>com.google.protobuf:protoc:3.15.2:exe:${os.detected.classifier}</protocArtifact>
5252
<pluginId>grpc-java</pluginId>
53-
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.26.0:exe:${os.detected.classifier}</pluginArtifact>
53+
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
5454
</configuration>
5555
<executions>
5656
<execution>
@@ -106,7 +106,7 @@
106106
<!-- Oracle JDBC driver from Maven Central Repository -->
107107
<dependency>
108108
<groupId>com.oracle.database.jdbc</groupId>
109-
<artifactId>ojdbc10</artifactId>
109+
<artifactId>ojdbc8</artifactId>
110110
<version>${oracle.jdbc.version}</version>
111111
</dependency>
112112

@@ -182,7 +182,7 @@
182182
<dependency>
183183
<groupId>com.h2database</groupId>
184184
<artifactId>h2</artifactId>
185-
<version>1.4.199</version>
185+
<version>1.4.200</version>
186186
<scope>runtime</scope>
187187
</dependency>
188188
</dependencies>
@@ -347,7 +347,7 @@
347347
<dependency>
348348
<groupId>com.github.ricksbrown</groupId>
349349
<artifactId>cowsay</artifactId>
350-
<version>1.0.3</version>
350+
<version>1.1.0</version>
351351
</dependency>
352352

353353
</dependencies>

src/main/java/oracle/demo/grpc/protobuf/helloworld/GreeterGrpc.java

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,14 @@
11
package oracle.demo.grpc.protobuf.helloworld;
22

33
import static io.grpc.MethodDescriptor.generateFullMethodName;
4-
import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
5-
import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
6-
import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
7-
import static io.grpc.stub.ClientCalls.asyncUnaryCall;
8-
import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
9-
import static io.grpc.stub.ClientCalls.blockingUnaryCall;
10-
import static io.grpc.stub.ClientCalls.futureUnaryCall;
11-
import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
12-
import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
13-
import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
14-
import static io.grpc.stub.ServerCalls.asyncUnaryCall;
15-
import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall;
16-
import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
174

185
/**
196
* <pre>
207
* The greeting service definition.
218
* </pre>
229
*/
2310
@javax.annotation.Generated(
24-
value = "by gRPC proto compiler (version 1.26.0)",
11+
value = "by gRPC proto compiler (version 1.35.0)",
2512
comments = "Source: helloworld.proto")
2613
public final class GreeterGrpc {
2714

@@ -119,14 +106,14 @@ public static abstract class GreeterImplBase implements io.grpc.BindableService
119106
*/
120107
public void sayHello(oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloRequest request,
121108
io.grpc.stub.StreamObserver<oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloReply> responseObserver) {
122-
asyncUnimplementedUnaryCall(getSayHelloMethod(), responseObserver);
109+
io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSayHelloMethod(), responseObserver);
123110
}
124111

125112
@java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
126113
return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
127114
.addMethod(
128115
getSayHelloMethod(),
129-
asyncUnaryCall(
116+
io.grpc.stub.ServerCalls.asyncUnaryCall(
130117
new MethodHandlers<
131118
oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloRequest,
132119
oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloReply>(
@@ -159,7 +146,7 @@ protected GreeterStub build(
159146
*/
160147
public void sayHello(oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloRequest request,
161148
io.grpc.stub.StreamObserver<oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloReply> responseObserver) {
162-
asyncUnaryCall(
149+
io.grpc.stub.ClientCalls.asyncUnaryCall(
163150
getChannel().newCall(getSayHelloMethod(), getCallOptions()), request, responseObserver);
164151
}
165152
}
@@ -187,7 +174,7 @@ protected GreeterBlockingStub build(
187174
* </pre>
188175
*/
189176
public oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloReply sayHello(oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloRequest request) {
190-
return blockingUnaryCall(
177+
return io.grpc.stub.ClientCalls.blockingUnaryCall(
191178
getChannel(), getSayHelloMethod(), getCallOptions(), request);
192179
}
193180
}
@@ -216,7 +203,7 @@ protected GreeterFutureStub build(
216203
*/
217204
public com.google.common.util.concurrent.ListenableFuture<oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloReply> sayHello(
218205
oracle.demo.grpc.protobuf.helloworld.Helloworld.HelloRequest request) {
219-
return futureUnaryCall(
206+
return io.grpc.stub.ClientCalls.futureUnaryCall(
220207
getChannel().newCall(getSayHelloMethod(), getCallOptions()), request);
221208
}
222209
}

src/main/java/oracle/demo/grpc/protobuf/helloworld/Helloworld.java

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/oracle/demo/logging/MdcInterceptor.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package oracle.demo.logging;
22

33
import java.lang.reflect.Method;
4+
import java.util.Objects;
45
import java.util.Optional;
56
import java.util.UUID;
67
import java.util.logging.Logger;
78

89
import javax.annotation.Priority;
10+
import javax.inject.Inject;
911
import javax.interceptor.AroundInvoke;
1012
import javax.interceptor.Interceptor;
1113
import javax.interceptor.InvocationContext;
1214

1315
import io.helidon.logging.common.HelidonMdc;
16+
import io.opentracing.Span;
1417

1518
/**
1619
* Set/unset Mdc value during invocation of target method
@@ -23,6 +26,10 @@ public class MdcInterceptor {
2326

2427
private final Logger logger = Logger.getLogger(MdcInterceptor.class.getName());
2528

29+
@Inject
30+
private io.opentracing.Tracer tracer;
31+
32+
2633
@AroundInvoke
2734
public Object obj(InvocationContext ic) throws Exception{
2835

@@ -36,8 +43,10 @@ public Object obj(InvocationContext ic) throws Exception{
3643
// set mdc only when the value doesn't exist
3744
String uuid = null;
3845
if(value.isEmpty()){
39-
uuid = UUID.randomUUID().toString();
40-
HelidonMdc.set(key, uuid);
46+
// get open tracing id if available
47+
final Span span = tracer.activeSpan();
48+
final String id = Objects.nonNull(span) ? span.context().toTraceId() : UUID.randomUUID().toString();
49+
HelidonMdc.set(key, id);
4150
logger.fine(String.format("Set Mdc: %s=%s", key, uuid));
4251
}
4352
try{

0 commit comments

Comments
 (0)