{"ref":"artifact:sap-samples-cloud-cap-samples-java","page":"/artifacts/sap-samples-cloud-cap-samples-java","json":"/artifacts/sap-samples-cloud-cap-samples-java.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"sap-samples-cloud-cap-samples-java","name":"SAP-samples/cloud-cap-samples-java","artifact_type":"sample","ecosystem":"cap","flavors":[{"key":"java","source":{"url":"https://github.com/SAP-samples/cloud-cap-samples-java","title":"SAP-samples/cloud-cap-samples-java — README","checked":"2026-09-13","quote":"This sample application requires a Java 21 compatible JDK."}}],"use_as":"reference","domain":"learning-and-reference","origin_ring":"sap-official","description":{"one_line":"The bookshop web application that demonstrates the CAP Java SDK end to end, from CDS domain models and OData V4 to a generated Fiori UI, multitenancy and deployment to Cloud Foundry and Kyma.","short":"Bookshop app demonstrating the CAP Java SDK end to end","what_it_solves":"Building a CAP Java application touches dozens of framework features, and this collects them into one runnable bookshop: CDS entity definitions persisted to H2 locally or SAP HANA in the cloud, an OData V4 protocol adapter, and SAP Fiori elements templates driven by Fiori annotations. It demonstrates multitenancy with an MTX sidecar, feature toggles gated by the `expert` and `premium-customer` roles, custom event handlers such as the `addToOrder` action, and consumption of a remote `API_BUSINESS_PARTNER` service with mocked, sandbox and destination profiles. Deployment is covered for both Cloud Foundry, via MTA, and Kyma, via a Helm chart, in single- and multi-tenant form. The deprecated classic MTX setup is kept on a separate `mtx-classic` branch for reference rather than folded into the main one."},"links":{"repo":"https://github.com/SAP-samples/cloud-cap-samples-java"},"type_properties":{"form":{"value":"reference-application","sources":[{"url":"https://github.com/SAP-samples/cloud-cap-samples-java","title":"SAP-samples/cloud-cap-samples-java — README","checked":"2026-10-18","quote":"providing a book shop web application as an example."}]}},"identity":{"license":"Apache-2.0"},"maintainers":["actor:sap-samples"],"source_available":true,"demonstrates":["capability:reference-apps"],"drafted_with_ai":true,"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-09-13"},"contributors":["actor:agoerler","actor:ajinkyapatil8190","actor:akatuoro","actor:andre68723","actor:andreasschoesser","actor:beckermarc","actor:braunmatthias","actor:btbernard","actor:bugwelle","actor:chgeo","actor:davidhunglam","actor:dimamost","actor:etimr","actor:eugene-andreev","actor:iwonahahn","actor:j-denner","actor:lisajulia","actor:lotharbender","actor:maginseb","actor:marcelmerkle","actor:martina-gehwolf","actor:mattschur","actor:mofterdinger","actor:niemda","actor:renejeglinsky","actor:rjayasinghe","actor:sidakphull","actor:stefanhenke","actor:swaldmann","actor:t-bonk","actor:uwe-klinger","actor:vmikhailenko"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"good","evidence":"34 contributors, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"no release dates"},{"label":"Maintainer's CI","tier":"good","evidence":"Java CI with Maven green, 2026-10-22"}],"practice":[{"label":"Tests","tier":"good","evidence":"13 test files"},{"label":"Docs","tier":"good","evidence":"README 30 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":180,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","npm":"not published under this name","stars":180,"forks":172,"open_issues":6,"archived":false,"pushed_at":"2026-10-23","license_spdx":"Apache-2.0","org_owned":true,"default_branch":"main","created_at":"2020-04-30T18:18:01Z","open_prs":6,"tree_truncated":false,"test_files":13,"workflows":1,"other_ci":false,"readme_bytes":30856,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2019-03-06","last_commit":"2026-10-22","commits":530,"contributors":34,"ci_status":"success","ci_run_at":"2026-10-22","ci_workflow":"Java CI with Maven","ci_event":"push","readme_path":"README.md","readme_sha":"3ff8f8b94d15dcb078c5e03c9314365ecd92fbc7","repo_read":"2026-10-26"},"edges":{"maintainers":[{"ref":"actor:sap-samples","name":"SAP Samples","json":"/actors/sap-samples.json"}],"contributors":[{"ref":"actor:agoerler","name":"Adrian Görler","json":"/actors/agoerler.json"},{"ref":"actor:ajinkyapatil8190","name":"Ajinkya Patil","json":"/actors/ajinkyapatil8190.json"},{"ref":"actor:andre68723","name":"Andre","json":"/actors/andre68723.json"},{"ref":"actor:bugwelle","name":"Andre Meyering","json":"/actors/bugwelle.json"},{"ref":"actor:andreasschoesser","name":"Andreas Schoesser","json":"/actors/andreasschoesser.json"},{"ref":"actor:braunmatthias","name":"BraunMatthias","json":"/actors/braunmatthias.json"},{"ref":"actor:btbernard","name":"Brian Bernard","json":"/actors/btbernard.json"},{"ref":"actor:chgeo","name":"Christian Georgi","json":"/actors/chgeo.json"},{"ref":"actor:davidhunglam","name":"David H Lam","json":"/actors/davidhunglam.json"},{"ref":"actor:dimamost","name":"Dietrich Mostowoj","json":"/actors/dimamost.json"},{"ref":"actor:eugene-andreev","name":"Evgeny Andreev","json":"/actors/eugene-andreev.json"},{"ref":"actor:iwonahahn","name":"Iwona Hahn","json":"/actors/iwonahahn.json"},{"ref":"actor:j-denner","name":"j-denner","json":"/actors/j-denner.json"},{"ref":"actor:akatuoro","name":"Johannes Vogt","json":"/actors/akatuoro.json"},{"ref":"actor:lisajulia","name":"Lisa Julia Nebel","json":"/actors/lisajulia.json"},{"ref":"actor:lotharbender","name":"Lothar Bender","json":"/actors/lotharbender.json"},{"ref":"actor:beckermarc","name":"Marc Becker","json":"/actors/beckermarc.json"},{"ref":"actor:marcelmerkle","name":"Marcel Merkle","json":"/actors/marcelmerkle.json"},{"ref":"actor:mofterdinger","name":"Markus Ofterdinger","json":"/actors/mofterdinger.json"},{"ref":"actor:martina-gehwolf","name":"Martina Gehwolf","json":"/actors/martina-gehwolf.json"},{"ref":"actor:mattschur","name":"Matthias Schur","json":"/actors/mattschur.json"},{"ref":"actor:niemda","name":"niemda","json":"/actors/niemda.json"},{"ref":"actor:etimr","name":"Olena","json":"/actors/etimr.json"},{"ref":"actor:renejeglinsky","name":"René Jeglinsky","json":"/actors/renejeglinsky.json"},{"ref":"actor:rjayasinghe","name":"Robin","json":"/actors/rjayasinghe.json"},{"ref":"actor:maginseb","name":"Sebastian Magin","json":"/actors/maginseb.json"},{"ref":"actor:sidakphull","name":"sidakphull","json":"/actors/sidakphull.json"},{"ref":"actor:stefanhenke","name":"Stefan Henke","json":"/actors/stefanhenke.json"},{"ref":"actor:swaldmann","name":"Steffen Waldmann","json":"/actors/swaldmann.json"},{"ref":"actor:t-bonk","name":"Thomas Bonk","json":"/actors/t-bonk.json"},{"ref":"actor:uwe-klinger","name":"Uwe Klinger","json":"/actors/uwe-klinger.json"},{"ref":"actor:vmikhailenko","name":"Vladimir","json":"/actors/vmikhailenko.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}