{"id":7623,"date":"2023-12-29T12:12:36","date_gmt":"2023-12-29T11:12:36","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/640\/?post_type=ht_kb&#038;p=7623"},"modified":"2023-12-29T12:15:49","modified_gmt":"2023-12-29T11:15:49","slug":"wprowadzenie-zewnetrzne-interfejsy","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/","title":{"rendered":"Wprowadzenie: Zewn\u0119trzne interfejsy"},"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\/wprowadzenie-zewnetrzne-interfejsy\/#Klient_i_serwer\" >Klient i serwer<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Jakosc_systemow_oprogramowania\" >Jako\u015b\u0107 system\u00f3w oprogramowania<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Korzystanie_z_infrastruktury\" >Korzystanie z infrastruktury<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Siec\" >Sie\u0107<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Protokol\" >Protok\u00f3\u0142<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Zapytania\" >Zapytania<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><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\/wprowadzenie-zewnetrzne-interfejsy\/#Liczba_klientow\" >Liczba klient\u00f3w<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Czestotliwosc_zapytan\" >Cz\u0119stotliwo\u015b\u0107 zapyta\u0144<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Oczekiwany_czas_odpowiedzi\" >Oczekiwany czas odpowiedzi<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Objetosc_danych\" >Obj\u0119to\u015b\u0107 danych<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Format_danych\" >Format danych<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Dostep_do_odczytu_lub_zapisu\" >Dost\u0119p do odczytu lub zapisu<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Polaczenie_synchroniczne_lub_asynchroniczne\" >Po\u0142\u0105czenie synchroniczne lub asynchroniczne<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Aktywne_polaczenie_lub_polling\" >Aktywne po\u0142\u0105czenie lub polling<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Polaczenie_bezstanowe_lub_stanowe\" >Po\u0142\u0105czenie bezstanowe lub stanowe<\/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-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Technologie_interfejsow\" >Technologie interfejs\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Pliki\" >Pliki<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#System_plikow_serwera_aplikacji\" >System plik\u00f3w serwera aplikacji<\/a><\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Knowledge_Store\" >Knowledge Store<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Bazy_danych\" >Bazy danych<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#SQL_dostep_bezposredni\" >SQL (dost\u0119p bezpo\u015bredni)<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Dostep_do_zewnetrznych_baz_danych\" >Dost\u0119p do zewn\u0119trznych baz danych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Dostep_do_baz_danych_Comarch_ERP_Enterprise\" >Dost\u0119p do baz danych Comarch ERP Enterprise<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#ODBC_Comarch_ERP_Enterprise\" >ODBC Comarch ERP Enterprise<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Persystencja_Comarch_ERP_Enterprise\" >Persystencja Comarch ERP Enterprise<\/a><\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Laczenie_zdalne\" >\u0141\u0105czenie zdalne<\/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\/wprowadzenie-zewnetrzne-interfejsy\/#CORBA\" >CORBA<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Comarch_ERP_Enterprise_jako_serwer_CORBA\" >Comarch ERP Enterprise jako serwer CORBA<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Comarch_ERP_Enterprise_jako_klient_CORBA\" >Comarch ERP Enterprise jako klient CORBA<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Web_service\" >Web service<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Comarch_ERP_Enterprise_jako_serwer_web_serviceowy\" >Comarch ERP Enterprise jako serwer web service&#8217;owy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Comarch_ERP_Enterprise_jako_klient_web_serviceowy\" >Comarch ERP Enterprise jako klient web service&#8217;owy<\/a><\/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\/wprowadzenie-zewnetrzne-interfejsy\/#Protokoly_macierzyste_navite_protocols\" >Protoko\u0142y macierzyste (navite protocols)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Polaczenie_roznych_technologii\" >Po\u0142\u0105czenie r\u00f3\u017cnych technologii<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Kwestie_zwiazane_z_wydajnoscia\" >Kwestie zwi\u0105zane z wydajno\u015bci\u0105<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/wprowadzenie-zewnetrzne-interfejsy\/#Ochrona_przed_waskimi_gardlami_zasobow\" >Ochrona przed w\u0105skimi gard\u0142ami zasob\u00f3w<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>Du\u017ce systemy oprogramowania sk\u0142adaj\u0105 si\u0119 z r\u00f3\u017cnych komponent\u00f3w. S\u0142u\u017cy to mi\u0119dzy innymi zmniejszeniu z\u0142o\u017cono\u015bci poszczeg\u00f3lnych komponent\u00f3w, roz\u0142o\u017ceniu obci\u0105\u017cenia lub ukierunkowanemu wykorzystaniu ograniczonych zasob\u00f3w oraz zapewnieniu mo\u017cliwo\u015bci rozbudowy. Wymaganiem cz\u0119sto pojawiaj\u0105cym si\u0119 w kontek\u015bcie rozszerzalno\u015bci jest integracja istniej\u0105cego systemu oprogramowania z nowym komponentem lub nawet innym systemem. Pytania, pojawiaj\u0105ce si\u0119 w tym zakresie, s\u0105 w du\u017cej mierze niezale\u017cne od konkretnego systemu oprogramowania, wybranej platformy lub j\u0119zyka programowania. W konkretnym scenariuszu integracji konieczne jest r\u00f3wnie\u017c wybranie technologii i architektury interfejsu, kt\u00f3re s\u0105 odpowiednie dla danych warunk\u00f3w og\u00f3lnych.<\/p>\n<p>W pierwszej cz\u0119\u015bci dokumentu wymieniono r\u00f3\u017cne aspekty, odgrywaj\u0105ce rol\u0119 w integracji system\u00f3w oprogramowania, a tak\u017ce opisano ich wp\u0142yw na czynniki takie jak wydajno\u015b\u0107, czas reakcji, zu\u017cycie zasob\u00f3w itp. Druga cz\u0119\u015b\u0107 opisuje konkretne mo\u017cliwo\u015bci integracji systemu oprogramowania, ze szczeg\u00f3lnym uwzgl\u0119dnieniem specjalnych cech w przypadku integracji z Comarch ERP Enterprise.<\/p>\n<p>Nale\u017cy mie\u0107 na uwadze, \u017ce nie ma jednej technologii interfejsu, kt\u00f3ra spe\u0142nia\u0142aby wszystkie wymagania w r\u00f3wnym stopniu. W\u0142a\u015bciwy wyb\u00f3r zale\u017cy od konkretnego scenariusza oraz og\u00f3lnych warunk\u00f3w. Najlepszym rozwi\u0105zaniem mo\u017ce by\u0107 zar\u00f3wno wymiana pliku w systemie danych, jak r\u00f3wnie\u017c wywo\u0142anie us\u0142ugi sieciowej przez Internet.<\/p>\n<p>Kwestie zwi\u0105zane z tre\u015bci\u0105 integracji, czyli to, jakie us\u0142ugi, struktury danych i dane musi oferowa\u0107 interfejs, nie s\u0105 cz\u0119\u015bci\u0105 tego dokumentu i nie maj\u0105 na nie wp\u0142ywu.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Artyku\u0142 skierowany jest do os\u00f3b posiadaj\u0105cych wiedz\u0119 programistyczn\u0105 oraz os\u00f3b decyzyjnych.<\/div><\/section>\n<h3 id=\"klient-i-serwer\" ><span class=\"ez-toc-section\" id=\"Klient_i_serwer\"><\/span>Klient i serwer<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Gdy procesy w systemach oprogramowania odbywaj\u0105 si\u0119 w spos\u00f3b rozproszony, jeden komponent przyjmuje rol\u0119 klienta, wysy\u0142aj\u0105cego zapytania, natomiast inny komponent przyjmuje rol\u0119 serwera, kt\u00f3ry na zapytania odpowiada. Mi\u0119dzy klientem a serwerem istnieje sie\u0107, kt\u00f3ra przesy\u0142a zapytania z okre\u015blonym protoko\u0142em i kodowaniem. W niekt\u00f3rych przypadkach role klienta i serwera mog\u0105 si\u0119 zmienia\u0107 w trakcie komunikacji lub w miar\u0119 up\u0142ywu czasu. Przyk\u0142adowo Comarch ERP Enterprise Application Server jest serwerem dla klienta przegl\u0105darki, ale sam jest r\u00f3wnie\u017c klientem serwera bazy danych. W dalszej cz\u0119\u015bci dokumentu komponent wysy\u0142aj\u0105cy zapytanie zawsze jest nazywany klientem.<\/p>\n<p>Poniewa\u017c serwer zazwyczaj musi by\u0107 w stanie obs\u0142u\u017cy\u0107 wi\u0119cej ni\u017c jednego klienta w tym samym czasie, potrzebuje zarz\u0105dzania zalogowanymi klientami i, w razie potrzeby, kilku jednostek wykonawczych do odpowiadania na przychodz\u0105ce zapytania.<\/p>\n<h3 id=\"jakosc-systemow-oprogramowania\" ><span class=\"ez-toc-section\" id=\"Jakosc_systemow_oprogramowania\"><\/span>Jako\u015b\u0107 system\u00f3w oprogramowania<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Podczas rozszerzania systemu oprogramowania nale\u017cy zadba\u0107 o to, aby nie tylko samo rozszerzenie mia\u0142o odpowiedni\u0105 jako\u015b\u0107, lecz tak\u017ce, aby wp\u0142yw na istniej\u0105cy system oprogramowania nie pogorszy\u0142 jego jako\u015bci. Podczas implementacji klienta i serwera nale\u017cy wzi\u0105\u0107 pod uwag\u0119 mi\u0119dzy innymi nast\u0119puj\u0105ce cechy jako\u015bciowe<\/p>\n<ul>\n<li><strong>Przepustowo\u015b\u0107 <\/strong>\u2013 praca wi\u0119kszo\u015bci system\u00f3w oprogramowania opiera si\u0119 na transakcjach. Przepustowo\u015b\u0107 opisuje liczb\u0119 transakcji w danym czasie.<\/li>\n<li><strong>Czas odpowiedzi<\/strong> \u2013 zw\u0142aszcza w systemach interaktywnych, w kt\u00f3rych u\u017cytkownicy oczekuj\u0105 bezpo\u015brednich odpowiedzi na swoje dane, czas ten nie powinien przekracza\u0107 pewnego poziomu (oko\u0142o 0,5-2 sekund). Nale\u017cy zauwa\u017cy\u0107, \u017ce wysoka przepustowo\u015b\u0107 nie jest r\u00f3wnoznaczna z niskim czasem reakcji i odwrotnie.<\/li>\n<li><strong>Zu\u017cycie zasob\u00f3w<\/strong> \u2013 zasobami mog\u0105 by\u0107 komputery, pami\u0119\u0107 g\u0142\u00f3wna, pojemno\u015b\u0107 dysku twardego, karty sieciowe, po\u0142\u0105czenia sieciowe, procesory, w\u0105tki. Ilo\u015b\u0107 zasob\u00f3w w systemie oprogramowania jest ograniczona. Aby m\u00f3c przetworzy\u0107 jak najwi\u0119cej zapyta\u0144 tak szybko, jak to mo\u017cliwe, zapytanie powinno zu\u017cywa\u0107 jak najmniej zasob\u00f3w, natomiast same zasoby powinny zosta\u0107 zwolnione tak szybko, jak to mo\u017cliwe. Wsp\u00f3\u0142dzielone zasoby musz\u0105 by\u0107 chronione przez mechanizmy blokuj\u0105ce. Mo\u017ce to mie\u0107 wp\u0142yw na przepustowo\u015b\u0107.<\/li>\n<li><strong>Skalowalno\u015b\u0107<\/strong> \u2013 system powinien rosn\u0105\u0107 wraz z rosn\u0105c\u0105 liczb\u0105 klient\u00f3w, a co za tym idzie, zwi\u0119ksza\u0107 przepustowo\u015b\u0107 bez wyd\u0142u\u017cania czasu odpowiedzi.<br \/>\nOsi\u0105ga si\u0119 to w szczeg\u00f3lno\u015bci poprzez zminimalizowanie komunikacji sieciowej, wykorzystuj\u0105c caching (pami\u0119\u0107 podr\u0119czna bazy danych, pami\u0119\u0107 podr\u0119czna serwera, pami\u0119\u0107 podr\u0119czna klienta), a tak\u017ce wykonuj\u0105c zadania w ramach jednego zapytania r\u00f3wnolegle.<\/li>\n<li><strong>Przeno\u015bno\u015b\u0107<\/strong> \u2013 aby w razie potrzeby m\u00f3c korzysta\u0107 z innego, bardziej wydajnego sprz\u0119tu, rozszerzenie powinno by\u0107 przeno\u015bne. Wp\u0142yw na to maj\u0105 nast\u0119puj\u0105ce czynniki:\n<ul>\n<li>j\u0119zyk programowania<\/li>\n<li>platforma systemu operacyjnego, okre\u015bla ona na przyk\u0142ad sk\u0142adni\u0119 specyfikacji \u015bcie\u017cek<\/li>\n<li>u\u017cywany DBMS, poniewa\u017c pomimo standaryzacji SQL, r\u00f3\u017cne DBMS u\u017cywaj\u0105 r\u00f3\u017cnej sk\u0142adni i oferuj\u0105 r\u00f3\u017cne typy danych.<\/li>\n<li>protok\u00f3\u0142 komunikacyjny pomi\u0119dzy klientem a serwerem<\/li>\n<\/ul>\n<\/li>\n<li><strong>Dost\u0119pno\u015b\u0107<\/strong> \u2013 je\u015bli rozszerzenie ma by\u0107 instalowane kilka razy, nale\u017cy zadba\u0107 o to, aby poprawki i nowo\u015bci, pojawiaj\u0105ce si\u0119 podczas konserwacji i dalszego rozwoju, mog\u0142y by\u0107 przekazywane w kontrolowany spos\u00f3b i instalowane przy jak najmniejszym przestoju.<\/li>\n<li><strong>Bezpiecze\u0144stwo<\/strong> \u2013 aby zapewni\u0107 dost\u0119pno\u015b\u0107 systemu i chroni\u0107 zawarte w nim dane przed dost\u0119pem os\u00f3b nieupowa\u017cnionych, musi on by\u0107 w stanie chroni\u0107 si\u0119 przed nieautoryzowanymi zapytaniami. W tym celu istniej\u0105 r\u00f3\u017cne mechanizmy uwierzytelniania i autoryzacji. Rozszerzenia nie powinny obchodzi\u0107 mechanizm\u00f3w bezpiecze\u0144stwa istniej\u0105cego systemu oprogramowania.<\/li>\n<li><strong>Testowalno\u015b\u0107<\/strong> \u2013 rozszerzenia systemu powinny by\u0107 tak \u0142atwe do przetestowania, jak to tylko mo\u017cliwe, tak aby sprawdzi\u0107 poprawno\u015b\u0107 dzia\u0142ania rozszerze\u0144 i m\u00f3c bada\u0107 problemy.<\/li>\n<\/ul>\n<h3 id=\"korzystanie-z-infrastruktury\" ><span class=\"ez-toc-section\" id=\"Korzystanie_z_infrastruktury\"><\/span>Korzystanie z infrastruktury<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Gdy tworzone jest rozszerzenie systemu oprogramowania, musi ono zosta\u0107 odpowiednio zintegrowane z infrastruktur\u0105 istniej\u0105cego systemu. Oznacza to, \u017ce istniej\u0105ce us\u0142ugi, takie jak caching, blokowanie, uprawnienia itp. powinny by\u0107 wykorzystywane w celu oszcz\u0119dzania zasob\u00f3w i minimalizowania wysi\u0142ku administracyjnego. Jednocze\u015bnie w miejscach, w kt\u00f3rych us\u0142ugi te nie s\u0105 celowo lub obowi\u0105zkowo wykorzystywane, nie powstaj\u0105 \u017cadne konflikty ani b\u0142\u0119dy.<\/p>\n<p>Przyk\u0142ady us\u0142ug, kt\u00f3re nale\u017cy uwzgl\u0119dni\u0107:<\/p>\n<ul>\n<li>pami\u0119\u0107 podr\u0119czna przegl\u0105darki<\/li>\n<li>wsp\u00f3\u0142dzielona pami\u0119\u0107 podr\u0119czna na Comarch ERP Enterprise Application Server<\/li>\n<li>pami\u0119\u0107 podr\u0119czna stron na serwerze bazy danych<\/li>\n<\/ul>\n<p>Blokady:<\/p>\n<ul>\n<li>semafory w Javie (u\u017cycie synchronized)<\/li>\n<li>blokady obiekt\u00f3w biznesowych i blokady logiczne w Comarch ERP Enterprise<\/li>\n<li>blokady tabel, stron i wierszy w bazie danych<\/li>\n<\/ul>\n<p>Uprawnienia:<\/p>\n<ul>\n<li>certyfikaty klient\u00f3w<\/li>\n<li>uprawnienia i role uprawnie\u0144 Comarch ERP Enterprise<\/li>\n<li>uprawnienia bazy danych dotycz\u0105ce obiekt\u00f3w i u\u017cytkownik\u00f3w DBMS<\/li>\n<\/ul>\n<h3 id=\"siec\" ><span class=\"ez-toc-section\" id=\"Siec\"><\/span>Sie\u0107<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Podczas po\u0142\u0105czenia ze zdalnym interfejsem, ka\u017cde zapytanie od klienta jest przesy\u0142ane przez sie\u0107. Wraz ze wzrostem liczby klient\u00f3w ro\u015bnie wp\u0142yw sieci. Nast\u0119puj\u0105ce w\u0142a\u015bciwo\u015bci s\u0105 charakterystyczne dla sieci:<\/p>\n<ul>\n<li><strong>wielko\u015b\u0107 blok\u00f3w<\/strong> \u2013 sieci domy\u015blnie wysy\u0142aj\u0105 dane w pojedynczych blokach. W przypadku TCI\/IP bloki te nazywane s\u0105 pakietami i mog\u0105 przenosi\u0107 dane u\u017cytkownika do standardowego rozmiaru 4 kilobajt\u00f3w.<\/li>\n<li><strong>przepustowo\u015b\u0107 sieci<\/strong> \u2013 ilo\u015b\u0107 informacji, kt\u00f3ra mo\u017ce by\u0107 przesy\u0142ana jednocze\u015bnie przez jedno pasmo<\/li>\n<li><strong>latencja<\/strong> \u2013 infrastruktura sieciowa ISO-OSI definiuje r\u00f3\u017cne warstwy transportowe ISO-OSI. Ka\u017cde przej\u015bcie do innej warstwy i ka\u017cde przekazanie zapytanie, np. przekazanie pakietu TCI\/IP z jednego routera do nast\u0119pnego routera, poch\u0142ania czas.<\/li>\n<li><strong>t<\/strong><strong>opologia<\/strong> \u2013 liczba w\u0119z\u0142\u00f3w i ich wzajemne po\u0142\u0105czenia wp\u0142ywaj\u0105 na \u015bcie\u017ck\u0119 pakietu od \u017ar\u00f3d\u0142a do miejsca docelowego<\/li>\n<\/ul>\n<p>Ma to nast\u0119puj\u0105ce konsekwencje:<\/p>\n<ol>\n<li>Na ka\u017cde zapytanie mo\u017cna odpowiedzie\u0107 tak szybko, jak pozwala na to latencja. Nie mo\u017cna tego zmieni\u0107, niezale\u017cnie od wielko\u015bci przepustowo\u015bci.<\/li>\n<li>Czas transmisji danych, kt\u00f3re mieszcz\u0105 si\u0119 w \u0142adunku pojedynczego pakietu, jest okre\u015blany praktycznie wy\u0142\u0105cznie przez latencj\u0119. Dlatego te\u017c przesy\u0142anie danych w blokach mniejszych ni\u017c ten rozmiar przynosi efekt przeciwny do zamierzonego.<\/li>\n<li>Zwi\u0119kszenie przepustowo\u015bci pomaga zminimalizowa\u0107 czas transmisji du\u017cych ilo\u015bci powi\u0105zanych ze sob\u0105 danych. Je\u015bli przesy\u0142ane s\u0105 du\u017ce ilo\u015bci danych, powinny by\u0107 one przesy\u0142ane w blokach, tak aby wykorzysta\u0107 przepustowo\u015b\u0107.<\/li>\n<\/ol>\n<h3 id=\"protokol\" ><span class=\"ez-toc-section\" id=\"Protokol\"><\/span>Protok\u00f3\u0142<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Aby komunikowa\u0107 si\u0119 przez sie\u0107, klient i serwer u\u017cywaj\u0105 protoko\u0142u. Okre\u015bla on spos\u00f3b nawi\u0105zywania po\u0142\u0105czenia, wysy\u0142ania zapyta\u0144, odbierania odpowiedzi i ko\u0144czenia po\u0142\u0105czenia. Co wi\u0119cej, protok\u00f3\u0142 definiuje r\u00f3wnie\u017c, jakie stany b\u0142\u0119d\u00f3w mog\u0105 wyst\u0105pi\u0107 i jak nale\u017cy je obs\u0142ugiwa\u0107. Nast\u0119puj\u0105ce w\u0142a\u015bciwo\u015bci protoko\u0142u s\u0105 szczeg\u00f3lnie istotne:<\/p>\n<ul>\n<li>Protok\u00f3\u0142 stanowy lub bezstanowy<\/li>\n<\/ul>\n<p>Czy serwer przechowuje jeden stan dla ka\u017cdego klienta, czy te\u017c ka\u017cde zapytanie jest interpretowane jako nowe zapytanie od dowolnego klienta?<\/p>\n<ul>\n<li>Protok\u00f3\u0142 szyfrowany lub nieszyfrowany<\/li>\n<\/ul>\n<p>Czy klient i serwer tworz\u0105 szyfrowanie po\u0142\u0105czenia, czy te\u017c dane s\u0105 przesy\u0142ane bez szyfrowania?<\/p>\n<p>Protoko\u0142y stanowe znaj\u0105 zasad\u0119 sta\u0142ego po\u0142\u0105czenia, podobnego do po\u0142\u0105czenia telefonicznego mi\u0119dzy dwoma uczestnikami. Po\u0142\u0105czenie nawi\u0105zywane jest raz, identyfikacja uczestnik\u00f3w jest r\u00f3wnie\u017c przeprowadzana tylko raz, a wszystkie dalsze zapytania przesy\u0142aj\u0105 tylko dane u\u017cytkownika. Kosztowne dzia\u0142ania s\u0105 zatem wykonywane tylko raz. Kluczowym protoko\u0142em nale\u017c\u0105cym do tej kategorii jest protok\u00f3\u0142, z kt\u00f3rym Object Request Broker komunikuj\u0105 si\u0119 za po\u015brednictwem protoko\u0142u TCP\/IP w przypadku CORBA.<\/p>\n<p>Najbardziej znanym protoko\u0142em bezstanowym jest HTTP (Hypertext Transfer Protocol). W tym protokole zapytanie z parametrami jest wysy\u0142ane na adres, na kt\u00f3ry serwer odpowiada, wysy\u0142aj\u0105c stron\u0119 HTML. Poniewa\u017c serwer nie zna klienta ani u\u017cytkownika klienta, nie mo\u017ce rozpozna\u0107 nast\u0119puj\u0105cych po sobie zapyta\u0144 jako ci\u0105g\u0142ych. Nie stanowi to problemu w przypadku prostych stron internetowych, ale nie jest wystarczaj\u0105ce do realizacji z\u0142o\u017conych proces\u00f3w.<\/p>\n<p>Procesy takie jak bankowo\u015b\u0107 internetowa, obs\u0142uga Comarch ERP Enterprise lub eksport du\u017cych ilo\u015bci danych wymagaj\u0105 przechowywania stan\u00f3w dla ka\u017cdego klienta. Je\u015bli z przyczyn technicznych u\u017cycie protoko\u0142u stanowego nie jest mo\u017cliwe, nale\u017cy zasymulowa\u0107 istnienie takiego protoko\u0142u. Wymaga to wi\u0119cej logiki zar\u00f3wno po stronie klienta, jak i serwera. Je\u015bli klient nie ma tej logiki i nie mo\u017cna jej rozszerzy\u0107, nale\u017cy to zrekompensowa\u0107, na przyk\u0142ad poprzez ponowne uwierzytelnienie przy ka\u017cdym zapytaniu.<\/p>\n<p>Pod warunkiem, \u017ce klient posiada odpowiedni\u0105 logik\u0119 (np. pliki cookie w przypadku klienta przegl\u0105darki internetowej), w bardzo prostych przypadkach stan mo\u017ce by\u0107 przechowywany na samym kliencie i wysy\u0142any jako parametr przy ka\u017cdym zapytaniu. W tym przypadku serwer jest bezstanowy, a zasoby s\u0105 przechowywane tylko na czas przetwarzania zapytania. W bardziej z\u0142o\u017conych przypadkach stan musi zosta\u0107 zapisany na serwerze. W takim przypadku klient zwykle przechowuje i wysy\u0142a tylko \u201eidentyfikator sesji&#8221;, kt\u00f3ry zosta\u0142 przypisany przez serwer po wst\u0119pnym uwierzytelnieniu.<\/p>\n<h3 id=\"zapytania\" ><span class=\"ez-toc-section\" id=\"Zapytania\"><\/span>Zapytania<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Zapytania od klient\u00f3w mog\u0105 by\u0107 opisane przez nast\u0119puj\u0105ce w\u0142a\u015bciwo\u015bci<\/p>\n<ul>\n<li>Liczba klient\u00f3w<\/li>\n<\/ul>\n<p>Ilu klient\u00f3w wysy\u0142a zapytania r\u00f3wnolegle?<\/p>\n<ul>\n<li>Cz\u0119stotliwo\u015b\u0107 zapyta\u0144<\/li>\n<\/ul>\n<p>Ile zapyta\u0144 sk\u0142ada klient w danym czasie?<\/p>\n<ul>\n<li>Oczekiwany czas odpowiedzi<\/li>\n<\/ul>\n<p>Czy odpowied\u017a musi by\u0107 szybko dost\u0119pna?<\/p>\n<ul>\n<li>Obj\u0119to\u015b\u0107 danych<\/li>\n<\/ul>\n<p>Jaka ilo\u015b\u0107 danych jest wysy\u0142ana wraz z zapytaniem i jaka ilo\u015b\u0107 danych jest oczekiwana w odpowiedzi?<\/p>\n<ul>\n<li>Format danych<\/li>\n<\/ul>\n<p>Czy dane s\u0105 zakodowane binarnie czy tekstowo?<\/p>\n<p>Czy struktura danych jest zastrze\u017cona czy ustandaryzowana? Czy dane s\u0105 szyfrowane w samym zapytaniu?<\/p>\n<ul>\n<li>Dost\u0119p do odczytu lub zapisu<\/li>\n<\/ul>\n<p>Czy klient chce tylko zapyta\u0107 o dane, czy te\u017c chce je r\u00f3wnie\u017c zmieni\u0107? Jak aktualne musz\u0105 by\u0107 odczytane dane?<\/p>\n<ul>\n<li>Po\u0142\u0105czenie synchroniczne lub asynchroniczne<\/li>\n<\/ul>\n<p>Jakiej cz\u0119\u015bci odpowiedzi klient oczekuje natychmiast?<\/p>\n<ul>\n<li>Aktywne po\u0142\u0105czenie lub polling<\/li>\n<\/ul>\n<p>Czy klient w og\u00f3le wysy\u0142a okre\u015blone zapytanie, czy te\u017c okresowo sprawdza obecno\u015b\u0107 okre\u015blonych danych w okre\u015blonej lokalizacji?<\/p>\n<ul>\n<li>Po\u0142\u0105czenie bezstanowe lub stanowe<\/li>\n<\/ul>\n<p>Czy serwer utrzymuje stan przez wiele zapyta\u0144?<\/p>\n<p>Przed zaprojektowaniem lub wyborem interfejsu nale\u017cy ustali\u0107 wszystkie te kwestie, poniewa\u017c maj\u0105 one znacz\u0105cy wp\u0142yw na projekt. Poni\u017cej wymieniono konsekwencje, jakie poci\u0105gaj\u0105 za sob\u0105 poszczeg\u00f3lne w\u0142a\u015bciwo\u015bci.<\/p>\n<h5 id=\"liczba-klientow\" ><span class=\"ez-toc-section\" id=\"Liczba_klientow\"><\/span>Liczba klient\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W przypadku serwer\u00f3w stanowych ka\u017cdy zalogowany klient oznacza zarezerwowan\u0105 ilo\u015b\u0107 pami\u0119ci g\u0142\u00f3wnej na serwerze na czas logowania.<\/p>\n<p>Pami\u0119\u0107 ta jest rzadko wymagana i jest przechowywana przez stosunkowo d\u0142ugi czas. W przypadku serwer\u00f3w bezstanowych ilo\u015b\u0107 pami\u0119ci na ka\u017cde zapytanie jest dominuj\u0105ca i zwykle wy\u017csza ni\u017c w przypadku zapytania do serwera stanowego. Je\u015bli nie mo\u017cna podzieli\u0107 transmisji odpowiedzi do klienta na kilka po\u0142\u0105cze\u0144,\u00a0tymczasowo przydzielane s\u0105 potencjalnie bardzo du\u017ce ilo\u015bci pami\u0119ci g\u0142\u00f3wnej.<\/p>\n<h5 id=\"czestotliwosc-zapytan\" ><span class=\"ez-toc-section\" id=\"Czestotliwosc_zapytan\"><\/span>Cz\u0119stotliwo\u015b\u0107 zapyta\u0144<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli oczekiwana jest du\u017ca liczba zapyta\u0144 w danym czasie, a logika serwera na to pozwala, kilka jednostek wykonawczych na serwerze powinno przetwarza\u0107 zapytania klient\u00f3w r\u00f3wnolegle, aby osi\u0105gn\u0105\u0107 niezb\u0119dn\u0105 przepustowo\u015b\u0107.<\/p>\n<h5 id=\"oczekiwany-czas-odpowiedzi\" ><span class=\"ez-toc-section\" id=\"Oczekiwany_czas_odpowiedzi\"><\/span>Oczekiwany czas odpowiedzi<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Aby latencja sieci nie by\u0142a zbyt du\u017cym problemem, zapytania od klient\u00f3w powinny by\u0107 zawsze \u0142\u0105czone (tj. w bloki). Tylko w ten spos\u00f3b mo\u017cna wykorzysta\u0107 dost\u0119pn\u0105 przepustowo\u015b\u0107 sieci.<\/p>\n<h5 id=\"objetosc-danych\" ><span class=\"ez-toc-section\" id=\"Objetosc_danych\"><\/span>Obj\u0119to\u015b\u0107 danych<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W przypadku zapytania nale\u017cy wys\u0142a\u0107 i zapyta\u0107 tylko o te dane, kt\u00f3re s\u0105 faktycznie potrzebne. Na przyk\u0142ad w przypadku dost\u0119pu SQL do bazy danych ilo\u015b\u0107 kolumn i wierszy w wyniku powinna by\u0107 jak najmniejsza.<\/p>\n<h5 id=\"format-danych\" ><span class=\"ez-toc-section\" id=\"Format_danych\"><\/span>Format danych<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Korzystanie z binarnych format\u00f3w danych zmniejsza ilo\u015b\u0107 przesy\u0142anych danych i jest preferowane w przypadku transmisji danych o du\u017cej obj\u0119to\u015bci. Zakres, w jakim dane binarne mog\u0105 by\u0107 poprawnie interpretowane na r\u00f3\u017cnych platformach, zale\u017cy tak\u017ce od innych czynnik\u00f3w. Na przyk\u0142ad CORBA oferuje format binarny, kt\u00f3ry jest kompatybilny z r\u00f3\u017cnymi platformami i kt\u00f3ry jest w razie potrzeby konwertowany do specyfiki platformy (Byte Order: little lub big endian, kodowanie znak\u00f3w) przez warstw\u0119 po\u015bredni\u0105 ORB.<\/p>\n<p>Korzystanie z format\u00f3w tekstowych ma sens w przypadku niewielkich ilo\u015bci danych oraz gdy zaanga\u017cowani klienci i serwery u\u017cywaj\u0105 jedynie niewielkiej logiki lub bardzo r\u00f3\u017cnych technologii (np. serwer C++ i klient Perl). Zasadniczo korzystanie z format\u00f3w tekstowych oznacza zwi\u0119kszenie ilo\u015bci danych, kt\u00f3re maj\u0105 by\u0107 przesy\u0142ane przy tej samej ilo\u015bci danych u\u017cytkownika. W zale\u017cno\u015bci od formatu waha si\u0119 ona od 1,5-4 (kodowanie Base64, kodowanie hex) do 10-15 (XML ze znacznikami pocz\u0105tkowymi, ko\u0144cowymi i meta). Zwi\u0119kszona obj\u0119to\u015b\u0107 danych mo\u017ce by\u0107 cz\u0119\u015bciowo skompensowana przez kompresj\u0119. Nale\u017cy jednak rozwa\u017cy\u0107, czy wynikaj\u0105cy z tego zwi\u0119kszony wysi\u0142ek obliczeniowy i sprz\u0119towy jest uzasadniony.<\/p>\n<p>Korzystanie z zastrze\u017conych struktur danych mo\u017ce mie\u0107 sens w przypadku system\u00f3w zamkni\u0119tych, w kt\u00f3rych klient i serwer pochodz\u0105 z tego samego \u017ar\u00f3d\u0142a. W przypadku zmian w wymaganiach mo\u017cliwa jest zatem szybsza i bardziej odpowiednia reakcja. W przypadku komunikacji wykraczaj\u0105cej poza granice w\u0142asnego systemu zasadniczo w\u0142a\u015bciwe jest korzystanie ze standardowych format\u00f3w (np. EDI).<\/p>\n<p>Podczas komunikacji poza granicami w\u0142asnego systemu szyfrowanie danych jest istotne, je\u015bli maj\u0105 one by\u0107 przesy\u0142ane niezabezpieczonymi kana\u0142ami, np. przez Internet za po\u015brednictwem protoko\u0142u HTTP lub jako wiadomo\u015b\u0107 e-mail. Zastosowane tutaj procesy wymagaj\u0105 dodatkowej logiki i metadanych do szyfrowania na kliencie i serwerze.<\/p>\n<h5 id=\"dostep-do-odczytu-lub-zapisu\" ><span class=\"ez-toc-section\" id=\"Dostep_do_odczytu_lub_zapisu\"><\/span>Dost\u0119p do odczytu lub zapisu<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Dost\u0119p do odczytu z regu\u0142y wymaga mniej zasob\u00f3w ni\u017c dost\u0119p do zapisu. Je\u015bli wynik odczytu nie musi by\u0107 w 100% aktualny, mo\u017cna odst\u0105pi\u0107 od wymogu blokady i zwr\u00f3ci\u0107 dane z pami\u0119ci podr\u0119cznej.<\/p>\n<h5 id=\"polaczenie-synchroniczne-lub-asynchroniczne\" ><span class=\"ez-toc-section\" id=\"Polaczenie_synchroniczne_lub_asynchroniczne\"><\/span>Po\u0142\u0105czenie synchroniczne lub asynchroniczne<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W przypadku po\u0142\u0105czenia synchronicznego klient oczekuje na natychmiastow\u0105 odpowied\u017a od serwera. Jest to standardowy przypadek, poniewa\u017c nale\u017cy uwzgl\u0119dni\u0107 potwierdzenie, \u017ce zapytanie zosta\u0142o przyj\u0119te przez serwer. Je\u015bli rzeczywista odpowied\u017a nie jest potrzebna lub jest potrzebna w p\u00f3\u017aniejszym czasie, serwer ma mo\u017cliwo\u015b\u0107 oczekiwania na dost\u0119pno\u015b\u0107 zasob\u00f3w.<\/p>\n<h5 id=\"aktywne-polaczenie-lub-polling\" ><span class=\"ez-toc-section\" id=\"Aktywne_polaczenie_lub_polling\"><\/span>Aktywne po\u0142\u0105czenie lub polling<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Gdy serwer jest aktywnie wywo\u0142ywany przez klienta, klient i serwer musz\u0105 komunikowa\u0107 si\u0119 synchronicznie przynajmniej przez cz\u0119\u015b\u0107 czasu. Zalet\u0105 jest to, \u017ce serwer dostarcza dane tylko wtedy, gdy klient tego oczekuje. W przypadku pollingu klient okresowo sprawdza, czy dane, np. w postaci pliku, s\u0105 dost\u0119pne w lokalizacji, do kt\u00f3rej obie strony mog\u0105 uzyska\u0107 dost\u0119p bez wcze\u015bniejszego zapytania do serwera. Polling jest odpowiedni do przesy\u0142ania du\u017cych ilo\u015bci danych, kt\u00f3re mog\u0105 by\u0107 dostarczane przez serwer bez dodatkowych parametr\u00f3w wej\u015bciowych. Informacje zwrotne o b\u0142\u0119dach na kliencie przesy\u0142ane do serwera zwykle nie maj\u0105 miejsca. Istnieje r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 po\u0142\u0105czenia wariant\u00f3w <em>aktywne po\u0142\u0105czenie<\/em> i <em>polling<\/em>.<\/p>\n<p>W tym przypadku klient najpierw wysy\u0142a zapytanie do serwera, a dopiero potem rozpoczyna polling.<\/p>\n<h5 id=\"polaczenie-bezstanowe-lub-stanowe\" ><span class=\"ez-toc-section\" id=\"Polaczenie_bezstanowe_lub_stanowe\"><\/span>Po\u0142\u0105czenie bezstanowe lub stanowe<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Podczas korzystania z po\u0142\u0105cze\u0144 bezstanowych uwierzytelnianie musi by\u0107 wykonywane ponownie dla ka\u017cdego zapytania, co ma negatywny wp\u0142yw, je\u015bli ich cz\u0119stotliwo\u015b\u0107 jest wysoka. Co wi\u0119cej, w przypadku po\u0142\u0105cze\u0144 bezstanowych z\u0142o\u017cone procesy musz\u0105 by\u0107 zawsze spakowane w jedno zapytanie, a ca\u0142y wynik wys\u0142any w jednej odpowiedzi. Prowadzi to do interfejs\u00f3w z\u0142o\u017conych z niewielu modu\u0142\u00f3w. Poniewa\u017c zapytania i odpowiedzi zwykle musz\u0105 by\u0107 w ca\u0142o\u015bci przechowywane w pami\u0119ci g\u0142\u00f3wnej, przynajmniej tymczasowo, w celu przetworzenia zapytania, ten typ po\u0142\u0105czenia nie nadaje si\u0119 r\u00f3wnie\u017c do przesy\u0142ania danych masowych. W przypadku po\u0142\u0105cze\u0144 stanowych overhead uwierzytelniania wyst\u0119puje tylko raz, z\u0142o\u017cone po\u0142\u0105czenia mo\u017cna podzieli\u0107 na wielokrotnie wykorzystywane cz\u0119\u015bci, a przesy\u0142anie parametr\u00f3w wej\u015bciowych mo\u017ce odbywa\u0107 si\u0119 w kilku blokach.<\/p>\n<h3 id=\"technologie-interfejsow\" ><span class=\"ez-toc-section\" id=\"Technologie_interfejsow\"><\/span>Technologie interfejs\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>W tej sekcji przedstawiono technologie interfejs\u00f3w, kt\u00f3re mo\u017cna wykorzysta\u0107 do integracji system\u00f3w oprogramowania. Om\u00f3wiono r\u00f3wnie\u017c poziom wsparcia, jaki Comarch ERP Enterprise oferuje w tym zakresie w standardzie.<\/p>\n<p>Konkretne rozwi\u0105zanie problemu integracji b\u0119dzie zazwyczaj oparte na po\u0142\u0105czeniu kilku z tych technologii, jak pokazano w niekt\u00f3rych przyk\u0142adach.<\/p>\n<h3 id=\"pliki\" ><span class=\"ez-toc-section\" id=\"Pliki\"><\/span>Pliki<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Gdy dane s\u0105 przesy\u0142ane w formie plik\u00f3w, s\u0105 one udost\u0119pniane w centralnej lokalizacji, do kt\u00f3rej serwer ma dost\u0119p do zapisu, a klient przynajmniej do odczytu.<\/p>\n<p>Pliki s\u0105 r\u00f3wnie\u017c dobrze przystosowane do du\u017cych ilo\u015bci danych. Przyk\u0142adem wykorzystania plik\u00f3w do wymiany danych mi\u0119dzy r\u00f3\u017cnymi systemami jest BIS. Pozwala on na automatyczny import lub eksport danych.<\/p>\n<p>Jedn\u0105 z wad plik\u00f3w jest brak transakcji. To, kiedy plik staje si\u0119 widoczny lub dost\u0119pny dla innego procesu i kt\u00f3ry z nich jest odczytywany, zale\u017cy w du\u017cej mierze od systemu operacyjnego.<\/p>\n<p>Comarch ERP Enterprise obs\u0142uguje system plik\u00f3w serwera aplikacji i Knowledge Store.<\/p>\n<h4 id=\"system-plikow-serwera-aplikacji\" ><span class=\"ez-toc-section\" id=\"System_plikow_serwera_aplikacji\"><\/span>System plik\u00f3w serwera aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Comarch ERP Enterprise mo\u017ce uzyskiwa\u0107 dost\u0119p do systemu plik\u00f3w serwera aplikacji. W zale\u017cno\u015bci od konfiguracji systemu operacyjnego dost\u0119pny jest zar\u00f3wno lokalny system plik\u00f3w, jak i zdalne systemy plik\u00f3w (\u201edyski sieciowe&#8221;).<\/p>\n<p>Pliki s\u0105 wywo\u0142ywane przez ich \u015bcie\u017ck\u0119. Nale\u017cy zauwa\u017cy\u0107, \u017ce \u015bcie\u017cki plik\u00f3w zale\u017c\u0105 od komputera i jego systemu operacyjnego, a zatem mog\u0105 nie by\u0107 u\u017cywane na r\u00f3\u017cnych serwerach aplikacji. Jednym ze sposob\u00f3w na odzyskanie niezale\u017cno\u015bci jest u\u017cycie \u015bcie\u017cek plik\u00f3w odnosz\u0105cych si\u0119 do folderu \u201esemiramis\/usr&#8221;. \u015acie\u017cka serwera plik\u00f3w do folderu \u201esemiramis&#8221; mo\u017ce by\u0107 wywo\u0142ywana na ka\u017cdym serwerze aplikacji Comarch ERP Enterprise w odpowiedniej dla niego notacji<a href=\"#_ftn1\" name=\"_ftnref1\">[1]<\/a>. Odpowiednie zmienne (\u201e{semiramis}&#8221;) s\u0105 ju\u017c dost\u0119pne w tym celu w BIS, w danych wyj\u015bciowych dokument\u00f3w, jak r\u00f3wnie\u017c w reorganizacjach.<\/p>\n<h4 id=\"knowledge-store\" ><span class=\"ez-toc-section\" id=\"Knowledge_Store\"><\/span>Knowledge Store<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Knowledge Store zapewnia system plik\u00f3w obs\u0142ugiwanych przez baz\u0119 danych. \u015acie\u017cki plik\u00f3w s\u0105 wa\u017cne dla wszystkich serwer\u00f3w aplikacji i s\u0105 niezale\u017cne od systemu operacyjnego.<\/p>\n<p>Oprogramowanie zewn\u0119trzne mo\u017ce uzyska\u0107 dost\u0119p do Knowledge Store za po\u015brednictwem WebDAV przy u\u017cyciu protoko\u0142u https. Umo\u017cliwia to dost\u0119p bezpo\u015brednio z komputer\u00f3w klient\u00f3w, kt\u00f3re nie maj\u0105 dost\u0119pu do systemu plik\u00f3w serwera aplikacji. Poniewa\u017c WebDAV jest stosunkowo nowym standardem, ten rodzaj dost\u0119pu nie jest jeszcze oferowany przez wszystkie systemy operacyjne i aplikacje. Uwierzytelnianie odbywa si\u0119 za pomoc\u0105 certyfikatu lub has\u0142a.<\/p>\n<p>Dok\u0142adnie informacje mo\u017cna znale\u017a\u0107 w artykule Knowledge Store.<\/p>\n<h3 id=\"bazy-danych\" ><span class=\"ez-toc-section\" id=\"Bazy_danych\"><\/span>Bazy danych<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"sql-dostep-bezposredni\" ><span class=\"ez-toc-section\" id=\"SQL_dostep_bezposredni\"><\/span>SQL (dost\u0119p bezpo\u015bredni)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Bezpo\u015bredni dost\u0119p do baz danych jest mo\u017cliwy z poziomu j\u0119zyka Java, na przyk\u0142ad za po\u015brednictwem interfejsu JDBC, przy czym dla danej bazy danych musi by\u0107 u\u017cywany sterownik JDBC. Dost\u0119p do bazy danych mo\u017ce zale\u017ce\u0107 od systemu DBMS pomimo korzystania z JDBC.<\/p>\n<h5 id=\"dostep-do-zewnetrznych-baz-danych\" ><span class=\"ez-toc-section\" id=\"Dostep_do_zewnetrznych_baz_danych\"><\/span>Dost\u0119p do zewn\u0119trznych baz danych<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Dost\u0119p do zewn\u0119trznych baz danych mo\u017cna uzyska\u0107 z poziomu Comarch ERP Enterprise. W tym celu mo\u017cna na przyk\u0142ad u\u017cy\u0107 standardowego interfejsu JDBC JDK.<\/p>\n<h5 id=\"dostep-do-baz-danych-comarch-erp-enterprise\" ><span class=\"ez-toc-section\" id=\"Dostep_do_baz_danych_Comarch_ERP_Enterprise\"><\/span>Dost\u0119p do baz danych Comarch ERP Enterprise<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Z technicznego punktu widzenia mo\u017cliwy jest r\u00f3wnie\u017c bezpo\u015bredni dost\u0119p do baz danych Comarch ERP Enterprise. Nie jest to jednak zalecane z nast\u0119puj\u0105cych powod\u00f3w:<\/p>\n<ul>\n<li>Mapowanie Comarch ERP Enterprise Business Objects i odpowiednich typ\u00f3w danych jest specyficzne dla DBMS, a ich forma nie jest gwarantowana przez Comarch ERP Enterprise Software AG.<\/li>\n<li>Na poziomie DBMS istnieje techniczny model danych, w kt\u00f3rym identyfikatory GUID s\u0105 danymi binarnymi, a znaczniki czasu s\u0105 przechowywane w kompaktowym formacie, kt\u00f3rego \u017caden DBMS nie mo\u017ce bezpo\u015brednio oceni\u0107.<\/li>\n<li>Dost\u0119p do odczytu omija caching Comarch ERP Enterprise. Zmniejsza to szybko\u015b\u0107 dost\u0119p\u00f3w.<\/li>\n<li>Dost\u0119p do zapisu omija caching i locking Comarch ERP Enterprise. Powoduje to odczyt potencjalnie niesp\u00f3jnych danych.<\/li>\n<li>Nie s\u0105 przeprowadzane \u017cadne kontrole autoryzacji, z wyj\u0105tkiem \u015brodk\u00f3w DBMS.<\/li>\n<\/ul>\n<p>Zamiast tego nale\u017cy u\u017cy\u0107 Comarch ERP Enterprise ODBC lub Comarch ERP Enterprise Persistence Service.<\/p>\n<h4 id=\"odbc-comarch-erp-enterprise\" ><span class=\"ez-toc-section\" id=\"ODBC_Comarch_ERP_Enterprise\"><\/span>ODBC Comarch ERP Enterprise<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>ODBC Comarch ERP Enterprise umo\u017cliwia dost\u0119p do baz danych Comarch ERP Enterprise poprzez zintegrowany z Comarch ERP Enterprise interfejs ODBC, kt\u00f3ry mo\u017ce by\u0107 wykorzystywany przez oprogramowanie zewn\u0119trzne. Dost\u0119p jest niezale\u017cny od DBMS baz danych Comarch ERP Enterprise.<\/p>\n<p>W przypadku ODBC Comarch ERP Enterprise nale\u017cy zauwa\u017cy\u0107, \u017ce mo\u017cliwy jest jedynie dost\u0119p do baz danych w trybie odczytu. Z technicznego punktu widzenia dost\u0119p wymaga u\u017cycia protoko\u0142u HTTPS.<\/p>\n<p>ODBC Comarch ERP Enterprise udost\u0119pnia schemat bazy danych wzbogacony na podstawie metadanych Comarch ERP Enterprise. Jako atrybuty wirtualne zawiera klucze biznesowe z relacji, a tak\u017ce opis warto\u015bci valueset w j\u0119zyku naturalnym. Ponadto uwzgl\u0119dniono wirtualne tabele umo\u017cliwiaj\u0105ce dost\u0119p do Knowledge Store i obiekt\u00f3w dynamicznych. Mo\u017cliwe jest r\u00f3wnie\u017c udost\u0119pnianie w\u0142asnych danych dodatkowych i oblicze\u0144 w postaci wirtualnych tabel i funkcji wirtualnych. Dla ka\u017cdego atrybutu w schemacie bazy danych dost\u0119pny jest mo\u017cliwy do przet\u0142umaczenia opis.<\/p>\n<p>Uprawnienia na poziomie jednostki biznesowej s\u0105 oceniane podczas uzyskiwania dost\u0119pu do ODBC Comarch ERP Enterprise.<\/p>\n<h4 id=\"persystencja-comarch-erp-enterprise\" ><span class=\"ez-toc-section\" id=\"Persystencja_Comarch_ERP_Enterprise\"><\/span>Persystencja Comarch ERP Enterprise<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Us\u0142uga persystencji Comarch ERP Enterprise mo\u017ce by\u0107 u\u017cywana tylko w ramach Comarch ERP Enterprise. Zdalny dost\u0119p mo\u017ce by\u0107 jednak realizowany za pomoc\u0105 warstwy po\u015bredniej.<\/p>\n<p>W tym celu mo\u017cna na przyk\u0142ad utworzy\u0107 aplikacj\u0119 dzia\u0142aj\u0105c\u0105 w tle w Comarch ERP Enterprise, kt\u00f3ra jest nast\u0119pnie wywo\u0142ywana zewn\u0119trznie za po\u015brednictwem CORBA lub us\u0142ug webowych. Niezale\u017cno\u015b\u0107 od kana\u0142u wywo\u0142uj\u0105cego aplikacje w tle stanowi bezpieczn\u0105 inwestycyjnie alternatyw\u0119, poniewa\u017c programi\u015bci nie musz\u0105 zajmowa\u0107 si\u0119 okoliczno\u015bciami i zale\u017cno\u015bciami mi\u0119dzy wersjami konkretnego kana\u0142u.<\/p>\n<p>Us\u0142uga persystencji Comarch ERP Enterprise jest niezale\u017cna od DBMS. Umo\u017cliwia ona odczyt i zapis, a tak\u017ce korzystanie z cachingu Comarch ERP Enterprise, blokad i opcjonalnie uprawnie\u0144. Obs\u0142uguje zar\u00f3wno dost\u0119p oparty na obiektach, jak i krotkach (ang. <em>tuple<\/em>), a tak\u017ce pojedyncze i masowe operacje. Umo\u017cliwia uruchamianie bardzo prostych aplikacji dzia\u0142aj\u0105cych w tle, np. wykonywanie pojedynczego dost\u0119pu do bazy danych za pomoc\u0105 Comarch ERP Enterprise -OQL, a tak\u017ce dowolne z\u0142o\u017cone logiki. Wykorzystuj\u0105c istniej\u0105ce ju\u017c klasy logiczne, mo\u017cna r\u00f3wnie\u017c osi\u0105gn\u0105\u0107 wysoki stopie\u0144 ponownego wykorzystania funkcjonalnego.<\/p>\n<h3 id=\"laczenie-zdalne\" ><span class=\"ez-toc-section\" id=\"Laczenie_zdalne\"><\/span>\u0141\u0105czenie zdalne<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Zdalne wywo\u0142ania s\u0105 u\u017cywane do synchronicznego wykonywania okre\u015blonych dzia\u0142a\u0144 w zdalnym systemie. Do po\u0142\u0105czenia u\u017cywany jest okre\u015blony protok\u00f3\u0142.<\/p>\n<h4 id=\"corba\" ><span class=\"ez-toc-section\" id=\"CORBA\"><\/span>CORBA<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>CORBA to protok\u00f3\u0142 do po\u0142\u0105cze\u0144 zdalnych, kt\u00f3ry mo\u017ce by\u0107 u\u017cywany na r\u00f3\u017cnych platformach. CORBA mo\u017ce dzia\u0142a\u0107 w spos\u00f3b stanowy i dlatego nadaje si\u0119 do przesy\u0142ania danych masowych.<\/p>\n<h5 id=\"comarch-erp-enterprise-jako-serwer-corba\" ><span class=\"ez-toc-section\" id=\"Comarch_ERP_Enterprise_jako_serwer_CORBA\"><\/span>Comarch ERP Enterprise jako serwer CORBA<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Comarch ERP Enterprise zawiera serwer CORBA. Format danych interfejsu, zgodnie z kt\u00f3rym musz\u0105 dzia\u0142a\u0107 klienci, jest zdefiniowany w pliku IDL.<\/p>\n<p>Wszelkie aplikacje dzia\u0142aj\u0105ce w tle w Comarch ERP Enterprise mog\u0105 by\u0107 wywo\u0142ywane przez interfejs CORBA. Ponadto dost\u0119pna jest funkcja BIS (wymiana danych).<\/p>\n<p>Gdy klienci loguj\u0105 si\u0119 na serwera CORBA, odbywa si\u0119 uwierzytelnianie i weryfikacja autoryzacji w Comarch ERP Enterprise.<\/p>\n<p>Dok\u0142adnie informacje mo\u017cna znale\u017a\u0107 w artykule Interfejs CORBA.<\/p>\n<h5 id=\"comarch-erp-enterprise-jako-klient-corba\" ><span class=\"ez-toc-section\" id=\"Comarch_ERP_Enterprise_jako_klient_CORBA\"><\/span>Comarch ERP Enterprise jako klient CORBA<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W ramach adaptacji, zdalny serwer CORBA mo\u017ce by\u0107 r\u00f3wnie\u017c dost\u0119pny z poziomu Comarch ERP Enterprise. Comarch ERP Enterprise zawiera tylko ORB, powi\u0105zane biblioteki i dokumentacj\u0119 przyk\u0142adowych klient\u00f3w CORBA dla samego Comarch ERP Enterprise jako wsparcie w standardzie, poniewa\u017c spos\u00f3b dost\u0119pu jest ca\u0142kowicie okre\u015blony przez odpowiedni serwer CORBA.<\/p>\n<h4 id=\"web-service\" ><span class=\"ez-toc-section\" id=\"Web_service\"><\/span>Web service<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Web service wykorzystuje protok\u00f3\u0142 SOAP do po\u0142\u0105cze\u0144 zdalnych, kt\u00f3ry mo\u017ce by\u0107 u\u017cywany na r\u00f3\u017cnych platformach. Inn\u0105 opcj\u0105 jest zaimplementowanie zasady REST podczas realizacji us\u0142ugi sieciowej. S\u0105 one alternatyw\u0105 dla CORBA, gdy nie ma potrzeby przesy\u0142ania danych masowych, poniewa\u017c us\u0142ugi sieciowe nie obs\u0142uguj\u0105 po\u0142\u0105cze\u0144 stanowych.<\/p>\n<h5 id=\"comarch-erp-enterprise-jako-serwer-web-serviceowy\" ><span class=\"ez-toc-section\" id=\"Comarch_ERP_Enterprise_jako_serwer_web_serviceowy\"><\/span>Comarch ERP Enterprise jako serwer web service&#8217;owy<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Comarch ERP Enterprise zawiera serwer web sevice&#8217;owy. Wymaga on u\u017cycia protoko\u0142u HTTPS. Okre\u015bla on za pomoc\u0105 pliku WSDL format danych interfejsu (ew. SOAP), z kt\u00f3rego musz\u0105 korzysta\u0107 klienci.<\/p>\n<p>Za po\u015brednictwem interfejsu web service\u2019u funkcjonalno\u015b\u0107 jest dost\u0119pna analogicznie do serwera CORBA.<\/p>\n<p>Gdy klienci loguj\u0105 si\u0119 na serwer web service\u2019u, odbywa si\u0119 uwierzytelnianie za pomoc\u0105 has\u0142a lub certyfikatu u\u017cytkownika i weryfikacja uprawnie\u0144 w Comarch ERP Enterprise.<\/p>\n<h5 id=\"comarch-erp-enterprise-jako-klient-web-serviceowy\" ><span class=\"ez-toc-section\" id=\"Comarch_ERP_Enterprise_jako_klient_web_serviceowy\"><\/span>Comarch ERP Enterprise jako klient web service&#8217;owy<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Adaptacje w Comarch ERP Enterprise mog\u0105 r\u00f3wnie\u017c uzyskiwa\u0107 dost\u0119p do zdalnego serwera web service\u2019u. Comarch ERP Enterprise zawiera powi\u0105zane biblioteki i dokumentacj\u0119 przyk\u0142adowych klient\u00f3w web service\u2019u dla samego Comarch ERP Enterprise jako wsparcie w standardzie, poniewa\u017c spos\u00f3b dost\u0119pu jest ca\u0142kowicie okre\u015blony przez odpowiedni serwer web service\u2019u.<\/p>\n<h4 id=\"protokoly-macierzyste-navite-protocols\" ><span class=\"ez-toc-section\" id=\"Protokoly_macierzyste_navite_protocols\"><\/span>Protoko\u0142y macierzyste (navite protocols)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Mo\u017cliwe jest tak\u017ce korzystanie z innych protoko\u0142\u00f3w, takich jak TCP\/IP, FTP lub Java RMI. S\u0105 one szczeg\u00f3lnie interesuj\u0105ce w przypadku adresowania zewn\u0119trznych serwer\u00f3w z Comarch ERP Enterprise za po\u015brednictwem jego interfejs\u00f3w. Comarch ERP Enterprise nie oferuje jednak tutaj \u017cadnego wsparcia w standardzie.<\/p>\n<p>Je\u015bli adaptacja w <em>Comarch ERP Enterprise <\/em>ma na celu realizacj\u0119 serwera dla protoko\u0142u macierzystego, zaleca si\u0119 zamiast tego stworzenie tego serwera poza <em>Comarch ERP Enterprise <\/em>i umo\u017cliwienie mu dost\u0119pu do <em>Comarch ERP Enterprise <\/em>za po\u015brednictwem CORBA.<\/p>\n<h4 id=\"polaczenie-roznych-technologii\" ><span class=\"ez-toc-section\" id=\"Polaczenie_roznych_technologii\"><\/span>Po\u0142\u0105czenie r\u00f3\u017cnych technologii<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"> W przypadku eksportu lub importu za po\u015brednictwem CORBA lub us\u0142ug sieciowych, dane u\u017cytkownika s\u0105 transportowane jako parametry zdalnego po\u0142\u0105czenia. Stanowi to zalet\u0119, je\u015bli dane u\u017cytkownika mog\u0105 by\u0107 przesy\u0142ane w ten spos\u00f3b. Ewentualnie mo\u017cliwe jest r\u00f3wnie\u017c synchroniczne uruchomienie eksportu lub importu za pomoc\u0105 zdalnego po\u0142\u0105czenia, u\u017cywaj\u0105c pliku dost\u0119pnego dla Comarch ERP Enterprise jako pliku \u017ar\u00f3d\u0142owego lub docelowego. Mo\u017cna to osi\u0105gn\u0105\u0107 poprzez zdalne po\u0142\u0105czenie aplikacji w tle\u00a0 <em>com.cisag.pgm.bi.Export<\/em> lub <em>com.cisag.pgm.bi.Import<\/em>. <\/div><\/section>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"> Je\u015bli istniej\u0105cy system ma interfejs bazy danych, tj. mo\u017ce odczytywa\u0107 dane bezpo\u015brednio z tabel za pomoc\u0105 SQL, odpowiednia tabela mo\u017ce zosta\u0107 utworzona poza schematem bazy danych Comarch ERP Enterprise.<\/p>\n<p>Comarch ERP Enterprise mo\u017ce dokonywa\u0107 zapis\u00f3w w tej tabeli bazy danych poprzez JDBC. Us\u0142uga lub zdalnie wywo\u0142ywana aplikacja w tle mo\u017ce teraz w efekcie uzyska\u0107 dane za pomoc\u0105 us\u0142ugi persystencji Comarch ERP Enterprise, przygotowa\u0107 je i zapisa\u0107 w tej tabeli za po\u015brednictwem JDBC. Stanowi to nast\u0119puj\u0105c\u0105 zalet\u0119: wszystkie funkcje Comarch ERP Enterprise zwi\u0119kszaj\u0105ce wydajno\u015b\u0107, np. caching semiramis i Perpared-Statement mog\u0105 by\u0107 wykorzystywane do wyszukiwania danych. <\/div><\/section>\n<h3 id=\"kwestie-zwiazane-z-wydajnoscia\" ><span class=\"ez-toc-section\" id=\"Kwestie_zwiazane_z_wydajnoscia\"><\/span>Kwestie zwi\u0105zane z wydajno\u015bci\u0105<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4 id=\"ochrona-przed-waskimi-gardlami-zasobow\" ><span class=\"ez-toc-section\" id=\"Ochrona_przed_waskimi_gardlami_zasobow\"><\/span>Ochrona przed w\u0105skimi gard\u0142ami zasob\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Systemy serwerowe, takie jak Comarch ERP Enterprise, nie mog\u0105 dzia\u0142a\u0107 z optymaln\u0105 wydajno\u015bci\u0105, je\u015bli zbyt wiele po\u0142\u0105cze\u0144 zdalnych jest przetwarzanych jednocze\u015bnie przez serwer aplikacji. Mo\u017cna tego unikn\u0105\u0107, podejmuj\u0105c odpowiednie dzia\u0142ania.<\/p>\n<p>Ka\u017cda sesja, kt\u00f3r\u0105 klient otwiera w systemie Comarch ERP Enterprise za po\u015brednictwem po\u0142\u0105cze\u0144 zdalnych, zu\u017cywa zasoby, takie jak pami\u0119\u0107, czas obliczeniowy i po\u0142\u0105czenia z baz\u0105 danych na serwerze aplikacji, z kt\u00f3rym \u0142\u0105czy si\u0119 klient. Je\u015bli scenariusz wymaga bardzo du\u017cej liczby klient\u00f3w, z kt\u00f3rych wszyscy s\u0105 stale po\u0142\u0105czeni z serwerem CORBA, mog\u0105 wyst\u0105pi\u0107 w\u0105skie gard\u0142a (obni\u017cenie przepustowo\u015bci) zasob\u00f3w. Krytycznymi zasobami w tym przypadku s\u0105 g\u0142\u00f3wnie sesje (i po\u0142\u0105czenia z baz\u0105 danych). Ka\u017cda sesja zajmuje w\u0105tek Comarch ERP Enterprise od momentu jej utworzenia, tj. pami\u0119\u0107 sterty (ang. <em>heap<\/em>) dla stosu w\u0105tk\u00f3w (<em>threadstack<\/em>) i zasob\u00f3w macierzystych w zale\u017cno\u015bci od systemu operacyjnego. Podczas przetwarzania zapytania wykorzystywany jest w\u0105tek. Je\u015bli dane musz\u0105 zosta\u0107 odczytane z bazy danych w celu przetworzenia zapytania CORBA, wykorzystywane s\u0105 dodatkowe tymczasowe po\u0142\u0105czenia z baz\u0105 danych.<\/p>\n<p>Pami\u0119\u0107, w\u0105tki i po\u0142\u0105czenia z baz\u0105 danych s\u0105 ograniczonymi zasobami na serwerze aplikacji. W\u0105skie gard\u0142o zasob\u00f3w prowadzi do wyd\u0142u\u017cenia czasu przetwarzania po\u0142\u0105czenia zdalnego. W najgorszym przypadku stabilno\u015b\u0107 ca\u0142ego serwera aplikacji mo\u017ce by\u0107 zak\u0142\u00f3cona.<\/p>\n<p>Istnieje kilka sposob\u00f3w na unikni\u0119cie w\u0105skich garde\u0142 w zasobach. Podstawow\u0105 kwesti\u0105 jest koordynacja dost\u0119pu do krytycznych zasob\u00f3w w celu unikni\u0119cia zbyt wielu dost\u0119p\u00f3w na raz.<\/p>\n<p>W pierwszym rozwi\u0105zaniu przedstawionym na rysunku poni\u017cej, kilka serwer\u00f3w aplikacji Comarch ERP Enterprise jest u\u017cywanych do dystrybucji dost\u0119pu klient\u00f3w. W przyk\u0142adzie u\u017cyto klient\u00f3w CORBA, ale opisany pomys\u0142 ma og\u00f3lne zastosowanie.<\/p>\n<p>Poprzez dystrybucj\u0119 danych na kilka serwer\u00f3w aplikacji Comarch ERP Enterprise, zmniejszone jest zu\u017cycie pami\u0119ci na serwer aplikacji. Rozwi\u0105zanie to mo\u017ce jednak prowadzi\u0107 do du\u017cego obci\u0105\u017cenia bazy danych, je\u015bli wiele do serwera aplikacji w tym samym czasie dociera wi\u0119ksza ilo\u015b\u0107 zapyta\u0144.<\/p>\n<figure id=\"attachment_7624\" aria-describedby=\"caption-attachment-7624\" style=\"width: 944px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-7624\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA.png\" alt=\"\" width=\"944\" height=\"349\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA.png 944w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA-300x111.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA-768x284.png 768w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA-50x18.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA-920x340.png 920w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA-600x222.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/Wieksza-ilosc-serwerow-CORBA-320x118.png 320w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><\/a><figcaption id=\"caption-attachment-7624\" class=\"wp-caption-text\">Wi\u0119ksza ilo\u015b\u0107 serwer\u00f3w CORBA<\/figcaption><\/figure>\n<p>W drugim mo\u017cliwym rozwi\u0105zaniu wykorzystywany jest niezale\u017cny proces (<em>CORBA Proxy Queue<\/em>), kt\u00f3ry jest niezale\u017cny od Comarch ERP Enterprise. Zapytania klient\u00f3w trafiaj\u0105 najpierw do tego procesu, kt\u00f3ry kolejkuje je, a nast\u0119pnie w tym samym czasie przekazuje ograniczon\u0105 ich liczb\u0119 do Comarch ERP Enterprise. Ogranicza to liczb\u0119 sesji CORBA i liczb\u0119 po\u0142\u0105cze\u0144 z baz\u0105 danych w Comarch ERP Enterprise. <em>CORBA Proxy Queue<\/em> dzia\u0142a jako serwer dla zdalnych po\u0142\u0105cze\u0144 oraz jako klient CORBA. Implementacja takiej kolejki mo\u017ce by\u0107 zatem wykonana w dowolnym j\u0119zyku programowania, kt\u00f3ry jest dostosowany do danego przypadku.<\/p>\n<figure id=\"attachment_7625\" aria-describedby=\"caption-attachment-7625\" style=\"width: 1169px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-7625\" src=\"https:\/\/pomoc.comarch.pl\/cee\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue.png\" alt=\"\" width=\"1169\" height=\"459\" srcset=\"https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue.png 1169w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue-300x118.png 300w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue-1024x402.png 1024w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue-768x302.png 768w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue-50x20.png 50w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue-920x361.png 920w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue-600x236.png 600w, https:\/\/pomoc.comarch.pl\/cee\/640\/wp-content\/uploads\/2023\/12\/CORBA-Proxy-Queue-320x126.png 320w\" sizes=\"auto, (max-width: 1169px) 100vw, 1169px\" \/><\/a><figcaption id=\"caption-attachment-7625\" class=\"wp-caption-text\">CORBA Proxy Queue<\/figcaption><\/figure>\n<p>W obu tych rozwi\u0105zaniach zak\u0142ada si\u0119, \u017ce ka\u017cdy proces dzia\u0142a na w\u0142asnym komputerze i tym samym ma wy\u0142\u0105czny dost\u0119p do jego ograniczonych zasob\u00f3w. Rozwi\u0105zanie <em>CORBA Proxy Queue<\/em> r\u00f3wnie\u017c powinno dzia\u0142a\u0107 tak\u017ce na w\u0142asnym komputerze.<\/p>\n<p>Nawet podczas tworzenia po\u0142\u0105czenia z Comarch ERP Enterprise za po\u015brednictwem po\u0142\u0105cze\u0144 zdalnych, testy powinny by\u0107 przeprowadzane z uwzgl\u0119dnieniem oczekiwanej liczby klient\u00f3w. W ten spos\u00f3b mo\u017cna okre\u015bli\u0107, czy \u015brodki potrzebne do ochrony zasob\u00f3w w danym przypadku s\u0105 konieczne.<\/p>\n","protected":false},"author":18,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-7623","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-zewnetrzne-interfejsy"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/7623","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\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/comments?post=7623"}],"version-history":[{"count":2,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/7623\/revisions"}],"predecessor-version":[{"id":7627,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/7623\/revisions\/7627"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/media?parent=7623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}