{"id":19891385,"url":"https://github.com/lightbend/kalix-demo-loanapplication-java","last_synced_at":"2025-09-18T21:32:11.675Z","repository":{"id":39180292,"uuid":"498452842","full_name":"lightbend/kalix-demo-loanapplication-java","owner":"lightbend","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-15T19:37:38.000Z","size":3436,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-11-12T18:18:04.970Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lightbend.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-05-31T18:29:14.000Z","updated_at":"2022-05-31T18:29:26.000Z","dependencies_parsed_at":"2022-09-17T13:53:21.600Z","dependency_job_id":null,"html_url":"https://github.com/lightbend/kalix-demo-loanapplication-java","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightbend%2Fkalix-demo-loanapplication-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightbend%2Fkalix-demo-loanapplication-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightbend%2Fkalix-demo-loanapplication-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lightbend%2Fkalix-demo-loanapplication-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lightbend","download_url":"https://codeload.github.com/lightbend/kalix-demo-loanapplication-java/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233525956,"owners_count":18689407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T18:18:06.794Z","updated_at":"2025-09-18T21:32:06.217Z","avatar_url":"https://github.com/lightbend.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Loan application DEMO - Java - Event Sourced\nNot supported by Lightbend in any conceivable way, not open for contributions.\n## Prerequisite\n- Java 11 or later\u003cbr\u003e\n- Apache Maven 3.6 or higher\u003cbr\u003e\n- Kalix:\n  - Register account: [Register](https://console.kalix.io/register)\n  - `kalix` tool installed: [Kalix CLI](https://docs.kalix.io/kalix/install-kalix.html)\n  - `kalix` login\n  -  project `demo` created and set for `kalix`\n- Docker 20.10.8 or higher (engine and client)\u003cbr\u003e\n- Docker Hub account (configured with Docker)\u003cbr\u003e\n  Access to the `gcr.io/kalix-public` container registry\u003cbr\u003e\n  cURL\u003cbr\u003e\n  IDE / editor\u003cbr\u003e\n\n## Generate Java project (terminal)\n\n```\nmvn archetype:generate \\\n-DarchetypeGroupId=io.kalix \\\n-DarchetypeArtifactId=kalix-maven-archetype \\\n-DarchetypeVersion=LATEST\n```\n\n```\nDefine value for property 'groupId': com.example\nDefine value for property 'artifactId': loan-application\nDefine value for property 'version' 1.0-SNAPSHOT: :\nDefine value for property 'package' com.example: : com.example.loanapp\n```\n\n## Import in IDE\n\n## Cleanup (IDE)\n\nDelete:\u003cbr\u003e\n`src/main/proto/com/example/loanapp/counter_api.proto`\u003cbr\u003e\n`src/main/proto/com/example/loanapp/domain/counter_domain.proto`\n\n## API descriptor - endpoints (IDE)\n\nNote: For code snippet insertion use command+J (MAC)\u003cbr\u003e\n\n1. Create file `loan_app_api.proto` in `src/main/proto/com/example/loanapp` folder.\u003cbr\u003e\n2. Edit `src/main/proto/com/example/loanapp/loan_app_api.proto` in IDE \u003cbr\u003e\n3. Insert header snippet: `aheader`\n4. Insert commands snippet: `acmd`\n5. Insert state snippet: `astate`\n6. Insert service snippet: `asrv`\n7. Add functions to service snippet (place cursor inside brackets `service LoanAppService { }`): `afunc`\n\n## API descriptor - domain (IDE)\n\n1. Create file `loan_app_domain.proto` in `src/main/proto/com/example/loanapp/domain` folder.\u003cbr\u003e\n2. Edit `src/main/proto/com/example/loanapp/domain/loan_app_domain.proto` in IDE \u003cbr\u003e\n3. Insert header snippet: `dheader`\n4. Insert events snippet: `devts`\n5. Insert state snippet: `dstate`\n\n## API descriptor - codegen annotations (IDE)\n\n1. Edit `src/main/proto/com/example/loanapp/loan_app_api.proto`\n2. Insert codegen annotations (place cursor under `service LoanAppService {` ): `acodegen`\n\n## Codegen\n\n1. Code generation (terminal):\n```\nmvn compile\n```\n2. Refresh project (IDE)\n3. Trigger Maven sync (IDE)\n\n\n## Business logic implementation (IDE)\n\n1. Edit `src/main/java/com/example/loanapp/domain/LoanAppEntity` class\n2. Delete class body\n3. Insert code snippet (delete everything under constructor): `eall`\n\n## Implement unit test\n1. Edit `src/test/java/com/example/loanapp/domain/LoanAppEntityTest` class\n2. Delete class body\n3. Insert code snippet: `ut`\n\n## Run unit test (terminal)\n```\nmvn test\n```\n\n## Implement integration test (IDE)\n1. Edit `src/it/java/com/example/loanapp/LoanAppEntityIntegrationTest` class\n2. Delete everything under the constructor\n3. Insert code snippet: `it`\n\n## Run integration test (terminal)\n```\nmvn -Pit verify\n```\n## Run locally\n??\n\n## Package \u0026 Deploy\n1. Edit `pom.xml` and update `my-docker-repo` in `\u003cdockerImage\u003emy-docker-repo/${project.artifactId}\u003c/dockerImage\u003e`\n2. Execute in terminal:\n```\nmvn deploy\n```\n3. Expose service:\n```\nkalix services expose loan-application\n```\n```\nService 'loan-application' was successfully exposed at: mute-fog-6388.us-east1.kalix.app\n```\nNote: `mute-fog-6388.us-east1.kalix.app` is dedicated hostname for this service and is publicly accessible on Internet\n\n## Test service in production\n1. Submit loan application\n```\ncurl -XPOST -d '{\n  \"client_id\": \"1111\",\n  \"client_monthly_income_cents\": 60000,\n  \"loan_amount_cents\": 20000,\n  \"loan_duration_months\": 12\n}' https://mute-fog-6388.us-east1.kalix.app/loanapp/123456 -H \"Content-Type: application/json\"\n```\n\n2. Get loan application:\n```\ncurl -XGET https://mute-fog-6388.us-east1.kalix.app/loanapp/123456 -H \"Content-Type: application/json\"\n```\n2. Approve:\n```\ncurl -XPUT https://mute-fog-6388.us-east1.kalix.app/loanapp/123456/approve -H \"Content-Type: application/json\"\n```\n## Eventing (optional)\n\n1. Create file `loan_app_topic.proto` in `src/main/proto/com/example/loanapp` folder.\u003cbr\u003e\n2. Edit `src/main/proto/com/example/loanapp/loan_app_topic.proto` in IDE \u003cbr\u003e\n3. Insert header snippet: `dheader`\n4. Insert events snippet: `devts`\n5. Insert service snippet: `dsrv`\n6. Insert functions snippet (place cursor inside brackets `service LoanAppToTopic { }`): `dfunc`\n\n\n8. Code generation (terminal):\n```\nmvn compile\n```\n9. Refresh project (IDE)\n10. Trigger Maven sync (IDE)\n11. Edit `src/main/java/com/example/loanapp/LoanAppToTopicAction` class\n12. Delete class body\n13. Insert code snippet: `tall`\n\n\n## Copy-paste list\n```\nmvn archetype:generate \\\n-DarchetypeGroupId=io.kalix \\\n-DarchetypeArtifactId=kalix-maven-archetype \\\n-DarchetypeVersion=LATEST\n```\n```\ncom.example\n```\n```\nloan-application\n```\n```\ncom.example.loanapp\n```\n```\nloan_app_api.proto\n```\n```\nloan_app_domain.proto\n```\n```\nmvn compile\n```\n```\nmvn test\n```\n```\nmvn -Pit verify\n```\n```\nmvn deploy\n```\n```\ncurl -XPOST -d '{\n  \"client_id\": \"1111\",\n  \"client_monthly_income_cents\": 60000,\n  \"loan_amount_cents\": 20000,\n  \"loan_duration_months\": 12\n}' https://mute-fog-6388.us-east1.kalix.app/loanapp/1 -H \"Content-Type: application/json\"\n```\n```\ncurl -XGET https://mute-fog-6388.us-east1.kalix.app/loanapp/1 -H \"Content-Type: application/json\"\n```\n```\ncurl -XPUT https://mute-fog-6388.us-east1.kalix.app/loanapp/1/approve -H \"Content-Type: application/json\"\n```\n```\nloan_app_topic.proto\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightbend%2Fkalix-demo-loanapplication-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flightbend%2Fkalix-demo-loanapplication-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flightbend%2Fkalix-demo-loanapplication-java/lists"}