Skip to content

Commit

Permalink
Merge branch 'er-4.0.0' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
tkote committed Mar 1, 2024
2 parents 696523f + adf06a3 commit a51a868
Show file tree
Hide file tree
Showing 45 changed files with 351 additions and 2,189 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
.*
!.gitignore
*.jar

/m2repo

Expand Down
13 changes: 8 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# 1st stage, build the app
FROM maven:3.8.4-openjdk-17-slim as build
FROM maven:3.9.6-eclipse-temurin-21-jammy as build

WORKDIR /helidon
#RUN mkdir -p /helidon/target/classes # for weaving
Expand All @@ -13,12 +13,15 @@ RUN mvn package -Dmaven.test.skip -Declipselink.weave.skip
# Do the Maven build!
# Incremental docker builds will resume here when you change sources
ADD src src
RUN mvn -P protoc initialize
RUN mvn package -DskipTests

# RUN mvn package -DskipTests
# Switch mvn command above when you'd like to enable jaeger
RUN mvn package -P db-h2,tracing-jaeger -DskipTests

RUN echo "done!"

# 2nd stage, build the runtime image
FROM openjdk:17-jdk-slim
FROM openjdk:21-jdk-slim
WORKDIR /helidon

# Copy the binary built in the 1st stage
Expand All @@ -28,5 +31,5 @@ COPY --from=build /helidon/target/libs ./libs
CMD ["java", "-jar", "helidon-mp-demo.jar"]

EXPOSE 8080
EXPOSE 50051
#EXPOSE 50051

