https://github.com/lightbend/kalix-demo-digitaltwin-java
https://github.com/lightbend/kalix-demo-digitaltwin-java
Last synced: 10 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/lightbend/kalix-demo-digitaltwin-java
- Owner: lightbend
- Created: 2022-05-31T18:26:40.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-05-15T19:30:38.000Z (about 2 years ago)
- Last Synced: 2024-11-12T18:18:03.144Z (over 1 year ago)
- Language: Java
- Size: 3.29 MB
- Stars: 0
- Watchers: 7
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# IoT Digital Twin DEMO - Java - Event Sourced
Not supported by Lightbend in any conceivable way, not open for contributions.
## Prerequisite
- Java 11 or later
- Apache Maven 3.6 or higher
- Kalix:
- Register account: [Register](https://console.kalix.io/register)
- `kalix` tool installed: [Kalix CLI](https://docs.kalix.io/kalix/install-kalix.html)
- `kalix` login
- project `demo` created and set for `kalix`
- Docker 20.10.8 or higher (engine and client)
- Docker Hub account (configured with Docker)
Access to the `gcr.io/kalix-public` container registry
cURL
IDE / editor
## Generate Java project (terminal)
```
mvn archetype:generate \
-DarchetypeGroupId=io.kalix \
-DarchetypeArtifactId=kalix-maven-archetype \
-DarchetypeVersion=LATEST
```
```
Define value for property 'groupId': com.example
Define value for property 'artifactId': digitaltwin
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.example: : com.example.digitaltwin
```
## Import in IDE
## Cleanup (IDE)
Delete:
`src/main/proto/com/example/shoppingcart/counter_api.proto`
`src/main/proto/com/example/shoppingcart/domain/counter_domain.proto`
## API descriptor - endpoints (IDE)
Note: For code snippet insertion use command+J (MAC)
1. Create file `digitaltwin_api.proto` in `src/main/proto/com/example/digitaltwin` folder.
2. Edit `src/main/proto/com/example/digitaltwin/digitaltwin_api.proto` in IDE
3. Insert header snippet: `aheader`
4. Insert commands snippet: `acmd`
5. Insert state snippet: `astate`
6. Insert service snippet: `asrv`
7. Add functions to service snippet (place cursor inside brackets `service DigitalTwinService { }`): `afunc`
## API descriptor - domain (IDE)
1. Create file `digitaltwin_domain.proto` in `src/main/proto/com/example/digitaltwin/domain` folder.
2. Edit `src/main/proto/com/example/digitaltwin/domain/digitaltwin_domain.proto` in IDE
3. Insert header snippet: `dheader`
4. Insert events snippet: `devts`
5. Insert state snippet: `dstate`
## API descriptor - codegen annotations (IDE)
1. Edit `src/main/proto/com/example/digitaltwin/digitaltwin_api.proto`
2. Insert codegen annotations (place cursor under `service DigitalTwinService {` ): `acodegen`
## Codegen
1. Code generation (terminal):
```
mvn compile
```
2. Refresh project (IDE)
3. Trigger Maven sync (IDE)
## Business logic implementation (IDE)
1. Edit `src/main/java/com/example/digitaltwin/domain/DigitalTwin` class
2. Delete class body
3. Insert code snippet (delete everything under constructor): `eall`
## Implement unit test
1. Edit `src/test/java/com/example/digitaltwin/domain/DigitalTwinTest` class
2. Delete class body
3. Insert code snippet (delete everything under constructor): `ut`
## Run unit test (terminal)
```
mvn test
```
## Implement integration test (IDE)
1. Edit `src/it/java/com/example/digitaltwin/DigitalTwinIntegrationTest` class
2. Delete everything under the constructor
3. Insert code snippet (delete everything under constructor): `it`
## Run integration test (terminal)
```
mvn -Pit verify
```
## Run locally
??
## Package & deploy
1. Edit `pom.xml` and update `my-docker-repo` in `my-docker-repo/${project.artifactId}`
2. Execute in terminal:
```
mvn deploy
```
## Expose service
```
kalix services expose digitaltwin
```
```
Service 'digitaltwin' was successfully exposed at: winter-bonus-0316.eu-central-1.kalix.app
```
Note: HOSTNAME to use for external access
## Test service in production
1. Create digital twin
```
curl -XPOST -d '{
"name": "DT1",
"metric_value_alert_threshold": "10"
}' https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1/create -H "Content-Type: application/json"
```
2. Add OK metric
```
curl -XPOST -d '{
"metric_value": "5"
}' https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1/add-metric -H "Content-Type: application/json"
```
3. Get cart
```
curl -XGET https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1 -H "Content-Type: application/json"
```
4. Add ALERT metric
```
curl -XPOST -d '{
"metric_value": "11"
}' https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1/add-metric -H "Content-Type: application/json"
```
5. Get cart
```
curl -XGET https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1 -H "Content-Type: application/json"
```
## Eventing (optional)
1. Create file `digitaltwin_topic.proto` in `src/main/proto/com/example/digitaltwin` folder.
2. Edit `src/main/proto/com/example/digitaltwin/digitaltwin_topic.proto` in IDE
3. Insert header snippet: `theader`
4. Insert events snippet: `tevts`
5. Insert service snippet: `tsrv`
8. Code generation (terminal):
```
mvn compile
```
9. Refresh project (IDE)
10. Trigger Maven sync (IDE)
11. Edit `src/main/java/com/example/digitaltwin/DigitalTwinToTopicAction` class
12. Delete class body
13. Insert code snippet (delete everything under constructor): `tall`
## Copy-paste list
```
mvn archetype:generate \
-DarchetypeGroupId=io.kalix \
-DarchetypeArtifactId=kalix-maven-archetype \
-DarchetypeVersion=LATEST
```
```
com.example
```
```
digitaltwin
```
```
com.example.digitaltwin
```
```
digitaltwin_api.proto
```
```
digitaltwin_domain.proto
```
```
mvn compile
```
```
mvn test
```
```
mvn -Pit verify
```
```
mvn deploy
```
```
curl -XPOST -d '{
"name": "DT1",
"metric_value_alert_threshold": "10"
}' https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1/create -H "Content-Type: application/json"
```
```
curl -XPOST -d '{
"metric_value": "5"
}' https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1/add-metric -H "Content-Type: application/json"
```
```
curl -XGET https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1 -H "Content-Type: application/json"
```
```
curl -XPOST -d '{
"metric_value": "11"
}' https://winter-bonus-0316.eu-central-1.kalix.app/digitaltwin/1/add-metric -H "Content-Type: application/json"
```
```
digitaltwin_topic.proto
```