{"id":9265,"date":"2025-05-06T09:49:35","date_gmt":"2025-05-06T07:49:35","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/640\/?post_type=ht_kb&#038;p=9265"},"modified":"2025-05-06T10:00:11","modified_gmt":"2025-05-06T08:00:11","slug":"zarzadzanie-blokadami","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/","title":{"rendered":"Zarz\u0105dzanie blokadami"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Wymagania_wstepne\" >Wymagania wst\u0119pne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Definicje\" >Definicje<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Zadanie_blokady\" >\u017b\u0105danie blokady<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Typy_blokad\" >Typy blokad<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Typy_blokad-2\" >Typy blokad<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Typy_blokad-3\" >Typy blokad<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#ActivationGroupClassUseLock\" >ActivationGroupClassUseLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#JobClassUseLock\" >JobClassUseLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#JobClassExclusiveLock\" >JobClassExclusiveLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#JobObjectUseLock\" >JobObjectUseLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#JobObjectExclusiveLock\" >JobObjectExclusiveLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#JobLogicalLock\" >JobLogicalLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#TransactionKeyReadLock\" >TransactionKeyReadLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#TransactionKeyWriteLock\" >TransactionKeyWriteLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#TransactionInstanceReadLock\" >TransactionInstanceReadLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#TransactionInstanceWriteLock\" >TransactionInstanceWriteLock<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Zaleznosci\" >Zale\u017cno\u015bci<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Niejawne_blokady_w_Object_Manager\" >Niejawne blokady w Object Manager<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Algorytm\" >Algorytm<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Zalety\" >Zalety<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Wady\" >Wady<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Blokady_logiczne\" >Blokady logiczne<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Blokady_aplikacji\" >Blokady aplikacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Blokady_zadan\" >Blokady zada\u0144<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Serwer_klienta\" >Serwer klienta<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Komunikacja_klient-serwer\" >Komunikacja klient-serwer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Serwer_komunikatow_z_klientami\" >Serwer komunikat\u00f3w z klientami<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Wymagania_dotyczace_blokady\" >Wymagania dotycz\u0105ce blokady<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Zwalnianie_blokady\" >Zwalnianie blokady<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Synchronizacja_pamieci_podrecznej\" >Synchronizacja pami\u0119ci podr\u0119cznej<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Stany_krytyczne\" >Stany krytyczne<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/zarzadzanie-blokadami\/#Synchronizacja_wspoldzielonych_pamieci_podrecznych\" >Synchronizacja wsp\u00f3\u0142dzielonych pami\u0119ci podr\u0119cznych<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>Zarz\u0105dzanie blokadami ma nast\u0119puj\u0105ce funkcje w Comarch ERP Enterprise:<\/p>\n<ul>\n<li><strong>Dost\u0119p do danych<\/strong> &#8212; koordynacja dost\u0119pu do wsp\u00f3\u0142dzielonych danych (zasadniczo do Business Objects).<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Wymiana klas<\/strong> &#8212; wymiana klas Java w czasie wykonywania.<\/span><\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Modyfikacja schematu<\/strong> &#8212; modyfikacja schematu bazy danych w czasie wykonywania.<\/span><\/li>\n<\/ul>\n<p>W tym artykule znajduj\u0105 si\u0119 mi\u0119dzy innymi informacje jakie typy blokad s\u0105 u\u017cywane i jak zaimplementowana jest synchronizacja pami\u0119ci podr\u0119cznej.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Zarz\u0105dzanie blokadami jest skierowane do:<\/p>\n<ul>\n<li>Administrator\u00f3w systemu<\/li>\n<li><span style=\"font-size: revert; color: initial;\">Programist\u00f3w<\/span><\/li>\n<\/ul>\n<h3 id=\"wymagania-wstepne\" ><span class=\"ez-toc-section\" id=\"Wymagania_wstepne\"><\/span>Wymagania wst\u0119pne<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Wymagana jest nast\u0119puj\u0105ca wiedza:<\/p>\n<ul>\n<li>Programowanie<\/li>\n<li>Architektura Comarch ERP Enterprise<\/li>\n<\/ul>\n<h3 id=\"definicje\" ><span class=\"ez-toc-section\" id=\"Definicje\"><\/span>Definicje<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Program \u0142aduj\u0105cy klasy kodu aplikacji<\/strong> &#8212; program \u0142aduj\u0105cy klasy kodu aplikacji jest wyspecjalizowanym programem \u0142aduj\u0105cym klasy do \u0142adowania klas logiki aplikacji. Ka\u017cdy program \u0142aduj\u0105cy klasy kodu aplikacji uzyskuje dost\u0119p do sp\u00f3jnego zestawu klas Java i nale\u017cy do dok\u0142adnie jednej sesji. Programy \u0142aduj\u0105ce klasy kodu aplikacji \u0142aduj\u0105 tylko klasy logiki aplikacji. R\u00f3\u017cne sesje mog\u0105 mie\u0107 r\u00f3\u017cne programy \u0142aduj\u0105ce klasy kodu aplikacji. Instancje klas za\u0142adowanych za pomoc\u0105 r\u00f3\u017cnych program\u00f3w \u0142aduj\u0105cych klasy nie s\u0105 kompatybilne. Z tego powodu program \u0142aduj\u0105cy klasy kodu aplikacji nie \u0142aduje klas, kt\u00f3re s\u0105 u\u017cywane w r\u00f3\u017cnych sesjach, takich jak cz\u0119\u015bci i obiekty biznesowe lub klasy systemowe.<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Klienci<\/strong> &#8212; w<\/span> komunikacji klient-serwer, klient jest w tym dokumencie uto\u017csamiany z serwerem aplikacji Comarch ERP Enterprise. Serwer jest tutaj serwerem wiadomo\u015bci.<\/li>\n<li><strong>Zasoby<\/strong> &#8212; zasoby s\u0105 rozumiane jako:\n<ul>\n<li><em>Klasy Java<\/em> &#8212; a<span style=\"font-size: revert; color: initial;\">plikacje, klasy logiczne, obiekty biznesowe, cz\u0119\u015bci<\/span><\/li>\n<li><span style=\"font-size: revert; color: initial;\"><em>Instancje obiekt\u00f3w biznesowych<\/em> &#8212; w<\/span>szystkie instancje obiektu biznesowego w bazie danych, grupa instancji i pojedyncza instancja specjalna.<\/li>\n<\/ul>\n<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Wsp\u00f3\u0142dzielona pami\u0119\u0107 podr\u0119czna<\/strong> &#8212; w<\/span>sp\u00f3\u0142dzielona pami\u0119\u0107 podr\u0119czna s\u0142u\u017cy do tymczasowego przechowywania ju\u017c za\u0142adowanych instancji obiekt\u00f3w biznesowych w pami\u0119ci g\u0142\u00f3wnej w celu unikni\u0119cia dost\u0119pu do bazy danych. Jest to zatem wa\u017cny komponent, kt\u00f3ry przyczynia si\u0119 do wydajno\u015bci systemu.<br \/>\nDost\u0119p do bazy danych w trybie odczytu odbywa si\u0119 zazwyczaj za po\u015brednictwem wsp\u00f3\u0142dzielonej pami\u0119ci podr\u0119cznej. Po za\u0142adowaniu obiektu biznesowego jest on najpierw wyszukiwany w pami\u0119ci podr\u0119cznej transakcji, nast\u0119pnie we wsp\u00f3\u0142dzielonej pami\u0119ci podr\u0119cznej, a na ko\u0144cu w bazie danych.<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Blokada<\/strong> &#8212; w<\/span>\u00a0systemie z wieloma u\u017cytkownikami konieczne jest regulowanie wykorzystania wsp\u00f3\u0142dzielonych zasob\u00f3w. W tym celu wykorzystywana jest blokada. Blokada s\u0142u\u017cy do synchronizacji dost\u0119pu do ograniczonych zasob\u00f3w.<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Podklucz<\/strong> &#8212; p<\/span>odklucz jest cz\u0119\u015bci\u0105 wielocz\u0119\u015bciowego klucza g\u0142\u00f3wnego. Wielocz\u0119\u015bciowy klucz g\u0142\u00f3wny sk\u0142ada si\u0119 z poziomu zgrubnego i jednego lub wi\u0119cej poziom\u00f3w szczeg\u00f3\u0142owych. Podklucz zawsze zaczyna si\u0119 od poziomu grubszego, a nast\u0119pnie zawiera poziomy drobniejsze.<\/li>\n<\/ul>\n<h3 id=\"zadanie-blokady\" ><span class=\"ez-toc-section\" id=\"Zadanie_blokady\"><\/span>\u017b\u0105danie blokady<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Blokada jest \u017c\u0105dana dla zasobu w okre\u015blonym kontek\u015bcie. Konteksty, w kt\u00f3rych mo\u017cna \u017c\u0105da\u0107 blokady, s\u0105 nast\u0119puj\u0105ce:<\/p>\n<ul>\n<li><strong>Grupa aktywacji<\/strong> &#8212; grupa aktywacji podsumowuje grup\u0119 zada\u0144, kt\u00f3re u\u017cywaj\u0105 wsp\u00f3lnego, sp\u00f3jnego zestawu klas Java (por\u00f3wnywalnego do kompilacji\/wersji\/wydania).<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Zadanie<\/strong> &#8212; z<\/span>adanie odpowiada sesji w Comarch ERP Enterprise.<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Transakcja<\/strong> &#8212; t<\/span>ermin transakcja jest odpowiednikiem transakcji najwy\u017cszego poziomu w Comarch ERP Enterprise.<br \/>\nPodtransakcje nie s\u0105 brane pod uwag\u0119 w odniesieniu do blokowania. Istnienie blokady jest powi\u0105zane z kontekstem, w kt\u00f3rym blokada jest wymagana. R\u00f3\u017cne typy blokad s\u0105 u\u017cywane do r\u00f3\u017cnych funkcji. Podzia\u0142 na typy zale\u017cy od zasobu, kontekstu i funkcji blokady.<\/li>\n<\/ul>\n<h4 id=\"typy-blokad\" ><span class=\"ez-toc-section\" id=\"Typy_blokad\"><\/span>Typy blokad<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Blokady mo\u017cna r\u00f3wnie\u017c klasyfikowa\u0107 wed\u0142ug ich znaczenia.<\/div><\/section>\n<p>Dost\u0119pne s\u0105 nast\u0119puj\u0105ce typy blokad:<\/p>\n<ul>\n<li><strong>Blokada u\u017cycia<\/strong> (<em>Use lock<\/em>) &#8212; blokada u\u017cycia ma charakter informacyjny. Ta blokada opisuje, \u017ce zas\u00f3b jest u\u017cywany przez co najmniej jeden kontekst. Mo\u017cna za\u017c\u0105da\u0107 wi\u0119cej ni\u017c jednej blokady u\u017cycia dla zasobu.<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Blokada wy\u0142\u0105czna<\/strong> (<em>Exclusive lock<\/em>) &#8212; b<\/span>lokada wy\u0142\u0105czna mo\u017ce by\u0107 przypisana tylko do jednego kontekstu. Jest ona przypisywana tylko wtedy, gdy \u017cadna blokada u\u017cycia nie jest zarejestrowana na tym samym zasobie.<\/li>\n<\/ul>\n<p>Istniej\u0105 blokady odczytu i zapisu w kontek\u015bcie transakcji.<\/p>\n<ul>\n<li><strong>Blokada odczytu<\/strong> (<em>Read lock<\/em>) &#8212; blokada odczytu zachowuje si\u0119 jak blokada u\u017cycia. Blokady odczytu na poziomie instancji s\u0105 wymagane w Comarch ERP Enterprise tylko wtedy, gdy obiekt jest odczytywany z<em> REPEATABLE_READ<\/em>.<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Blokada zapisu<\/strong> (<em>Write lock<\/em>) &#8212; b<\/span>lokada zapisu zachowuje si\u0119 jak blokada wy\u0142\u0105czna<\/li>\n<li><span style=\"font-size: revert; color: initial;\"><strong>Blokady logiczne<\/strong> &#8212; b<\/span>lokady logiczne s\u0105 identyfikowane przez ci\u0105g znak\u00f3w. Nie blokuj\u0105 one \u017cadnych zasob\u00f3w, a jedynie maj\u0105 znaczenie dla aplikacji, kt\u00f3ra ich u\u017cywa. Blokady logiczne s\u0105 zawsze blokadami wy\u0142\u0105cznymi i musz\u0105 by\u0107 wyra\u017anie wymagane. Podobnie jak wszystkie inne blokady, blokady logiczne s\u0105 r\u00f3wnie\u017c powi\u0105zane z istnieniem kontekstu (zadania, transakcji), w kt\u00f3rym s\u0105 wymagane.<\/li>\n<\/ul>\n<h4 id=\"typy-blokad\" ><span class=\"ez-toc-section\" id=\"Typy_blokad-2\"><\/span>Typy blokad<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Nast\u0119puj\u0105ce typy blokad zosta\u0142y zdefiniowane w celu implementacji funkcjonalno\u015bci wymaganej do blokowania w Comarch ERP Enterprise:<\/p>\n<h5 id=\"typy-blokad\" ><span class=\"ez-toc-section\" id=\"Typy_blokad-3\"><\/span>Typy blokad<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<table style=\"border-collapse: collapse; width: 100%; height: 253px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; text-align: center; height: 23px; border-style: outset;\"><strong>Nazwa<\/strong><\/td>\n<td style=\"width: 25%; text-align: center; height: 23px; border-style: outset;\"><strong>Kontekst<\/strong><\/td>\n<td style=\"width: 25%; text-align: center; height: 23px; border-style: outset;\"><strong>Zas\u00f3b<\/strong><\/td>\n<td style=\"width: 25%; text-align: center; height: 23px; border-style: outset;\"><strong>Typ\u00a0<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">ActivationGroupClassUseLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Activation Group<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Zastosowanie klasy Java<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada u\u017cycia<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">JobClassUseLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Job<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Klasa Java Persistence<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada u\u017cycia<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">JobClassExclusiveLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Job<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Klasa Java Persistence<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada wy\u0142\u0105czna<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">JobObjectUseLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Job\/Transaction<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Wszystkie instancje w jednej bazie danych<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada u\u017cycia<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">JobObjectExclusiveLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Job\/Explizit<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Wszystkie instancje w jednej bazie danych<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada wy\u0142\u0105czna<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">JobLogicalLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Job\/Explizit<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Ci\u0105g znak\u00f3w<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada wy\u0142\u0105czna<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">TransactionKeyReadLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Transaction<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Grupa instancji BusinessObject<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada odczytu<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">TransactionKeyWriteLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Transaction<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Grupa instancji BusinessObject<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada zapisu<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">TransactionInstanceReadLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Transaction<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Instancja BusinessObject<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada odczytu<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\">TransactionInstanceWriteLock<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Transaction<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Instancja BusinessObject<\/td>\n<td style=\"width: 25%; height: 23px; border-style: outset;\">Blokada zapisu<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 25%; border-style: outset;\">TransactionLogicalLock<\/td>\n<td style=\"width: 25%; border-style: outset;\">Transaction\/<br \/>\nExplizit<\/td>\n<td style=\"width: 25%; border-style: outset;\">Ci\u0105g znak\u00f3w<\/td>\n<td style=\"width: 25%; border-style: outset;\">Blokada wy\u0142\u0105czna<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5 id=\"activationgroupclassuselock\" ><span class=\"ez-toc-section\" id=\"ActivationGroupClassUseLock\"><\/span>ActivationGroupClassUseLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Program \u0142aduj\u0105cy klasy kodu aplikacji tworzy klas\u0119 Java z blokad\u0105 tego typu dla ka\u017cdej aplikacji. Klasy Java dla obiekt\u00f3w biznesowych, cz\u0119\u015bci i widok\u00f3w nie s\u0105 obs\u0142ugiwane przez ten typ blokady, ale przez typ blokady <em>JobClassUseLock<\/em>. Wszystkie zadania uruchomione z tym samym programem \u0142aduj\u0105cym klasy s\u0105 dost\u0119pne w tej samej grupie aktywacji. Program \u0142aduj\u0105cy klasy \u0142aduje sp\u00f3jny zestaw klas Java, kt\u00f3re nale\u017c\u0105 do tej samej wersji. Grupa aktywacji jest usuwana, gdy nie jest ju\u017c przypisana do zadania. Blokady typu <em>ActivationGroupClassUseLock<\/em> znajduj\u0105 si\u0119 w grupie aktywacji i s\u0105 zwalniane po usuni\u0119ciu grupy aktywacji.<\/p>\n<h5 id=\"jobclassuselock\" ><span class=\"ez-toc-section\" id=\"JobClassUseLock\"><\/span>JobClassUseLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>U\u017cycie klas Java dla obiekt\u00f3w biznesowych, cz\u0119\u015bci i widok\u00f3w w zadaniu jest rejestrowane przez <em>Object Manager<\/em> i zarz\u0105dzane za pomoc\u0105 blokady typu <em>JobClassUseLock<\/em>. Blokada jest definiowana w kontek\u015bcie zadania. Jest ona zwalniana po zako\u0144czeniu zadania.<\/p>\n<h5 id=\"jobclassexclusivelock\" ><span class=\"ez-toc-section\" id=\"JobClassExclusiveLock\"><\/span>JobClassExclusiveLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Narz\u0119dzia systemowe tworz\u0105 nowe klasy Java dla obiekt\u00f3w biznesowych, cz\u0119\u015bci lub widok\u00f3w. Aby klasy mog\u0142y zosta\u0107 zast\u0105pione now\u0105 wersj\u0105, jest ona najpierw blokowana przez inne zadania. W tym celu u\u017cywany jest typ blokady <em>JobClassExclusiveLock<\/em>. Ten typ blokady jest zwalniany po zako\u0144czeniu zadania. Ten typ blokady mo\u017ce by\u0107 wymagany tylko wtedy, gdy nie ma innej blokady typu <em>JobClassLock<\/em> dla danej klasy.<\/p>\n<h5 id=\"jobobjectuselock\" ><span class=\"ez-toc-section\" id=\"JobObjectUseLock\"><\/span>JobObjectUseLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli \u017c\u0105dana jest blokada transakcji, tj. je\u015bli jedna lub wi\u0119cej instancji obiektu biznesowego jest u\u017cywanych w transakcji, w\u00f3wczas blokada typu <em>JobObjectUseLock<\/em> jest ustawiana dla instancji obiektu biznesowego w bazie danych. Blokada tego typu jest zwalniana dopiero po zwolnieniu wszystkich blokad transakcji, kt\u00f3re za\u017c\u0105da\u0142y takiej blokady.<\/p>\n<h5 id=\"jobobjectexclusivelock\" ><span class=\"ez-toc-section\" id=\"JobObjectExclusiveLock\"><\/span>JobObjectExclusiveLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Blokada typu <em>JobObjectExclusiveLock<\/em> jest wyra\u017anie wymagana przez zadanie, kt\u00f3re resetuje wszystkie instancje obiektu biznesowego w bazie danych, np. w celu bezpo\u015bredniej manipulacji tabel\u0105 za pomoc\u0105 instrukcji bazy danych. Blokada tego typu musi by\u0107 wyra\u017anie zwolniona przez zadanie. Mo\u017cna jej za\u017c\u0105da\u0107 tylko wtedy, gdy nie ma innej blokady typu <em>JobObjectLock<\/em> dla instancji.<\/p>\n<h5 id=\"joblogicallock\" ><span class=\"ez-toc-section\" id=\"JobLogicalLock\"><\/span>JobLogicalLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Blokada typu <em>JobLogicalLock<\/em> jest jawnie wymagana przez zadanie. Mo\u017cna jej za\u017c\u0105da\u0107 tylko wtedy, gdy nie ma innej blokady typu <em>LogicalLock<\/em> dla ci\u0105gu znak\u00f3w, kt\u00f3ry ma zosta\u0107 zablokowany. Blokada tego typu musi zosta\u0107 wyra\u017anie zwolniona.<\/p>\n<h5 id=\"transactionkeyreadlock\" ><span class=\"ez-toc-section\" id=\"TransactionKeyReadLock\"><\/span>TransactionKeyReadLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Blokada typu <em>TransactionKeyReadLock<\/em> blokuje grup\u0119 instancji obiekt\u00f3w biznesowych. Grupa jest identyfikowana przez cz\u0119\u015b\u0107 klucza wielocz\u0119\u015bciowego (podklucz). Blokada odczytu jest ustawiona dla tej grupy, kt\u00f3ra jest wyra\u017anie wymagana w ramach transakcji. Jest ona zwalniana po zako\u0144czeniu transakcji. Blokady odczytu klucza transakcji s\u0105 r\u00f3wnie\u017c automatycznie wymagane dla wszystkich kr\u00f3tszych podkluczy dla ka\u017cdej blokady transakcji.<\/p>\n<h5 id=\"transactionkeywritelock\" ><span class=\"ez-toc-section\" id=\"TransactionKeyWriteLock\"><\/span>TransactionKeyWriteLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Blokada typu <em>TransactionKeyWriteLock<\/em> blokuje grup\u0119 instancji obiekt\u00f3w biznesowych. Grupa jest identyfikowana przez cz\u0119\u015b\u0107 wielocz\u0119\u015bciowego klucza (podklucza). Blokada zapisu jest ustawiona dla tej grupy, kt\u00f3ra jest wyra\u017anie wymagana w ramach transakcji. Jest ona zwalniana po zako\u0144czeniu transakcji.<\/p>\n<h5 id=\"transactioninstancereadlock\" ><span class=\"ez-toc-section\" id=\"TransactionInstanceReadLock\"><\/span>TransactionInstanceReadLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Blokada typu <em>TransactionInstanceReadLock<\/em> jest wymagana tylko wtedy, gdy obiekt biznesowy jest odczytywany za pomoc\u0105 polecenia <em>REPEATABLE_READ<\/em>.<\/p>\n<h5 id=\"transactioninstancewritelock\" ><span class=\"ez-toc-section\" id=\"TransactionInstanceWriteLock\"><\/span>TransactionInstanceWriteLock<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Blokada typu <em>TransactionInstanceWriteLock<\/em> jest wymagana tylko wtedy, gdy obiekt biznesowy jest odczytywany za pomoc\u0105 polecenia <em>READ_UPDATE<\/em> lub <em>READ_WRITE<\/em>.<\/p>\n<h5 id=\"zaleznosci\" ><span class=\"ez-toc-section\" id=\"Zaleznosci\"><\/span>Zale\u017cno\u015bci<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Niekt\u00f3re z tych typ\u00f3w blokad s\u0105 wsp\u00f3\u0142zale\u017cne, poniewa\u017c blokuj\u0105 obiekty tego samego typu na r\u00f3\u017cnych poziomach szczeg\u00f3\u0142owo\u015bci. Tylko typ blokady <em>ActivationGroupClassUseLock<\/em> jest wy\u0142\u0105czony z tego rozwa\u017cania. Nale\u017cy zwr\u00f3ci\u0107 uwag\u0119 na nast\u0119puj\u0105ce zasady i zale\u017cno\u015bci:<\/p>\n<ul>\n<li>Blokada na poziomie drobnej szczeg\u00f3\u0142owo\u015bci jest poprzedzona blokadami na wszystkich poziomach grubszych.<\/li>\n<li>Typ blokady transakcji jest przekazywany do wszystkich blokad transakcji o wi\u0119kszej szczeg\u00f3\u0142owo\u015bci jako blokada odczytu.<\/li>\n<li><span style=\"font-size: revert; color: initial;\">Dla ka\u017cdej blokady transakcji, blokady typu <em>TransactionKeyReadLock<\/em> s\u0105 wymagane dla wszystkich kr\u00f3tszych podkluczy.<\/span><\/li>\n<li><span style=\"font-size: revert; color: initial;\">Blokada u\u017cytkowania lub odczytu jest przyznawana, je\u015bli na tym samym poziomie nie zosta\u0142a przyznana blokada wy\u0142\u0105czno\u015bci lub zapisu.<\/span><\/li>\n<li><span style=\"font-size: revert; color: initial;\">Blokada wy\u0142\u0105czna lub blokada zapisu jest przyznawana tylko wtedy, gdy \u017cadna inna blokada nie zosta\u0142a przyznana na tym samym poziomie.<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/ZarzadzanieBlokadami.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-29696\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/ZarzadzanieBlokadami.png\" alt=\"\" width=\"752\" height=\"802\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZarzadzanieBlokadami.png 752w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZarzadzanieBlokadami-281x300.png 281w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZarzadzanieBlokadami-47x50.png 47w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZarzadzanieBlokadami-600x640.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZarzadzanieBlokadami-320x341.png 320w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><\/a><\/p>\n<p>Poni\u017csza tabela kategoryzuje typy blokad zgodnie z ich funkcj\u0105 w systemie:<\/p>\n<table style=\"border-collapse: collapse; width: 100%; height: 230px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; text-align: center; height: 23px; border-style: outset;\"><strong>Typ blokady<\/strong><\/td>\n<td style=\"width: 25%; text-align: center; height: 23px; border-style: outset;\"><strong>Dost\u0119p do danych<\/strong><\/td>\n<td style=\"width: 25%; text-align: center; height: 23px; border-style: outset;\"><strong>Wymiana klas<\/strong><\/td>\n<td style=\"width: 25%; text-align: center; height: 23px; border-style: outset;\"><strong>Modyfikacja schematu<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>ActivationGroupClassUseLock<\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>JobClassUseLock<\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>JobClassExclusiveLock <\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>JobObjectUseLock <\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>JobObjectExclusiveLock<\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>TransactionKeyReadLock <\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>TransactionKeyWriteLock <\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>TransactionInstanceReadLock<\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 25%; height: 23px; border-style: outset;\"><em>TransactionInstanceWriteLock <\/em><\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">Tak<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<td style=\"width: 25%; height: 23px; text-align: center; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"niejawne-blokady-w-object-manager\" ><span class=\"ez-toc-section\" id=\"Niejawne_blokady_w_Object_Manager\"><\/span>Niejawne blokady w Object Manager<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W Object Manager blokady typu <em>TransactionInstanceLock<\/em> s\u0105 wymagane tylko do odczytu zgodnie z nast\u0119puj\u0105cymi zasadami:<\/p>\n<table style=\"border-collapse: collapse; width: 100%; height: 161px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; text-align: center; height: 23px; border-style: outset;\"><strong>Tryb dost\u0119pu<\/strong><\/td>\n<td style=\"width: 50%; text-align: center; height: 23px; border-style: outset;\"><strong>Blokada<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><em>READ <\/em><\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><em>READ_REPEATABLE <\/em><\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">Blokada odczytu<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><em>READ_UPDATE <\/em><\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">Blokada zapisu<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><em>READ_WRITE <\/em><\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">Blokada zapisu<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><em>CACHE_ONLY <\/em><\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 50%; height: 23px; border-style: outset;\"><em>BYPASS_CACHE <\/em><\/td>\n<td style=\"width: 50%; height: 23px; border-style: outset;\">&#8211;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>W przypadku odczytu danych za pomoc\u0105 klucza g\u0142\u00f3wnego nale\u017cy za\u017c\u0105da\u0107 blokady bezpo\u015brednio za pomoc\u0105 tego klucza. W przypadku \u017c\u0105da\u0144 z kluczem podstawowym najpierw musi zosta\u0107 obliczony klucz podstawowy. Blokada jest nast\u0119pnie wykonywana przy u\u017cyciu klucza podstawowego.<\/p>\n<p>Po przyznaniu blokady obiekt jest odczytywany ponownie, poniewa\u017c obiekt nie by\u0142 jeszcze zablokowany podczas pierwszego odczytu i m\u00f3g\u0142 zosta\u0107 zmieniony w mi\u0119dzyczasie. Mened\u017cer blokad zapewnia, \u017ce ten drugi odczyt dostarcza aktualnych danych.<\/p>\n<h5 id=\"algorytm\" ><span class=\"ez-toc-section\" id=\"Algorytm\"><\/span>Algorytm<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Object object = om.getObject (klucz drugorz\u0119dny)<\/p>\n<p>AquireLock (object)<\/p>\n<p>object = om.getObject (secondary Key)<\/p>\n<h5 id=\"zalety\" ><span class=\"ez-toc-section\" id=\"Zalety\"><\/span>Zalety<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Zalet\u0105 jest szybko\u015b\u0107 dla interaktywnych aplikacji, kt\u00f3re s\u0105 pocz\u0105tkowo odczytywane za pomoc\u0105 <em>READ<\/em> i \u017c\u0105daj\u0105 blokady tylko podczas pisania.<\/p>\n<h5 id=\"wady\" ><span class=\"ez-toc-section\" id=\"Wady\"><\/span>Wady<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Obiekt jest odczytywany dwukrotnie z bazy danych, je\u015bli nie jest dost\u0119pny we wsp\u00f3\u0142dzielonej pami\u0119ci podr\u0119cznej.<\/p>\n<p>Poniewa\u017c inna transakcja mo\u017ce zmieni\u0107 klucz podstawowy obiektu mi\u0119dzy pierwszym odczytem a \u017c\u0105daniem blokady, niew\u0142a\u015bciwy obiekt jest blokowany i odczytywany. Poniewa\u017c klucze drugorz\u0119dne s\u0105 rzadko lub nigdy nie zmieniane, procedura ta jest nieproblematyczna. W przeciwnym razie procedura ta naturalnie prowadzi do niesp\u00f3jno\u015bci danych.<\/p>\n<p>W przypadku obiekt\u00f3w zale\u017cnych od czasu blokowany jest klucz g\u0142\u00f3wny. Powoduje to zablokowanie wszystkich wersji obiektu, poniewa\u017c wszystkie obiekty s\u0105 zale\u017cne od czasu.<\/p>\n<h4 id=\"blokady-logiczne\" ><span class=\"ez-toc-section\" id=\"Blokady_logiczne\"><\/span>Blokady logiczne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Blokady logiczne s\u0105 u\u017cywane w Comarch ERP Enterprise na poziomie zada\u0144 i aplikacji. W przeciwie\u0144stwie do blokad nielogicznych, kt\u00f3re blokuj\u0105 zasoby w systemie, blokada logiczna blokuje ci\u0105g znak\u00f3w, kt\u00f3ry oznacza semantyk\u0119 specyficzn\u0105 dla aplikacji. Je\u015bli blokada logiczna istnieje dla ci\u0105gu znak\u00f3w w kontek\u015bcie, to \u017caden inny kontekst nie otrzymuje blokady dla tego samego ci\u0105gu znak\u00f3w.<\/p>\n<p>Blokady logiczne nie maj\u0105 wp\u0142ywu na zachowanie systemu, chyba \u017ce s\u0105 jawnie odpytywane. Blokady logiczne s\u0105 obserwowane tylko przez aplikacje. Ponadto blokady logiczne nie maj\u0105 wp\u0142ywu na \u017c\u0105dania blokady typu <em>TransactionInstanceLock<\/em>.<\/p>\n<h5 id=\"blokady-aplikacji\" ><span class=\"ez-toc-section\" id=\"Blokady_aplikacji\"><\/span>Blokady aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Logiczne blokady aplikacji s\u0105 \u017c\u0105dane i zwalniane przez menad\u017cera aplikacji. Blokady aplikacji s\u0105 automatycznie zwalniane po zamkni\u0119ciu aplikacji. \u017badna inna aplikacja i \u017cadne inne zadanie nie mo\u017ce zablokowa\u0107 tego samego ci\u0105gu znak\u00f3w, je\u015bli blokada zosta\u0142a przyznana dla aplikacji.<\/p>\n<h5 id=\"blokady-zadan\" ><span class=\"ez-toc-section\" id=\"Blokady_zadan\"><\/span>Blokady zada\u0144<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Logiczne blokady zada\u0144 mog\u0105 by\u0107 \u017c\u0105dane lub zwalniane przez menad\u017cera systemu. Nale\u017cy upewni\u0107 si\u0119, \u017ce aplikacja, kt\u00f3ra za\u017c\u0105da\u0142a blokady, r\u00f3wnie\u017c wyra\u017anie zwolni\u0142a j\u0105 ponownie, w przeciwnym razie blokada pozostanie na miejscu do momentu zako\u0144czenia zadania. Inne aplikacje w tym samym zadaniu r\u00f3wnie\u017c otrzymuj\u0105 blokad\u0119 zadania, je\u015bli aplikacja w zadaniu otrzyma\u0142a ju\u017c blokad\u0119 zadania.<\/p>\n<p>Nale\u017cy wybra\u0107 ci\u0105g znak\u00f3w tak, aby zawsze jednoznacznie identyfikowa\u0142 zamierzon\u0105 semantyk\u0119. Je\u015bli instancja obiektu biznesowego jest powi\u0105zana z semantyk\u0105, kt\u00f3ra ma zosta\u0107 zablokowana, to zazwyczaj wystarczy do\u0142\u0105czy\u0107 szesnastkow\u0105 reprezentacj\u0119 atrybut\u00f3w klucza g\u0142\u00f3wnego w ci\u0105gu znak\u00f3w (ze wzgl\u0119du na w\u0142a\u015bciwo\u015bci identyfikator\u00f3w GUID).<\/p>\n<p>Ci\u0105g instancji nie zawiera informacji o bazie danych OLTP i klasie obiektu biznesowego. Podczas wybierania ci\u0105gu znak\u00f3w do zablokowania nale\u017cy wzi\u0105\u0107 pod uwag\u0119 nast\u0119puj\u0105ce punkty:<\/p>\n<ul>\n<li>Przypisanie do bazy danych OLTP, je\u015bli dotyczy<\/li>\n<li>Typ zablokowanego zasobu<\/li>\n<li>Identyfikacja zablokowanego zasobu<\/li>\n<\/ul>\n<h3 id=\"serwer-klienta\" ><span class=\"ez-toc-section\" id=\"Serwer_klienta\"><\/span>Serwer klienta<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Bazy danych i zawarte w nich obiekty stanowi\u0105 zasoby w sensie blokady. Je\u015bli wi\u0119cej ni\u017c jeden serwer aplikacji uzyskuje dost\u0119p do bazy danych, zasoby tej bazy danych s\u0105 wykorzystywane przez kilka serwer\u00f3w aplikacji w tym samym czasie. Dost\u0119p do tych zasob\u00f3w musi by\u0107 koordynowany pomi\u0119dzy serwerami. Do tej koordynacji wykorzystywany jest centralny serwer komunikat\u00f3w, kt\u00f3ry centralnie zarz\u0105dza tabel\u0105 blokad. Tabela blokad zawiera wszystkie blokady wszystkich podrz\u0119dnych serwer\u00f3w aplikacji. Ka\u017cdy serwer aplikacji Comarch ERP Enterprise wysy\u0142a zapytanie o swoj\u0105 blokad\u0119 z tej centralnej tabeli blokad. Je\u015bli tylko jeden serwer aplikacji uzyskuje dost\u0119p do bazy danych w danym czasie, proces synchronizacji, a tym samym komunikacja klient-serwer, nie jest ju\u017c konieczna.<\/p>\n<h4 id=\"komunikacja-klient-serwer\" ><span class=\"ez-toc-section\" id=\"Komunikacja_klient-serwer\"><\/span>Komunikacja klient-serwer<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli na baz\u0119 danych przypada tylko jeden serwer aplikacji, potrzebny jest tylko jeden lokalny Lock Manager. \u017badne inne \u015bcie\u017cki komunikacji lub synchronizacji nie s\u0105 konieczne dla tego serwera aplikacji lub klienta.<\/p>\n<p>W systemie z kilkoma serwerami aplikacji Comarch ERP Enterprise komunikacja zawsze odbywa si\u0119 za po\u015brednictwem serwera wiadomo\u015bci. Komunikacja mi\u0119dzy klientami jest nawi\u0105zywana za po\u015brednictwem serwera komunikat\u00f3w. Je\u015bli klient wymaga informacji od innych klient\u00f3w, us\u0142uga jest dost\u0119pna w serwerze komunikat\u00f3w.<\/p>\n<h4 id=\"serwer-komunikatow-z-klientami\" ><span class=\"ez-toc-section\" id=\"Serwer_komunikatow_z_klientami\"><\/span>Serwer komunikat\u00f3w z klientami<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli kilka serwer\u00f3w aplikacji (klient\u00f3w) pracuje z tymi samymi zasobami, tj. z tymi samymi bazami danych i klasami Java, w\u00f3wczas dost\u0119p do tych zasob\u00f3w jest koordynowany mi\u0119dzy serwerami aplikacji. Koordynacja odbywa si\u0119 za pomoc\u0105 centralnego serwera komunikat\u00f3w i blokad. Serwer komunikat\u00f3w zawiera tabel\u0119 blokad, w kt\u00f3rej zarz\u0105dzane s\u0105 wszystkie blokady wszystkich przypisanych serwer\u00f3w. Ka\u017cda blokada jest przypisywana z tej centralnej tabeli blokad.<\/p>\n<p>Przyznane blokady s\u0105 zarz\u0105dzane lokalnie w ka\u017cdym serwerze aplikacji Comarch ERP Enterprise. \u017b\u0105dania blokady nie s\u0105 zatem ponownie przekazywane do centralnej tabeli blokad dla blokad, kt\u00f3re zosta\u0142y ju\u017c przyznane. Na \u017c\u0105dania odpowiada lokalna tabela blokad.<\/p>\n<p>Mechanizm ten usprawnia komunikacj\u0119 klient-serwer dla \u017c\u0105da\u0144 blokady mi\u0119dzy serwerem komunikat\u00f3w a pod\u0142\u0105czonymi serwerami aplikacji.<\/p>\n<p>Cz\u0119ste \u017c\u0105dania blokady od klient\u00f3w nie wp\u0142ywaj\u0105 negatywnie na wydajno\u015b\u0107 serwera komunikat\u00f3w. Z drugiej strony klienci s\u0105 wolniejsi ze wzgl\u0119du na wysi\u0142ek zwi\u0105zany z komunikacj\u0105 z serwerem komunikat\u00f3w.<\/p>\n<p><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/ZB22.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-29750\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2025\/05\/ZB22.png\" alt=\"\" width=\"411\" height=\"821\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZB22.png 411w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZB22-150x300.png 150w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZB22-25x50.png 25w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2025\/05\/ZB22-320x639.png 320w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><\/a><\/p>\n<p>Nast\u0119puj\u0105ce typy komunikat\u00f3w s\u0105 wymieniane mi\u0119dzy centralnym serwerem komunikat\u00f3w a przypisanym serwerem aplikacji Comarch ERP Enterprise.<\/p>\n<h5 id=\"wymagania-dotyczace-blokady\" ><span class=\"ez-toc-section\" id=\"Wymagania_dotyczace_blokady\"><\/span>Wymagania dotycz\u0105ce blokady<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u017b\u0105danie blokady zawiera jedn\u0105 lub wi\u0119cej blokad. Poszczeg\u00f3lne blokady s\u0105 przesy\u0142ane do serwera komunikat\u00f3w w kolejno\u015bci, w jakiej zosta\u0142y za\u017c\u0105dane.<\/p>\n<p>Je\u015bli serwer komunikat\u00f3w nie mo\u017ce przyzna\u0107 blokady, kolejne \u017c\u0105dane blokady nie s\u0105 dalej przetwarzane. Blokady ju\u017c przyznane s\u0105 wpisywane do lokalnej tabeli blokad serwer\u00f3w aplikacji. Po przyznaniu blokady serwer komunikat\u00f3w informuje, czy zablokowany obiekt zosta\u0142 w mi\u0119dzyczasie zmieniony. To okre\u015bla w pami\u0119ci podr\u0119cznej, czy zablokowany obiekt jest nadal dost\u0119pny w bie\u017c\u0105cej wersji, czy te\u017c musi zosta\u0107 ponownie odczytany z bazy danych.<\/p>\n<h5 id=\"zwalnianie-blokady\" ><span class=\"ez-toc-section\" id=\"Zwalnianie_blokady\"><\/span>Zwalnianie blokady<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli kontekst, taki jak transakcja, zadanie lub grupa aktywacji, zostanie zako\u0144czony, wszystkie blokady \u017c\u0105dane w tym kontek\u015bcie zostan\u0105 zwolnione w bloku. W centralnym serwerze komunikat\u00f3w wpisy pami\u0119ci podr\u0119cznej dla zwolnionych wy\u0142\u0105cznych blokad przypisanego serwera aplikacji s\u0105 usuwane, poniewa\u017c te wpisy pami\u0119ci podr\u0119cznej mog\u0105 by\u0107 nieprawid\u0142owe. Ka\u017cda zwolniona blokada jest odnotowywana w serwerze komunikat\u00f3w do nast\u0119pnej og\u00f3lnosystemowej synchronizacji pami\u0119ci podr\u0119cznej.<\/p>\n<h5 id=\"synchronizacja-pamieci-podrecznej\" ><span class=\"ez-toc-section\" id=\"Synchronizacja_pamieci_podrecznej\"><\/span>Synchronizacja pami\u0119ci podr\u0119cznej<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Og\u00f3lnosystemowa synchronizacja pami\u0119ci podr\u0119cznej jest przeprowadzana w regularnych odst\u0119pach czasu (30 sekund). Synchronizacja obejmuje powiadomienie wszystkich serwer\u00f3w aplikacji (klient\u00f3w) systemu. Dostarczane s\u0105 informacje o zmienionych obiektach biznesowych, dla kt\u00f3rych zwolniono blokady zapisu. Nieprawid\u0142owe obiekty s\u0105 usuwane z odpowiednich lokalnych wsp\u00f3\u0142dzielonych pami\u0119ci podr\u0119cznych.<\/p>\n<h6 id=\"stany-krytyczne\" ><span class=\"ez-toc-section\" id=\"Stany_krytyczne\"><\/span>Stany krytyczne<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Podczas \u017c\u0105dania i zwalniania blokad wyst\u0119puje stan krytyczny, je\u015bli serwer komunikat\u00f3w lub serwer aplikacji (klient) zosta\u0142 zako\u0144czony. B\u0142\u0119dy, kt\u00f3re mog\u0105 wyst\u0105pi\u0107, zosta\u0142y kr\u00f3tko opisane poni\u017cej:<\/p>\n<ul>\n<li>Serwer aplikacji Comarch ERP Enterprise (klient) &#8212; je\u015bli klient zosta\u0142 zako\u0144czony, serwer komunikat\u00f3w zwalnia wszystkie blokady \u017c\u0105dane przez klienta.<\/li>\n<li><span style=\"font-size: revert; color: initial;\">Serwer komunikat\u00f3w &#8212; Comarch ERP Enterprise<\/span>\u00a0zostaje zako\u0144czony na wszystkich klientach, poniewa\u017c nie mog\u0105 oni \u017c\u0105da\u0107 dalszych blokad bez centralnej tabeli blokad.<\/li>\n<\/ul>\n<h4 id=\"synchronizacja-wspoldzielonych-pamieci-podrecznych\" ><span class=\"ez-toc-section\" id=\"Synchronizacja_wspoldzielonych_pamieci_podrecznych\"><\/span>Synchronizacja wsp\u00f3\u0142dzielonych pami\u0119ci podr\u0119cznych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wynikiem wymiany wiadomo\u015bci lub synchronizacji mi\u0119dzy serwerem aplikacji Comarch ERP Enterprise (klientem) a centralnym serwerem wiadomo\u015bci jest wsp\u00f3\u0142dzielona pami\u0119\u0107 podr\u0119czna, kt\u00f3ra jest zawsze aktualna. Aktualno\u015b\u0107 oznacza, \u017ce wsp\u00f3\u0142dzielona pami\u0119\u0107 podr\u0119czna jest aktualizowana co 30 sekund. Oznacza to, \u017ce tylko aktualne obiekty s\u0105 przechowywane we wsp\u00f3\u0142dzielonej pami\u0119ci podr\u0119cznej. Nieprawid\u0142owe obiekty to te, kt\u00f3re zosta\u0142y (wy\u0142\u0105cznie) zablokowane i zwolnione przez inne serwery aplikacji od czasu ostatniej synchronizacji w ca\u0142ym systemie. Je\u015bli obiekt we wsp\u00f3\u0142dzielonej pami\u0119ci podr\u0119cznej nie jest ju\u017c aktualny, obiekt ten jest ponownie odczytywany z bazy danych przy nast\u0119pnym \u017c\u0105daniu blokady.<\/p>\n<p>Niezale\u017cnie od synchronizacji pami\u0119ci podr\u0119cznej, pami\u0119ci podr\u0119czne wszystkich serwer\u00f3w aplikacji nie mog\u0105 by\u0107 sp\u00f3jne bez du\u017cego wysi\u0142ku synchronizacyjnego. W tym kontek\u015bcie sp\u00f3jno\u015b\u0107 oznacza, \u017ce powi\u0105zane obiekty biznesowe, takie jak jednostka biznesowa, w tym jednostki zale\u017cne, s\u0105 dost\u0119pne w tej samej wersji.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Serwer aplikacji\u00a0<em>A<\/em> przechowuje niekt\u00f3re, ale nie wszystkie, obiekty <em>O1<\/em>, <em>&#8230;<\/em>, <em>On<\/em> jednostki biznesowej w pami\u0119ci podr\u0119cznej, podczas gdy serwer aplikacji <em>B<\/em> zmienia kompletn\u0105 jednostk\u0119 biznesow\u0105 <em>O1<\/em>, <em>&#8230;<\/em>, <em>Om<\/em>. Je\u015bli serwer aplikacji <em>A<\/em> odczyta ca\u0142\u0105 jednostk\u0119 biznesow\u0105, otrzyma <em>O1<\/em>, <em>&#8230;<\/em>,<em>On<\/em> w starszej wersji, podczas gdy <em>On+1<\/em>, <em>&#8230;<\/em>,<em>Om<\/em> jest dost\u0119pny w bie\u017c\u0105cej wersji.<\/p>\n<p>Oznacza to, \u017ce ca\u0142a jednostka jest niesp\u00f3jna.<\/div><\/section>\n<p>Niesp\u00f3jno\u015bci mo\u017cna zapobiec jedynie poprzez \u017c\u0105danie blokady odczytu dla jednostki biznesowej przy ka\u017cdym dost\u0119pie do odczytu. Z tego powodu aplikacja sama decyduje, kiedy wymagane s\u0105 sp\u00f3jne dane i za pomoc\u0105 jakich odpowiednich \u015brodk\u00f3w s\u0105 one odczytywane.<\/p>\n<p>Ustawienie blokad kosztuje stosunkowo du\u017c\u0105 ilo\u015b\u0107 mocy obliczeniowej na kliencie i cz\u0119sto nie jest konieczne w przypadku dost\u0119pu tylko do odczytu. U\u017cytkownicy nie zawsze wymagaj\u0105 absolutnie aktualnych i bie\u017c\u0105cych danych. Je\u015bli, na przyk\u0142ad, adres klienta zostanie zmieniony, inne serwery aplikacji nie otrzymaj\u0105 tych nowych informacji natychmiast, ale dopiero po 30 sekundach. By\u0142oby jednak niedopuszczalne, gdyby nieaktualny rekord danych pozostawa\u0142 w pami\u0119ci podr\u0119cznej innych serwer\u00f3w aplikacji Comarch ERP Enterprise przez godziny lub dni. Z tego powodu serwer komunikat\u00f3w wysy\u0142a wiadomo\u015b\u0107 do serwera aplikacji w regularnych odst\u0119pach czasu (co 30 sekund) z kluczami wszystkich obiekt\u00f3w, kt\u00f3re zmieni\u0142y si\u0119 w mi\u0119dzyczasie (synchronizacja pami\u0119ci podr\u0119cznej).<\/p>\n<p>Aby serwer komunikat\u00f3w m\u00f3g\u0142 poinformowa\u0107 powi\u0105zany serwer aplikacji, kt\u00f3re obiekty zmieni\u0142y si\u0119 od ostatniej synchronizacji pami\u0119ci podr\u0119cznej, serwer komunikat\u00f3w przechowuje list\u0119 zmienionych obiekt\u00f3w. Lista ta mo\u017ce sta\u0107 si\u0119 bardzo d\u0142uga w przypadku du\u017cej liczby zmian. W szczeg\u00f3lno\u015bci dane transakcji, kt\u00f3re s\u0105 cz\u0119sto zapisywane, prowadz\u0105 do du\u017cego zapotrzebowania na pami\u0119\u0107 g\u0142\u00f3wn\u0105 i komunikacj\u0119 podczas pracy. Dlatego nale\u017cy utrzymywa\u0107 list\u0119 zmian tylko dla niekt\u00f3rych obiekt\u00f3w biznesowych.<\/p>\n<p>Lista zmian jest rozszerzana za ka\u017cdym razem, gdy zwalniana jest blokada transakcji. Lista zmian jest cz\u0119\u015bci\u0105 centralnej tabeli blokad w serwerze komunikat\u00f3w. Jest ona realizowana poprzez dodanie dodatkowych atrybut\u00f3w <em>Ostatnio zmieniony przez<\/em> i <em>Nieprawid\u0142owy znacznik<\/em> dla ka\u017cdej blokady i ka\u017cdego serwera aplikacji do tabeli blokad. <em>Nieprawid\u0142owy znacznik<\/em> jest ustawiany, je\u015bli serwer aplikacji nie zosta\u0142 jeszcze poinformowany o zwolnionej blokadzie. Lista zmian jest usuwana z centralnej tabeli blokad tylko wtedy, gdy informacje o zwolnionych blokadach zosta\u0142y przes\u0142ane do wszystkich serwer\u00f3w aplikacji, tj. nie jest ustawiony \u017caden <em>Nieprawid\u0142owy znacznik<\/em>.<\/p>\n<p>Opr\u00f3cz listy zmian zarz\u0105dzana jest lista ostatnio zmienionych obiekt\u00f3w, w kt\u00f3rej odnotowywane s\u0105 odniesienia do ostatnio zmienionych obiekt\u00f3w biznesowych zmieniaj\u0105cego si\u0119 serwera aplikacji. Serwer komunikat\u00f3w u\u017cywa \u017c\u0105dania blokady i tej listy, aby okre\u015bli\u0107, czy serwer aplikacji (klient) mo\u017ce obecnie przechowywa\u0107 obiekt w pami\u0119ci podr\u0119cznej. Oto dwa przyk\u0142ady:<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli klient jest odnotowany jako ostatni modyfikator obiektu na li\u015bcie ostatnio zmodyfikowanych obiekt\u00f3w, w\u00f3wczas klient mo\u017ce przechowywa\u0107 bie\u017c\u0105c\u0105 wersj\u0119 tego obiektu w pami\u0119ci podr\u0119cznej i nie musi ponownie odczytywa\u0107 obiektu z bazy danych po zablokowaniu.<\/div><\/section>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli klient jest odnotowany jako ostatni modyfikator na li\u015bcie zmian, obiekt nie musi by\u0107 ponownie odczytywany z bazy danych.<\/div><\/section>\n<p>Je\u015bli \u017c\u0105danie blokady lub synchronizacja pami\u0119ci podr\u0119cznej informuje klienta, \u017ce obiekt jest nieprawid\u0142owy, klient jest usuwany z listy zmian niezg\u0142oszonych klient\u00f3w dla obiektu, tj. usuwany jest <em>Nieprawid\u0142owy znacznik<\/em>. Oznacza to, \u017ce ka\u017cdy klient jest powiadamiany tylko raz na zmian\u0119.<\/p>\n","protected":false},"author":27,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9265","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-persistence-service"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/9265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/comments?post=9265"}],"version-history":[{"count":31,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/9265\/revisions"}],"predecessor-version":[{"id":29756,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/9265\/revisions\/29756"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/media?parent=9265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}