{"id":78,"date":"2015-06-24T17:13:56","date_gmt":"2015-06-24T15:13:56","guid":{"rendered":""},"modified":"2018-09-17T21:52:55","modified_gmt":"2018-09-17T19:52:55","slug":"enterprise-javabeans-alebo-java-server-v-praxi","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/enterprise-javabeans-alebo-java-server-v-praxi\/","title":{"rendered":"Enterprise JavaBeans alebo Java server v praxi"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/s45fd4s.jpg\" alt=\"Obr\u00e1zok\" width=\"200\" height=\"215\" \/>Niekedy vie by\u0165 programovanie nudn\u00e9. Napr\u00edklad vtedy, ak programujete u\u017e tret\u00ed informa\u010dn\u00fd syst\u00e9m v rade. Je to v\u0161etko podobn\u00e9. M\u00e1 to vedie\u0165 na\u010d\u00edta\u0165 \u00fadaje, zobrazi\u0165 ich a umo\u017eni\u0165 ich zmeni\u0165. Tie ist\u00e9 probl\u00e9my a podobn\u00e9 rie\u0161enia. Niekto to ale urobi\u0165 mus\u00ed. Mus\u00ed nap\u00edsa\u0165 t\u00fa \u010das\u0165, ktor\u00e1 vy\u010d\u00edtava \u00fadaje, t\u00fa, ktor\u00e1 ich uklad\u00e1, aj ten zlo\u017eit\u00fd algoritmus na v\u00fdpo\u010det v\u00fdsledku. Ale vlastne mo\u017eno nie. Mo\u017eno len treba n\u00e1js\u0165 n\u00e1stroj, ktor\u00fd v\u00e1m odb\u00fara v\u0161etku t\u00fa opakuj\u00facu sa pr\u00e1cu a nech\u00e1 v\u00e1s s\u00fastredi\u0165 sa na to, \u010do je pre dan\u00fa aplik\u00e1ciu jedine\u010dn\u00e9 \u2013 obchodn\u00fa logiku (business logic).<!--more--><\/p>\n<p>Napr\u00edklad ako \u0161pecifik\u00e1cia Enterprise JavaBeans.<!--break-->Enterprise <span style=\"background: transparent;\">JavaBeans (EJB) <\/span><span style=\"background: transparent;\">je<\/span> jednou zo \u0161pecifik\u00e1ci\u00ed Java Enterprise Edition. Pre jej \u013eahk\u00e9 pochopenie je nutn\u00e9 si uvedomi\u0165 jej hlavn\u00fd \u00fa\u010del a ten je: poskytn\u00fa\u0165 v\u0161emo\u017en\u00fa podporu pre implement\u00e1ciu obchodnej logiky. \u010co to asi tak znamen\u00e1? T\u00e1to \u0161pecifik\u00e1cia sa sna\u017e\u00ed poskytn\u00fa\u0165 v\u0161etky n\u00e1stroje, aby ste sa pri programovan\u00ed obchodnej logiky mohli s\u00fastredi\u0165 len a len na to, \u010do je pre dan\u00fa aplik\u00e1ciu jedine\u010dn\u00e9. Napr\u00edklad za v\u00e1s rie\u0161i transakcie, ukladanie \u00fadajov, Dependecy Injection alebo autoriz\u00e1ciu. To v\u0161etko s\u00fa toti\u017e be\u017en\u00e9 probl\u00e9my, ktor\u00e9 potrebujete vyrie\u0161i\u0165 v be\u017enom informa\u010dnom syst\u00e9me (a ak tak\u00e9to probl\u00e9my nepotrebujete rie\u0161i\u0165, tak JavaEE mo\u017eno nie je t\u00e1 spr\u00e1vna ed\u00edcia Javy). A \u010do teda nevyrie\u0161i? No, nerozumie dom\u00e9ne v\u00e1\u0161ho programu, teda napr\u00edklad nevie, \u017ee objektu objedn\u00e1vky treba pred ulo\u017een\u00edm nastavi\u0165 pr\u00edznak, \u017ee je objedn\u00e1vka fin\u00e1lna. Alebo <span style=\"background: transparent;\">pro objekt<\/span> dokumentu treba skontrolova\u0165, \u010di jeho typ je zo zoznamu povolen\u00fdch typov. A tak \u010falej. To v\u0161etko s\u00fa u\u017e \u0161pecifick\u00e9 probl\u00e9my aplik\u00e1cie a EJB je vytvoren\u00e1 na to, aby ste mali vhodn\u00e9 prostredie na ich \u010do najjednoduch\u0161ie vyrie\u0161enie.<\/p>\n<p>Programova\u0165 EJB znamen\u00e1 tvori\u0165 objekty s obchodnou logikou. Asi najlep\u0161ie je ich ozna\u010dova\u0165 ako slu\u017eby, preto\u017ee be\u017eia na strane server a poskytuj\u00fa t\u00fato obchodn\u00fa logiku in\u00fdm slu\u017eb\u00e1m alebo klientsk\u00fdm aplik\u00e1ci\u00e1m. P\u00edsanie takejto slu\u017eby predstavuje vytvorenie objektu, ktor\u00e9ho met\u00f3dy s modifik\u00e1torom <em>public<\/em> s\u00fa dostupn\u00e9 in\u00fdm slu\u017eb\u00e1m (v predch\u00e1dzaj\u00facich verzia\u00e1ch bolo toto komplikovanej\u0161ie, ke\u010f\u017ee ka\u017ed\u00e1 slu\u017eba musela ma\u0165 osobitne definovan\u00e9 rozhranie pre extern\u00fdch klientov a rozhranie pre intern\u00fdch klientov, ale od verzie 3 \u2013 \u010do je najnov\u0161ia major verzia \u2013 je to takto zjednodu\u0161en\u00e9). Z\u00e1rove\u0148 je t\u00e1to slu\u017eba automaticky dostupn\u00e1 v r\u00e1mci Dependency Injection in\u00fdm triedam. Pri\u010dom, aby sa toto udialo, sta\u010d\u00ed ju jednoducho anotova\u0165 (op\u00e4\u0165, v predch\u00e1dzaj\u00facich verzi\u00e1ch bolo nutn\u00e9 pribali\u0165 k aplik\u00e1cii defini\u010dn\u00fd XML s\u00fabor. Od verzie 3 sta\u010d\u00ed len anot\u00e1cia, aj ke\u010f XML sa d\u00e1 st\u00e1le pou\u017ei\u0165). Pomocou tak\u00fdchto anot\u00e1ci\u00ed (alebo pomocou XML s\u00faboru ako p\u00f4vodn\u00e9ho pr\u00edstupu) <span style=\"background: transparent;\">viete potom slu\u017eb<\/span><span style=\"background: transparent;\">u<\/span><span style=\"background: transparent;\"> prida\u0165 alebo jej zmeni\u0165<\/span> ve\u013ea vlastnost\u00ed, ako je napr\u00edklad sp\u00f4sob rie\u0161enia transakci\u00ed alebo viete zo slu\u017eby urobi\u0165 z\u00e1rove\u0148 REST rozhranie (tu u\u017e je samozrejme zo strany servera nutn\u00e1 podpora pre HTTP komunik\u00e1ciu). Pomocou anot\u00e1ci\u00ed viete zadefinova\u0165 autoriza\u010dn\u00e9 pravidl\u00e1 na pr\u00edstup k jednotliv\u00fdm met\u00f3dam EJB (EJB samotn\u00e9 nerie\u0161i autoriz\u00e1ciu \u2013 na to je in\u00e1 JavaEE \u0161pecifik\u00e1cia, ale EJB s touto \u0161pecifik\u00e1ciou spolupracuje).<\/p>\n<p>\u010co teda v\u0161etko EJB poskytuje:<\/p>\n<ul>\n<li>Dependency Injection \u2013 jednoduch\u00fd pr\u00edstup a zdie\u013eanie in\u00fdch objektov<\/li>\n<li>Session \u2013 jednotliv\u00e9 slu\u017eby vedia by\u0165 stavov\u00e9 alebo bezstavov\u00e9. Pri stavov\u00fdch sa potom server star\u00e1 o to, aby po\u017eiadavky od klienta v r\u00e1mci jednej session boli smerovan\u00e9 st\u00e1le na t\u00fa ist\u00fa in\u0161tanciu slu\u017eby. Takto je v nej mo\u017en\u00e9 uchov\u00e1va\u0165 stav pre server.<\/li>\n<li>autoriz\u00e1ciu \u2013 pre cel\u00e9 slu\u017eby alebo jednotliv\u00e9 met\u00f3dy sa daj\u00fa definova\u0165 pravidl\u00e1, kto k nim m\u00f4\u017ee a kto k nim nem\u00f4\u017ee pristupova\u0165<\/li>\n<li>transakcie \u2013 pre ka\u017ed\u00fa met\u00f3du je mo\u017en\u00e9 definova\u0165 transak\u010dn\u00e9 pravidl\u00e1. \u010ci m\u00e1 napr\u00edklad be\u017ea\u0165 v r\u00e1mci transakcie, v ktorej bola volan\u00e1, alebo si m\u00e1 vytvori\u0165 svoju vlastn\u00fa at\u010f.<\/li>\n<li>lifecycle met\u00f3dy \u2013 met\u00f3dy, ktor\u00e9 s\u00fa volan\u00e9 v ur\u010dit\u00fdch okamihoch \u017eivota slu\u017eby (pri vytv\u00e1ran\u00ed, likvid\u00e1cii)<\/li>\n<li>interceptory \u2013 tie umo\u017e\u0148uj\u00fa \u201ezabali\u0165\u201c ka\u017ed\u00fa met\u00f3du slu\u017eby do inej met\u00f3dy, ktor\u00e1 bude vykon\u00e1va\u0165 niektor\u00e9 rutinn\u00e9 \u00falohy (ako napr\u00edklad logovanie). Ide o implement\u00e1ciu tzv. aspektovo-orientovan\u00e9ho programovania, kde jednotliv\u00e9 aspekty (logovanie, exception handling, autoriz\u00e1cia) m\u00f4\u017eu by\u0165 naprogramovan\u00e9 zvl\u00e1\u0161\u0165 a potom zlo\u017een\u00e9 dokopy, namiesto toho aby boli pomixovan\u00e9 v jednej \u010dasti k\u00f3du.<\/li>\n<li>timer service \u2013 pomocou tohto je mo\u017en\u00e9 napl\u00e1nova\u0165 pravideln\u00e9 sp\u00fa\u0161\u0165anie vybran\u00fdch met\u00f3d slu\u017eieb<\/li>\n<\/ul>\n<p>Osobitn\u00fdmi kapitolami s\u00fa MessageDriven EJB a Java Persistent API (JPA). To prv\u00e9 umo\u017e\u0148uje napoji\u0165 EJB (jej met\u00f3dy) na JavaEE \u0161pecifik\u00e1ciu Java Message-Oriented Middleware API (JMS) \u010d\u00edm dosiahnete, \u017ee sa EJB za\u010dn\u00fa spr\u00e1va\u0165 ako spracovatelia alebo producenti spr\u00e1v. To ich umo\u017e\u0148uje zaradi\u0165 do integra\u010dn\u00fdch sc\u00e9narov, kde komunik\u00e1cia medzi syst\u00e9mami prebieha na z\u00e1klade spr\u00e1v a nie priameho volania. To druh\u00e9 je op\u00e4\u0165 \u0161pecifik\u00e1cia, ktor\u00e1 umo\u017e\u0148uje uklada\u0165 \u00fadaje v objektoch do rela\u010dn\u00fdch datab\u00e1z (Object-Relation Mapping). P\u00f4vodne bola s\u00fa\u010das\u0165ou EJB, ale v s\u00fa\u010dasnosti je oddelen\u00e1 do samostatnej \u0161pecifik\u00e1cie, ale aj tak je s EJB ve\u013emi dobre zaintegrovan\u00e1.<\/p>\n<p>T\u00fdmto by sme preh\u013ead EJB \u0161pecifik\u00e1cie mohli aj ukon\u010di\u0165. Ak m\u00e1te zaujem dozvedie\u0165 sa viac, k\u013eudne m\u00f4\u017eete siahnu\u0165 po knihe <a href=\"http:\/\/www.bookdepository.com\/Beginning-EJB-3-2013-Jonathan-Wetherbee\/9781430246923\">Beginning EJB 3<\/a>. Aj inform\u00e1cie, ktor\u00e9 s\u00fa sp\u00edsan\u00e9 v tomto \u010dl\u00e1nku s\u00fa pr\u00e1ve z nej. Kniha m\u00e1 441 str\u00e1n a teda dos\u0165 priestoru, aby sa venovala \u0161pecifik\u00e1cii samotnej ako aj \u010fal\u0161\u00edm t\u00e9mam, ktor\u00e9 sa EJB nejako dot\u00fdkaj\u00fa (CDI a JTA \u0161pecifik\u00e1cie, v\u00fdvoj JavaEE aplik\u00e1ci\u00ed celkovo a podobne). Kniha je nap\u00edsan\u00e1 (ako u\u017e jej n\u00e1zov napoved\u00e1) pre \u013eud\u00ed, ktor\u00ed o EJB ve\u013ea nevedia. Neu\u010d\u00ed ale programova\u0165, preto nejak\u00e9 z\u00e1klady (ide\u00e1lne z Javy) je potrebn\u00e9 ma\u0165.<\/p>","protected":false},"excerpt":{"rendered":"<p>Niekedy vie by\u0165 programovanie nudn\u00e9. Napr\u00edklad vtedy, ak programujete u\u017e tret\u00ed informa\u010dn\u00fd syst\u00e9m v rade. Je to v\u0161etko podobn\u00e9. M\u00e1 to vedie\u0165 na\u010d\u00edta\u0165 \u00fadaje, zobrazi\u0165 ich a umo\u017eni\u0165 ich zmeni\u0165. Tie ist\u00e9 probl\u00e9my a podobn\u00e9 rie\u0161enia. Niekto to ale urobi\u0165 mus\u00ed. Mus\u00ed nap\u00edsa\u0165 t\u00fa \u010das\u0165, ktor\u00e1 vy\u010d\u00edtava \u00fadaje, t\u00fa, ktor\u00e1 ich uklad\u00e1, aj ten zlo\u017eit\u00fd [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-78","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/78","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":2,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/78\/revisions"}],"predecessor-version":[{"id":155,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/78\/revisions\/155"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=78"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=78"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}