{"id":9657,"date":"2025-06-03T13:16:04","date_gmt":"2025-06-03T11:16:04","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/?post_type=ht_kb&#038;p=9657"},"modified":"2025-06-03T13:16:34","modified_gmt":"2025-06-03T11:16:34","slug":"interfejs-dla-pamieci-podrecznej-cache","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/","title":{"rendered":"Interfejs dla pami\u0119ci podr\u0119cznej (Cache)"},"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\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Wprowadzenie\" >Wprowadzenie<\/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\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#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-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Opis\" >Opis<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Implementacja_pamieci_podrecznej\" >Implementacja pami\u0119ci podr\u0119cznej<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Zmienne_specyficzne_dla_sesji\" >Zmienne specyficzne dla sesji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Wlasciwosci_specyficzne_dla_sesji\" >W\u0142a\u015bciwo\u015bci specyficzne dla sesji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Wymagania_dotyczace_pamieci\" >Wymagania dotycz\u0105ce pami\u0119ci<\/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\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Synchronizacja\" >Synchronizacja<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Rejestracja\" >Rejestracja<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Pobieranie_instancji_pamieci_podrecznej\" >Pobieranie instancji pami\u0119ci podr\u0119cznej<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/interfejs-dla-pamieci-podrecznej-cache\/#Przyklad\" >Przyk\u0142ad<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3 id=\"wprowadzenie\" ><span class=\"ez-toc-section\" id=\"Wprowadzenie\"><\/span>Wprowadzenie<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pami\u0119\u0107 podr\u0119czna umo\u017cliwia wielokrotne wykorzystywanie z\u0142o\u017conych wynik\u00f3w oblicze\u0144 bez konieczno\u015bci ich ponownego obliczania za ka\u017cdym razem. Je\u015bli dane, na kt\u00f3rych oparte s\u0105 obliczenia, ulegn\u0105 zmianie, pami\u0119\u0107 podr\u0119czna musi odrzuci\u0107 nieaktualn\u0105 zawarto\u015b\u0107.<\/p>\n<p>System zapewnia interfejs umo\u017cliwiaj\u0105cy \u0142atwe tworzenie pami\u0119ci podr\u0119cznych. Interfejs ten automatycznie odrzuca nieaktualn\u0105 zawarto\u015b\u0107 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<ul>\n<li>Programi\u015bci<\/li>\n<li>Konsultanci techniczni<\/li>\n<\/ul>\n<h3 id=\"opis\" ><span class=\"ez-toc-section\" id=\"Opis\"><\/span>Opis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Silnik systemu zapewnia interfejs dla pami\u0119ci podr\u0119cznych w PGM. Instancje pami\u0119ci podr\u0119cznych zarejestrowanych za po\u015brednictwem tego interfejsu mog\u0105 by\u0107 odpytywane przez CisSystemManager. Instancje pami\u0119ci podr\u0119cznej s\u0105 generowane przez silnik systemowy za po\u015brednictwem CisFactory.<\/p>\n<p>Wszystkie obiekty biznesowe, na podstawie kt\u00f3rych obliczana jest zawarto\u015b\u0107 pami\u0119ci podr\u0119cznej, musz\u0105 by\u0107 zatem okre\u015blone dla ka\u017cdej pami\u0119ci podr\u0119cznej. Je\u015bli obiekt biznesowy w bazie danych OLTP zostanie zmieniony, wszystkie pami\u0119ci podr\u0119czne w tym OLTP, kt\u00f3re u\u017cywaj\u0105 tego obiektu biznesowego, zostan\u0105 ca\u0142kowicie uniewa\u017cnione. Podczas uniewa\u017cniania odwo\u0142anie do przestarza\u0142ej instancji pami\u0119ci podr\u0119cznej jest odrzucane, a nowa instancja jest tworzona przy nast\u0119pnym zapytaniu o instancj\u0119 pami\u0119ci podr\u0119cznej. Przestarza\u0142a instancja pami\u0119ci podr\u0119cznej nie jest zatem powiadamiana o tym, \u017ce jest przestarza\u0142a, ale tworzona jest nowa instancja pami\u0119ci podr\u0119cznej, kt\u00f3ra dzia\u0142a na bie\u017c\u0105cych danych.<\/p>\n<p>Aby uzyska\u0107 bie\u017c\u0105c\u0105 instancj\u0119 pami\u0119ci podr\u0119cznej, musi ona by\u0107 ponownie odpytywana przez menagera za ka\u017cdym razem, gdy jest u\u017cywana.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Instancje pami\u0119ci podr\u0119cznej nie mog\u0105 by\u0107 zapisywane w zmiennych instancji klas. Je\u015bli instancja pami\u0119ci podr\u0119cznej jest zwi\u0105zana przez d\u0142u\u017cszy czas, uniewa\u017cnienie w Business Objects jest nieskuteczne, a obiekty dzia\u0142aj\u0105 z nieaktualnymi danymi. Ponadto w pami\u0119ci mo\u017ce by\u0107 przechowywanych kilka instancji pami\u0119ci podr\u0119cznej z t\u0105 sam\u0105 zawarto\u015bci\u0105. Mo\u017ce to znacznie zwi\u0119kszy\u0107 zu\u017cycie pami\u0119ci.<\/div><\/section>\n<h4 id=\"implementacja-pamieci-podrecznej\" ><span class=\"ez-toc-section\" id=\"Implementacja_pamieci_podrecznej\"><\/span>Implementacja pami\u0119ci podr\u0119cznej<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Interfejs wymaga jedynie, aby klasa implementuj\u0105ca pami\u0119\u0107 podr\u0119czn\u0105 mog\u0142a zosta\u0107 utworzona za pomoc\u0105 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CisFactory.createInstance<\/code>. Oznacza to, \u017ce musi ona posiada\u0107 konstruktor bez parametr\u00f3w. Chocia\u017c nie ma wsp\u00f3lnej klasy bazowej ani interfejsu dla pami\u0119ci podr\u0119cznych, nale\u017cy przestrzega\u0107 konwencji programowania.<\/p>\n<h5 id=\"zmienne-specyficzne-dla-sesji\" ><span class=\"ez-toc-section\" id=\"Zmienne_specyficzne_dla_sesji\"><\/span>Zmienne specyficzne dla sesji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Pami\u0119\u0107 podr\u0119czna nie mo\u017ce przechowywa\u0107 \u017cadnych zmiennych i manager\u00f3w specyficznych dla sesji. Pami\u0119\u0107 podr\u0119czna jest u\u017cywana we wszystkich sesjach. W szczeg\u00f3lno\u015bci niedozwolone jest, aby pami\u0119\u0107 podr\u0119czna posiada\u0142a zmienne instancji nast\u0119puj\u0105cych klas:<\/p>\n<ul>\n<li>&#8211; CisEnvironment<\/li>\n<li>&#8211; CisObjectManager<\/li>\n<li>&#8211; CisTransactionManager<\/li>\n<li>&#8211; CisMessageManager<\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>Wszystkie powy\u017csze Manager musz\u0105 by\u0107 ponownie odpytywane w ka\u017cdej metodzie. Je\u015bli Manager jest u\u017cywany w sesji innej ni\u017c ta, w kt\u00f3rej zosta\u0142y utworzone, mog\u0105 wyst\u0105pi\u0107 b\u0142\u0119dy.<\/p>\n<h5 id=\"wlasciwosci-specyficzne-dla-sesji\" ><span class=\"ez-toc-section\" id=\"Wlasciwosci_specyficzne_dla_sesji\"><\/span>W\u0142a\u015bciwo\u015bci specyficzne dla sesji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Pami\u0119\u0107 podr\u0119czna musi uwzgl\u0119dnia\u0107 fakt, \u017ce w ka\u017cdej sesji obowi\u0105zuje inny j\u0119zyk tre\u015bci lub inny kontekst organizacyjny.<\/p>\n<p>Je\u015bli na przyk\u0142ad j\u0119zyk tre\u015bci nie jest brany pod uwag\u0119 w pami\u0119ci podr\u0119cznej, j\u0119zyk tre\u015bci pierwszej sesji, kt\u00f3ra \u017c\u0105da warto\u015bci specyficznej dla j\u0119zyka z pami\u0119ci podr\u0119cznej, okre\u015bla t\u0142umaczenie, w kt\u00f3rym ta warto\u015b\u0107 jest wydawana wszystkim innym sesjom.<\/p>\n<p>Pomocne mo\u017ce by\u0107 zapisanie tylko klucza g\u0142\u00f3wnego (GUID) obiektu biznesowego w pami\u0119ci podr\u0119cznej i za\u0142adowanie tego obiektu biznesowego za pomoc\u0105 getObject podczas odpytywania. Ma to nast\u0119puj\u0105ce zalety:<\/p>\n<ul>\n<li>j\u0119zyk tre\u015bci obiektu biznesowego jest okre\u015blany przez bie\u017c\u0105c\u0105 sesj\u0119<\/li>\n<li>je\u015bli obiekt biznesowy jest zale\u017cny od czasu, dostarczana jest aktualnie obowi\u0105zuj\u0105ca wersja<\/li>\n<li>zapotrzebowanie na pami\u0119\u0107 podr\u0119czn\u0105 jest niskie, je\u015bli w pami\u0119ci podr\u0119cznej przechowywane s\u0105 tylko identyfikatory GUID<\/li>\n<li>dost\u0119p do obiekt\u00f3w biznesowych za po\u015brednictwem klucza g\u0142\u00f3wnego jest bardzo szybki.<\/li>\n<\/ul>\n<h5 id=\"wymagania-dotyczace-pamieci\" ><span class=\"ez-toc-section\" id=\"Wymagania_dotyczace_pamieci\"><\/span>Wymagania dotycz\u0105ce pami\u0119ci<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Ka\u017cda pami\u0119\u0107 podr\u0119czna mo\u017ce zajmowa\u0107 tylko ograniczon\u0105 ilo\u015b\u0107 pami\u0119ci g\u0142\u00f3wnej. Nie ma potrzeby, aby pami\u0119\u0107 podr\u0119czna zajmowa\u0142a nieograniczon\u0105 ilo\u015b\u0107 pami\u0119ci, w zale\u017cno\u015bci od konstelacji danych, poniewa\u017c wp\u0142ywa to na dzia\u0142anie serwera aplikacji.<\/p>\n<p>Dlatego do przechowywania danych pami\u0119ci podr\u0119cznej nale\u017cy zawsze u\u017cywa\u0107 kontener\u00f3w o ograniczonym rozmiarze. Na przyk\u0142ad klasy <em>CisLRUMap<\/em> i <em>LRUMap<\/em> to mapy o ograniczonym rozmiarze, w kt\u00f3rych po osi\u0105gni\u0119ciu maksymalnego rozmiaru element, kt\u00f3ry nie by\u0142 u\u017cywany przez najd\u0142u\u017cszy czas, jest usuwany po wstawieniu nowego elementu.<\/p>\n<h5 id=\"synchronizacja\" ><span class=\"ez-toc-section\" id=\"Synchronizacja\"><\/span>Synchronizacja<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Dowolna liczba sesji mo\u017ce uzyska\u0107 dost\u0119p do tej samej instancji pami\u0119ci podr\u0119cznej w tym samym czasie. Nale\u017cy zatem zsynchronizowa\u0107 metody dost\u0119pu, zw\u0142aszcza w przypadku korzystania z map LRU.<\/p>\n<h4 id=\"rejestracja\" ><span class=\"ez-toc-section\" id=\"Rejestracja\"><\/span>Rejestracja<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Pami\u0119ci podr\u0119czne dla bazy danych OLTP s\u0105 rejestrowane za pomoc\u0105 haka <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">com.cisag.pgm.appserver.hook.CacheRegistryHook<\/code>\u00a0z definicji umowy haka <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">com.cisag.pgm.appserver.Server<\/code>. Dla ka\u017cdej pami\u0119ci podr\u0119cznej nale\u017cy wywo\u0142a\u0107 metod\u0119 <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">registerOLTPCache<\/code>\u00a0w <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CacheRegistry<\/code>\u00a0z klas\u0105 pami\u0119ci podr\u0119cznej, opcjonalnie z dodatkowym identyfikatorem i klasami obiekt\u00f3w biznesowych u\u017cywanych przez pami\u0119\u0107 podr\u0119czn\u0105. ID zapewnia dodatkow\u0105 identyfikacj\u0119 opr\u00f3cz klasy. Kilka pami\u0119ci podr\u0119cznych z t\u0105 sam\u0105 klas\u0105 pami\u0119ci podr\u0119cznej mo\u017ce by\u0107 zarejestrowanych z r\u00f3\u017cnymi identyfikatorami.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p>Rejestracja pami\u0119ci podr\u0119cznej <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">CalendarLogic<\/code> dla obiekt\u00f3w biznesowych <em>Calendar<\/em>, <em>CalendarDayTypes<\/em> i <em>DayType<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">registry.registerOLTPCache(\n\ncom.cisag.app.general.log.CalendarLogic.class,\n\ncom.cisag.app.general.obj.Calendar.class,\n\ncom.cisag.app.general.obj.CalendarDayTypes.class,\n\ncom.cisag.app.general.obj.DayType.class);\n\nRejestracja pami\u0119ci podr\u0119cznej TaxExemptions z identyfikatorem \"1\" dla obiektu biznesowego TaxExemption:\n\nregistry.registerOLTPCache(\n\ncom.cisag.app.financials.log.TaxExemptions.Cache.class,\n\n\"1\",\n\ncom.cisag.app.financials.obj.TaxExemption.class);<\/pre>\n<p><\/div><\/section>\n<h4 id=\"pobieranie-instancji-pamieci-podrecznej\" ><span class=\"ez-toc-section\" id=\"Pobieranie_instancji_pamieci_podrecznej\"><\/span>Pobieranie instancji pami\u0119ci podr\u0119cznej<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wyst\u0105pienie pami\u0119ci podr\u0119cznej mo\u017ce by\u0107 odpytywane przez mened\u017cera systemu przy u\u017cyciu nast\u0119puj\u0105cych metod<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;T&gt; T getCacheInstance(Class&lt;T&gt; cacheClass);<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;T&gt; T getCacheInstance(Class&lt;T&gt; cacheClass, String cacheId);<\/code><\/p>\n<p>Metody te zwracaj\u0105 istniej\u0105c\u0105 i prawid\u0142ow\u0105 instancj\u0119 pami\u0119ci podr\u0119cznej lub tworzona jest nowa instancja.<\/p>\n<p>Instancj\u0119 pami\u0119ci podr\u0119cznej mo\u017cna odrzuci\u0107 w Mened\u017cerze systemu za pomoc\u0105 nast\u0119puj\u0105cych metod:<\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;T&gt; void invalidateCacheInstance(Class&lt;T&gt; cacheClass);<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;T&gt; void invalidateCacheInstance(Class&lt;T&gt; cacheClass,<br \/>\n<\/code><\/p>\n<p><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">String cacheId);<\/code><\/p>\n<p>Wyra\u017ane uniewa\u017cnienie instancji pami\u0119ci podr\u0119cznej ma sens, je\u015bli w instancji pami\u0119ci podr\u0119cznej zarz\u0105dzane s\u0105 dane, kt\u00f3re nie pochodz\u0105 z obiekt\u00f3w biznesowych, a zatem nie mog\u0105 by\u0107 monitorowane przez us\u0142ug\u0119 trwa\u0142o\u015bci.<\/p>\n<h4 id=\"przyklad\" ><span class=\"ez-toc-section\" id=\"Przyklad\"><\/span>Przyk\u0142ad<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public class InfoLogic {\n\nprivate LRUMap&lt;CisInfo&gt; cache;\n\nprotected InfoLogic() {\n\ncache = new LRUMap&lt;CisInfo&gt;(CACHE_SIZE);\n\n}\n\npublic static InfoLogic getInstance() {\n\nreturn CisEnvironment.getInstance().getSystemManager().\n\ngetCacheInstance(InfoLogic.class);\n\n}\n\npublic CisInfo getInfo(String name) {\n\nCisEnvironment env = CisEnvironment.getInstance();\n\n\/\/ wyszukiwanie w pami\u0119ci podr\u0119cznej\n\nCisKey key = CisKey.create(name,\n\nenv.getDisplayLanguage(),\n\nenv.getContentLanguage());\n\nCisInfo result;\n\nsynchronized (cache) {\n\nresult = cache.get(key);\n\n}\n\nif (result!=null) {\n\nreturn result;\n\n}\n\n\/\/ utworzenie nowej informacji\n\n...\n\n\/\/ umieszczenie informacji w pami\u0119ci podr\u0119cznej\n\nsynchronized (cache) {\n\ncache.put(key,result);\n\n}\n\nreturn result;\n\n}\n\n}<\/pre>\n","protected":false},"author":28,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-9657","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-interfejsy-techniczne"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/comments?post=9657"}],"version-history":[{"count":4,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9657\/revisions"}],"predecessor-version":[{"id":32373,"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/ht_kb\/9657\/revisions\/32373"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/index.php\/wp-json\/wp\/v2\/media?parent=9657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}