{"ref":"artifact:abap2ui5-addons-lock-manager","page":"/artifacts/abap2ui5-addons-lock-manager","json":"/artifacts/abap2ui5-addons-lock-manager.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"abap2ui5-addons-lock-manager","name":"lock-manager","artifact_type":"package","ecosystem":"abap","flavors":[{"key":"standard-abap","source":{"url":"https://github.com/abap2ui5-addons/lock-manager","title":"abap2UI5-addons/lock-manager — README","checked":"2026-10-17","quote":"Standard ABAP 7.54 or higher"}}],"domain":"data-and-persistence","origin_ring":"community-org","use_as":"dependency","description":{"one_line":"Holds an SAP lock across the HTTP roundtrips of a stateless [abap2UI5](artifact:abap2ui5-abap2ui5) app, by making a background job the owner of the kernel lock and a database registry the record of who holds it.","short":"Holds SAP locks across stateless abap2UI5 roundtrips","what_it_solves":"An abap2UI5 app gets a fresh session for every HTTP roundtrip, and an SAP lock ends with the session that took it, so a lock taken when a user opens an order for change is gone before the screen appears. The addon writes each request into a registry table and raises the background event `LOCK_HANDLER`; a background report then calls the generated `ENQUEUE_*` module in its own session with `_SCOPE = 1` and keeps the lock, so SAP GUI and any other lock-aware program is kept out as before. One API call, `z2ui5_cl_lock_manager=>request`, takes a lock in any of the kernel's three modes (`E` exclusive, `S` shared, `O` optimistic) and promotes an optimistic lock to an exclusive one at save time, and the registry decides between web users and answers `Locked by <USER>` with the real web user rather than the technical background user. It installs with [abapGit](artifact:abapgit-abapgit) into a Z-package on Standard ABAP 7.54 or higher, once the job on the `LOCK_HANDLER` event is scheduled, and ships a sample app against `VBAK / ENQUEUE_EVVBAKE` and an SM12-style admin app.","when_not_to_use":"Where the release and programming model offer durable locks, as RAP draft handling does, the README states that those solve the problem at the kernel level and the lock manager is for where that is not an option. A running handler occupies one background work process for as long as any lock is held, and only generated `ENQUEUE_*` modules can be locked.","to_build_on_it":"The public API is `z2ui5_cl_lock_manager` with `request`, `run_handler`, `process_pending_requests`, `recover_locks`, `auto_release_locks`, `read_sm12_locks` and `read_lock_requests`, over the registry tables `z2ui5_t_05` and `z2ui5_t_06`. `npm run check` runs what CI runs: [abaplint](artifact:abaplint-abaplint) against Standard ABAP 7.54 and the abap2UI5 linter."},"links":{"repo":"https://github.com/abap2UI5-addons/lock-manager"},"type_properties":{"distribution":{"value":["abapgit"],"sources":[{"url":"https://github.com/abap2ui5-addons/lock-manager","title":"abap2UI5-addons/lock-manager — README","checked":"2026-10-17","quote":"addons and apps for [abap2UI5](https://github.com/abap2UI5/abap2UI5), installed with [abapGit](https://abapgit.org)."}]}},"maintainers":["actor:abap2ui5-addons"],"provides":[{"capability":"capability:concurrency-control","what_it_does":"Keeps an SAP lock alive beyond the request that took it: a background handler holds the kernel lock and a persistent registry records which web user holds what, in exclusive, shared or optimistic mode, with promotion of an optimistic lock to an exclusive one at save time and `Optimistic lock lost: Changed by <USER> first` for whoever lost the race.","sources":[{"url":"https://github.com/abap2ui5-addons/lock-manager","title":"abap2UI5-addons/lock-manager — README","checked":"2026-10-17","quote":"This addon decouples lock ownership from the web session: a **background handler** takes and holds the kernel locks on behalf of the web users, and a **persistent registry** records who actually holds what. On top of the classic exclusive lock it supports **shared** and **optimistic** locks, including the promotion of an optimistic lock to an exclusive one at save time."}]}],"requires":[{"ref":"artifact:abap2ui5-abap2ui5","for":"The framework it is an addon to: the AGENTS.md file lists it as the dependency and the README lists it under the installation requirements.","requirement":"required","basis":"binding","role":"framework","sources":[{"url":"https://raw.githubusercontent.com/abap2UI5-addons/lock-manager/main/AGENTS.md","title":"abap2UI5-addons/lock-manager — AGENTS.md","checked":"2026-10-17","quote":"- [abap2UI5](https://github.com/abap2UI5/abap2UI5) — the framework"},{"url":"https://github.com/abap2ui5-addons/lock-manager","title":"abap2UI5-addons/lock-manager — README","checked":"2026-10-17","quote":"A reusable, event-driven lock manager for [abap2UI5](https://github.com/abap2UI5/abap2UI5) apps — and any stateless ABAP web app."}]},{"ref":"artifact:abapgit-abapgit","for":"How the repository is pulled into the system; the installation steps name it for the framework and for this repository.","requirement":"required","basis":"binding","role":"installation","sources":[{"url":"https://github.com/abap2ui5-addons/lock-manager","title":"abap2UI5-addons/lock-manager — README","checked":"2026-10-17","quote":"addons and apps for [abap2UI5](https://github.com/abap2UI5/abap2UI5), installed with [abapGit](https://abapgit.org)."}]}],"provenance":{"discovered_via":[{"source":"source:github"}],"first_seen":"2026-10-17"},"drafted_with_ai":true,"contributors":["actor:oblomov-dev"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"poor","evidence":"74 months since release"},{"label":"Continuity","tier":"fair","evidence":"2 contributors, 1 publisher, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"SAP_BASIS 754 and up, in its abaplint config: not 750 (SAP Business Suite 7 on SAP NetWeaver 7.50, maintained to 2027-12)"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"good","evidence":"abap-standard green, 2026-10-12"}],"practice":[{"label":"Tests","tier":"poor","evidence":"none found in the tree"},{"label":"Docs","tier":"good","evidence":"README 26 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":1,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","latest_version":"0.0.0","majors":{"0.0":{"version":"0.0.0","date":"2020-08-31"}},"license":"MIT","first_release":"2020-08-31","last_release":"2020-08-31","releases":1,"cadence_days":null,"maintainers":1,"repository":"git+https://github.com/unadlib/lock-manager.git","repository_directory":null,"peer_cds":null,"dependencies":0,"node_engine":null,"test_script":false,"types":false,"downloads_weekly":1,"downloads_monthly":3,"stars":0,"forks":0,"open_issues":2,"archived":false,"pushed_at":"2026-10-22","license_spdx":"MIT","org_owned":true,"default_branch":"main","created_at":"2026-05-18T19:44:09Z","open_prs":2,"tree_truncated":false,"test_files":0,"workflows":2,"other_ci":false,"readme_bytes":27119,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2026-05-18","last_commit":"2026-10-12","commits":47,"contributors":2,"ci_status":"success","ci_run_at":"2026-10-12","ci_workflow":"abap-standard","ci_event":"push","readme_path":"README.md","readme_sha":"faa7268fa9d74b01efec76d40604da18b99181af","months_since_release":74,"dormant":true,"repo_read":"2026-10-24","abap_syntax":{"repo":"abap2UI5-addons/lock-manager","file":"abaplint.jsonc","url":"https://github.com/abap2UI5-addons/lock-manager/blob/HEAD/abaplint.jsonc","version":"v754","floor":"754","checked":"2026-10-26"}},"release_notes":{"license":"MIT","quotable":true,"versions":[{"version":"0.0.0","date":"2020-08-31"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:abap2ui5-addons","name":"abap2UI5-addons","json":"/actors/abap2ui5-addons.json"}],"contributors":[{"ref":"actor:oblomov-dev","name":"oblomov-dev","json":"/actors/oblomov-dev.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[{"ref":"artifact:abap2ui5-addons-admin-cockpit","name":"admin-cockpit","json":"/artifacts/abap2ui5-addons-admin-cockpit.json","requirement":"conditional","role":"live-monitor-display","condition":"abap2UI5-addons/lock-manager is installed"}],"available_via":[],"parts":[],"add_on_to":{"ref":"artifact:abap2ui5-abap2ui5","name":"abap2UI5","json":"/artifacts/abap2ui5-abap2ui5.json"},"add_ons":[],"answered_through_parts":[]}}