56 changes: 44 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
[OCHaCafe 2 - #4 Cloud Native時代のモダンJavaの世界](https://ochacafe.connpass.com/event/155389/) のために作成したデモですが、随時実装を追加しています。
[**セッション・スライドはこちら**](http://tiny.cc/ochacafe-cn-java-slides)

**※ ベースを 3.x 系にアップグレードしました。2.x系は `helidon-2.x` ブランチでメンテナンスしていきます。**
**※ ベースを 4.x 系にアップグレードしました。3.x系は `helidon-3.x` ブランチ、2.x系は `helidon-2.x` ブランチで各々メンテナンスしていきます。**

Helidon 4 は MicroProfile 6 と Jakarta EE 10 Core Profile をサポートしたため、デモの実装が従来と異なる箇所があります。

## 目次

Expand All @@ -14,7 +16,7 @@
+ [Docker イメージの作成](#-docker-イメージの作成)
+ [Health デモ](#-microprofile-health-デモ-oracledemohealth-パッケージ)
- [Kubernetes で Health Check を試してみる](#Kubernetes-で-Health-Check-を試してみる)
+ [Open Tracing デモ](#-open-tracing-デモ-oracledemotracing-パッケージ)
+ [Tracing デモ](#-tracing-デモ-oracledemotracing-パッケージ)
- [OCI Application Performance Monitoring (APM) の Tracer を使う](#OCI-Application-Performance-Monitoring-APM-の-Tracer-を使う)
+ [Metrics デモ](#-metrics-デモ-oracledemometrics-パッケージ)
+ [Fault Tolerance デモ](#-fault-tolerance-デモ-oracledemoft-パッケージ)
Expand Down Expand Up @@ -65,7 +67,7 @@ src/main
│ │ └── FaultToleranceTester.java
│ ├── graphql [GraphQL]
│ │ └── CountryGraphQLApi.java
│ ├── grpc [拡張機能 gRPC]
│ ├── grpc [拡張機能 gRPC - 4.x には無し]
│ │ └── protobuf
│ │ ├── GreeterSimpleService.java
│ │ ├── GreeterService.java
Expand All @@ -83,7 +85,7 @@ src/main
│ │ ├── CountryResource.java
│ │ ├── Greeting.java
│ │ └── JPAExampleResource.java
│ ├── logging [拡張機能 Mdc]
│ ├── logging [拡張機能 Mdc - 4.x には無し]
│ │ ├── MdcInterceptor.java
│ │ ├── Mdc.java
│ │ ├── MdcResource.java
Expand All @@ -93,8 +95,6 @@ src/main
│ │ ├── LRAMain.java
│ │ ├── LRAService1.java
│ │ └── LRAService2.java
│ ├── mapper [JAX-RSの例外マッパー]
│ │ └── CountryNotFoundExceptionMapper.java
│ ├── metrics [メトリクス]
│ │ └── MetricsResource.java
│ ├── reactive [Reactive Messaging & Connecter]
Expand Down Expand Up @@ -146,11 +146,10 @@ src/main

## § ビルド方法

Java SE 17 が必要です。
Java SE 21 が必要です。

```bash
# for the first time, generate java source files for gRPC by compiling proto file, then package
mvn clean -P protoc initialize && mvn package -DskipTests=true
mvn clean package -DskipTests=true
```

<br>
Expand Down Expand Up @@ -297,7 +296,37 @@ Events:
[目次に戻る](#目次)
<br>

## § Open Tracing デモ (oracle.demo.tracing パッケージ)
## § Tracing デモ (oracle.demo.tracing パッケージ)

**注意! 4.x と、それ以前では実装が異なります**

## 4.x の Tracing デモ

[MicroProfile Telemetry 1.0](https://download.eclipse.org/microprofile/microprofile-telemetry-1.0/tracing/microprofile-telemetry-tracing-spec-1.0.html) ベースの実装に変更されています。
この仕様は、CNCFで策定された [OpenTelemetry](https://opentelemetry.io/) をMicroProfileアプリケーションで利用可能にするためのものです。

ローカルに Jaeger サーバを立てて、トレーシングを試します。

1. Jaeger の関連ライブラリを含めてアプリケーションをビルドして起動します。
```
mvn -Pdb-h2,tracing-jaeger -DskipTests package
java -Dotel.sdk.disabled=false -Dotel.traces.exporter=jaeger -jar target/helidon-mp-demo.jar
```
2. Jaeger を Docker コンテナとして起動します。
```
demo/tracing/jaeger.sh
```
UI は http://localhost:16686/ になります。
3. トレーシングができているか確認します。
```
curl http://localhost:8080/jpa/country
```
Jaeger から `/jpa/country` というスパンとネストされた `oracle.demo.jpa.CountryDAO.getCountries` というスパンが確認されます。
## 4.x より前のバージョンの Tracing デモ
Kubernetes に デモのPodを4つと、jaegerのPodをデプロイします。
Expand Down Expand Up @@ -911,6 +940,8 @@ $ docker rm oracledb

## § gRPC デモ (oracle.demo.grpc パッケージ)

**注意! 4.x には実装がありません**

Helidon MP はアノテーションを使って簡単に gRPC サーバーを実装することができます。
gRPCの転送データのフォーマットである protobuf を用意する必要がありますが、このデモでは、ビルド時の `mvn -P protoc initialize` で必要な Java ソースファイルを生成しています。

Expand Down Expand Up @@ -1163,6 +1194,8 @@ curl -X POST -H "Content-Type: application/json" localhost:8080/graphql \

## § Mapped Diagnostic Context (Mdc) デモ (oracle.demo.logging パッケージ)

**注意! 4.x には実装がありません**

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

このデモでは、実行コンテキストIDの付与 (Execution Context ID = ECID) を Mdc を使って実装します。Mdcの設定・消去は CDI Intercepter (@Mdc アノテーション) を使っていますので、本来の業務ロジックの処理(=メソッドの中身)には影響を与えずに、メソッドの実行前後で Mdc 関連の処理を割り込ませています。
Expand Down Expand Up @@ -1616,9 +1649,8 @@ $ curl "localhost:8080/cowsay/think?message=Hello%21&cowfile=moose"

[目次に戻る](#目次)
<br>

---
_Copyright © 2019-202, Oracle and/or its affiliates. All rights reserved._




Expand Down
16 changes: 16 additions & 0 deletions demo/tracing/jaeger.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash

docker run -d --rm --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-e COLLECTOR_OTLP_ENABLED=true \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:1.51
25 changes: 25 additions & 0 deletions demo/tracing/opentelemetry-apm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

OCS_APM_ENDPOINT=
OCS_APM_KEY=
JAVA_AGENT_JAR=

export JAVA_TOOL_OPTIONS="-javaagent:$JAVA_AGENT_JAR"

export OTEL_AGENT_PRESENT=true

export OTEL_SERVICE_NAME="helidon-mp-demo"

export OTEL_TRACES_EXPORTER=otlp
export OTEL_METRICS_EXPORTER=none
export OTEL_LOGS_EXPORTER=none

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="$OCS_APM_ENDPOINT/20200101/opentelemetry/private/v1/traces"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="Authorization=dataKey $OCS_APM_KEY"

echo $OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
echo $OTEL_EXPORTER_OTLP_HEADERS

java -jar $(dirname $0)/../../target/helidon-mp-demo.jar

19 changes: 10 additions & 9 deletions demo/tracing/tracing-demo.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,23 @@ start() {
docker network create helidon-demo-nw

docker run --rm -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
--hostname jaeger \
--network helidon-demo-nw \
jaegertracing/all-in-one:1.13
jaegertracing/all-in-one:1.52

docker run --rm -d --name helidon-mp-demo-0 --hostname helidon-mp-demo-0 --network helidon-demo-nw -e tracing.service=helidon-mp-demo-0 -p 8080:8080 helidon-mp-demo
docker run --rm -d --name helidon-mp-demo-1 --hostname helidon-mp-demo-1 --network helidon-demo-nw -e tracing.service=helidon-mp-demo-1 helidon-mp-demo
docker run --rm -d --name helidon-mp-demo-2 --hostname helidon-mp-demo-2 --network helidon-demo-nw -e tracing.service=helidon-mp-demo-2 helidon-mp-demo
docker run --rm -d --name helidon-mp-demo-3 --hostname helidon-mp-demo-3 --network helidon-demo-nw -e tracing.service=helidon-mp-demo-3 helidon-mp-demo
docker run --rm -d --name helidon-mp-demo-0 --hostname helidon-mp-demo-0 --network helidon-demo-nw -e mp.config.profile=jaeger -e otel.service.name=helidon-mp-demo-0 -p 8080:8080 helidon-mp-demo
docker run --rm -d --name helidon-mp-demo-1 --hostname helidon-mp-demo-1 --network helidon-demo-nw -e mp.config.profile=jaeger -e otel.service.name=helidon-mp-demo-1 helidon-mp-demo
docker run --rm -d --name helidon-mp-demo-2 --hostname helidon-mp-demo-2 --network helidon-demo-nw -e mp.config.profile=jaeger -e otel.service.name=helidon-mp-demo-2 helidon-mp-demo
docker run --rm -d --name helidon-mp-demo-3 --hostname helidon-mp-demo-3 --network helidon-demo-nw -e mp.config.profile=jaeger -e otel.service.name=helidon-mp-demo-3 helidon-mp-demo
}

stop() {
Expand Down
11 changes: 11 additions & 0 deletions demo/tracing/tracing_test.http
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

###

GET http://{{TRACING_TEST_ENDPOINT}}/jpa/country/1

###

PUT http://{{TRACING_TEST_ENDPOINT}}/jpa/country/2
Content-Type: application/x-www-form-urlencoded

name=XXX

###

POST http://{{TRACING_TEST_ENDPOINT}}/tracing/invoke
Content-Type: application/json

Expand Down
8 changes: 1 addition & 7 deletions pom-docker.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>oracle.demo</groupId>
<artifactId>helidon-mp-demo-docker-build</artifactId>
<version>3.2.3.0</version>
<version>4.0.5.0</version>
<name>helidon-mp-demo-docker-build</name>

<properties>
Expand Down Expand Up @@ -36,10 +36,8 @@
<argument>build</argument>
<argument>-t</argument>
<argument>${docker.repo.prefix}${docker.image}:${docker.image.version}</argument>
<!--
<argument>-t</argument>
<argument>${docker.repo.prefix}${docker.image}:latest</argument>
-->
<argument>-f</argument>
<argument>${docker.file}</argument>
<argument>.</argument>
Expand All @@ -59,16 +57,12 @@
<argument>build</argument>
<argument>-t</argument>
<argument>${docker.repo.prefix}${docker.image}:${docker.image.version}</argument>
<!--
<argument>-t</argument>
<argument>${docker.repo.prefix}${docker.image}:latest</argument>
-->
<argument>-t</argument>
<argument>${docker.repo.remote.prefix}${docker.image}:${docker.image.version}</argument>
<!--
<argument>-t</argument>
<argument>${docker.repo.remote.prefix}${docker.image}:latest</argument>
-->
<argument>-f</argument>
<argument>${docker.file}</argument>
<argument>.</argument>
Expand Down
Loading

0 comments on commit a51a868

Please sign in to comment.