abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 18:22 | Nová verze

Byla vydána nová verze 4.2.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 198 vývojářů. Provedeno bylo více než 2 200 commitů. Přehled úprav a nových vlastností v seznamu změn.

Ladislav Hagara | Komentářů: 0
včera 15:33 | Pozvánky

Konference Bratislava OpenCamp 2020 proběhne v sobotu 4. dubna 2020 v Bratislavě na Fakultě informatiky a informačních technologií STU. Organizátoři vyhlásili CFP. Návrhy přednášek a workshopů lze zaslat do 31. ledna 2020.

Ladislav Hagara | Komentářů: 0
včera 15:11 | Nová verze

Bylo oznámeno vydání KDE Frameworks 5.65.0, tj. nové verze aktuálně 74 knihoven rozšířujících multiplatformní framework Qt a dnes využívaných nejenom KDE Plasmou a KDE Aplikacemi. Nově začleněnou knihovnou je KQuickCharts pro generování grafů.

Ladislav Hagara | Komentářů: 0
13.12. 15:44 | Nová verze

Byla vydána verze 2.4 svobodného nelineárního video editoru Flowblade (GitHub, Wikipedie). Přehled novinek v poznámkách k vydání. Zdůraznit lze přechod na Python 3.

Ladislav Hagara | Komentářů: 0
13.12. 07:00 | Nová verze

Vyšel toolkit Qt verze 5.14. Změny se týkají především Qt Quick, jeho odstínění od konkrétních nízkoúrovňových grafických API a zlepšení výkonu zvláště ve 3D. Začíná tím proces postupných příprav na Qt 6. Příští vydání (5.15) bude s dlouhodobou podporou. Aktuálně také vyšlo vývojové prostředí Qt Creator 4.11 – vedle oprav chyb a řady zjednodušení konfigurace přidává mj. experimentální podporu WebAssembly.

Fluttershy, yay! | Komentářů: 4
13.12. 06:00 | Nová verze

Byla vydána nová verze 1.41 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.41 bylo vydáno také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

Ladislav Hagara | Komentářů: 0
12.12. 23:55 | IT novinky

J2EE, nověji Java EE a nejnověji Jakarta EE, tj. Java pro vývoj a provoz podnikových aplikací a informačních systémů (Java Platform, Enterprise Edition), slaví 20 let. První verze J2EE 1.2 byla vydána 12. prosince 1999.

Ladislav Hagara | Komentářů: 0
12.12. 22:00 | Nová verze

V kancelářích společnosti NGINX, tj. společnosti stojící za stejnojmenným webovým serverem a reverzní proxy, v Moskvě proběhla policejní razie. Na NGINX si nárokuje práva společnost Rambler. Igor Sysoev, zakladatel společnosti NGINX, ve společnosti Rambler pracoval v letech 2000 až 2011. V březnu letošního roku byla společnost NGINX prodána společnosti F5 Networks za 670 milionů dolarů.

Ladislav Hagara | Komentářů: 15
12.12. 18:44 | Nová verze

Vyšel Vim 8.2. Jedná se převážně o opravnou verzi tohoto textového editoru, ale mezi několika novými funkcemi je také možnost používat vyskakovací okna v uživatelském rozhraní, což využijí zvláště vývojáři doplňků pro dialogová okna či okna s nápovědou, napovídáním atp. Ukázkou je hra killersheep.

Fluttershy, yay! | Komentářů: 1
12.12. 17:44 | Nová verze

Byla vydána nová verze 19.12.0 KDE Aplikací (KDE Applications). Přehled novinek i s náhledy v oficiálním oznámení, kompletním seznamu změn a na stránce s dalšími informacemi.

Ladislav Hagara | Komentářů: 1
Kolik jste vystřídali distribucí Linuxu? (uvažujte distribuce, které jste používali aspoň měsíc)
 (3%)
 (74%)
 (18%)
 (2%)
 (2%)
Celkem 89 hlasů
 Komentářů: 13, poslední dnes 11:09
Rozcestník

www.AutoDoc.Cz

Strč prst skrz AbcLinuxu - II

16. 4. 2003 | Leoš Literák | Programování | 11257×

aneb persistence dat, controller a výběr šablon.

Persistence

Jak již víte, objekty jsou ukládány do databáze. Abych se vyvaroval toho, že SQL příkazy budou na desítkách či stovkách míst, vytvořil jsem jednu třidu, která má na starosti persistenci dat. Druhou a možná ještě důležitější výhodou je zjednodušení práce. Tato třída definuje několik málo základních metod, které jsou velice snadné na používání. Programátor tudíž vůbec nemusí znát JDBC, aby mohl naprogramovat nové vlastnosti.

persistance class diagram

Jak vidíte z diagramu tříd, subsystém persistance se skládá ze dvou rozhraní a jejich implementací. Hlavním rozhraním je Persistance, které definuje základní metody pro manipulaci a hledání objektů. Jeho implementací je MySQLPersistance. Nicméně v kódu nevytvářím jeho instance, ale přistupuju k němu přes PersistanceFactory. Jak název napovídá, jedná se o Factory pattern. Hlavní výhodou je, že pokud bych přešel na jinou databázi, stačilo by mi naimplementovat pro ni podporu jako implementaci rozhraní Persistance a změnit jednu řádku v PersistanceFactory.

Součástí této vrstvy je i transparentní cache. V případě potřeby můžete použít i jinou než předvolenou cache při volání metody getPersistance v třídě PersistanceFactory. Toho se například používá při indexaci dat pro vyhledávání. Zvolená cache je hojně volána na začátcích metod v MySQLPersistance, takže není nutné se zdržovat pomalými JDBC voláními. DefaultCache je velice primitivní a vyřazuje objekty, které nebyly během několika posledních minut použity nebo už dlouho nebyly synchronizovány s databází. Až budu mít čas, vytvořím alternativní implementaci založenou na některé Open Source knihovně, nejspíše z Jakarty. Slibuji si od toho větší stabilitu.

Controller

Controller je relativně jednoduchý. Základem je třída AbcFMServlet, což je potomek HttpServletu. Hlavní práce se uskutečňuje v přepsané [overriden] metodě service(). Ta nejdříve zavolá metodu performInit(), která má na starosti uložení parametrů a předdefinovaných proměnných do mapy env a zpracuje přihlašování. Dále zavolá abstraktní metodu process(), která vrátí jméno šablony, která má sloužit jako výstup. Tato šablona se nahraje a vykoná. Její výstup se vrátí uživateli.

Metoda process() má následující tvar:

protected abstract String process(HttpServletRequest request, HttpServletResponse response, Map env) throws Exception;

Každý servlet dědící z této třídy je tedy povinen ji naimplementovat. V ní se provádí veškeré zpracování vašich požadavků. Tedy kontrola parametrů, zpracování a finálně výběr šablony, respektive přesměrování prohlížeče na jinou stránku. Například když uložíte diskusi, zavolá se servlet EditDiscussion. Ten uloží diskusi do databáze (a zároveň do cache). Jenže proč by měl zobrazovat diskusi, když od toho je servlet ViewRelation? Proto jednoduše vypočítá nové URL a přes volání response.sendRedirect(url) přesměruje prohlížeč na tento servlet. Jako název šablony vrátí null, takže žádná další data nejsou vrácena prohlížeči.

Výběr šablony

Zajímavým fíglem je ještě výběr šablony. Každá šablona se skládá ze dvou souborů. Prvním je template.fm, což je šablona stránky. Tedy obligátní levý sloupec se službami a rubrikami, pravý sloupec s aktuálními články na ostatních serverech a patička s copyrightem. Druhým souborem je vlastní obsah stránky, tedy zobrazení formuláře či tohoto článku. Toto dělení je pochopitelné, pokud chci změnit něco v šabloně stránek, nemusím opravovat sto souborů, ale jen jeden.

AbcLinuxu existuje v několika variantách, kromě hlavní existuje ještě varianta pro lynx, pro sidebar Mozilly a připravuje se žádaná verze pro Plucker. Bylo by hloupé, kdyby se kvůli každé této variantě musely vytvářet všechny soubory znovu. Proto jsem vytvořil mechanismus pro jejich sdílení.

Základem je stejná stromová struktura všech variant. Pokud je potřeba, vytvoří se kopie souboru v podadresáři varianty a ta získá přednost před defaultní variantou. Vysvětlím to na příkladě. Pokud si prohlížíte úvodní stránku v Internet Exploreru či Mozille, použije se předvolená varianta web. Vykoná se tedy šablona vzniklá ze souborů web/template.ftl a web/show/index.ftl. Pokud však používáte lynx, použijí se soubory lynx/template.ftl a lynx/show/index.ftl, protože jsou oba předefinované pro šablonu lynx. Ale u prohlížení článku pod lynxem se použije šablona lynx/template.ftl a soubor web/show/article.ftl, neboť jej nebylo třeba změnit. Celá varianta pro lynx se ve skutečnosti skládá jen z šablony a úvodní stránky!

V řeči kódu se tento výběr děje v třídě FMTemplateSelector a jeho obecnému předku TemplateSelector. TemplateSelector při inicializaci načte xml soubor s definicí všech šablon v systému. Každý servlet má nadefinováno několik akcí. K této akci je pak přiřazena šablona v několika variantách. Pokud tedy tyto varianty existují, jinak je tam uvedena jen jedna pro předvolenou variantu web. U šablony je možné nadefinovat proměnné, které se mají vložit do mapy env. Typicky to bývá titulek stránky.

Servlety pak volají metodu select(). Například EditDiscussion podle kontextu zavolá jednu z metod:

FMTemplateSelector.select("ViewRelation","article",env,request,null);
FMTemplateSelector.select("ViewRelation","driver",env,request,null);
FMTemplateSelector.select("ViewRelation","discussion",env,request,null);
FMTemplateSelector.select("ViewRelation","hardware",env,request,null);
FMTemplateSelector.select("ViewRelation","software",env,request,null);

V metodě select() se nejdříve detekuje prohlížeč a pokud se jedná o nástroj na mirrorování, je vrácena stránka s upozorněním, že toto chování se nám nelíbí. Následně se vyhledá v mapě šablon kombinace servletu a akce. Pokud taková kombinace neexistuje, vyhodí se vyjímka. Pak se pro kombinaci servletu, akce, prohlížeče a HttpRequestu vybere šablona, například web. Pak se pro danou šablonu zjistí obsah šablony, včetně případných proměnných (kromě statických jsou podporovány i dynamické, například titulek článku je stejný jako název článku). Název šablony s obsahem se uloží do proměnné a jako výsledek se vrátí řetězec template+"/template.ftl", například "plucker/template.ftl". Tato šablona se pak načte a vykoná v metodě service() v AbcFMServletu.


       

Hodnocení: 38 %

        špatnédobré        

Nástroje: Tisk bez diskuse

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

16.4.2003 08:02 Marek Vydra
Rozbalit Rozbalit vše no nevim
no nevim, pripada mi to desive slozite. jsem zastancem jednoduchych reseni. treba ukladani XML do sql jako blob.. no nevim. SQL databaze byly vymysleny s uplne jinym cilem.
16.4.2003 10:30 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše no nevim
nekdy je treba postavit poradne zaklady, na kterych se da stavet. ;-) ukladani dat do XML je moderni trend. neni sice optimalni, ale vyrobci db se snazi vytvorit lepsi podporu pro XML. pokud to jeste oracle neumi, tak verim, ze brzy bude umet XPath dotazy
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
ja bych rekl ze to oracle umi, i indexaci prez XPath jsem tam videl
16.4.2003 10:34 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše zdrojaky
tak co, laka nekoho podilet se na vyvoji?
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
16.4.2003 12:00 Martin Krauskopf | skóre: 9
Rozbalit Rozbalit vše zdrojaky
A ty zdrojaky budou svereny jenom zavaznym jedincum nebo budou k dispozici vsem? Tohle tema mi pride velice nejasny :) Trochu me prekvapuje pristup "vsecko resim sam" :) Mozna ze to vyusti v lepsi optimalizaci/rychlost, ale osobne nerozumim nepouziti proslulych Struts pro Controller. Pro persistenci je zase hotovy spickovy framework Hibernate. Ale jinak klobouk dolu :)
17.4.2003 07:52 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše zdrojaky
  • ty zdrojaky bych klidne zverejnil, ale je treba vymyslet licenci. po kauze s linuxzone jsem uz opatrny. nerad bych, aby den po zverejneni zdrojaku vznikl napadne podobny server bcdlinuxu. dale bychom museli od kazdeho prispivatele ziskat licenci k uziti atd.
  • za prve pred rokem a pul ty projekty byly jinde nez dnes a hlavne me tlacil cas. struts neumim, ale budu se jej muset naucit kvuli jednomu projektu. a to, co jsem videl, me rozhodne nenadchlo.
  • u persistence jsem zase chtel maximalni kontrolu nad daty. abych je mohl editovat treba rucne prikazem mysql. a ty frameworky, ktere jsem tehdy umel, ukladaly serializovane objekty :-(
  • nicmene pomalu prechazim ke standardnim resenim. napriklad jsem nahradil vlastni scheduler tim, ktery je v java.utils. ted chci zlikvidovat vlastni LRU cache a pouzit neco z jakarty.
  • diky. :-)
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
16.4.2003 18:52 Zed
Rozbalit Rozbalit vše Na neco se zapomnelo, ne?
Minule bylo receno, ze LL ukaze neco, co v PHP nejde. Jedine, co zatim vidim, ze v PHP nejde je udelat tak ultraslozity navrh aniz by to k necemu bylo.
16.4.2003 23:26 Zdeněk Štěpánek | skóre: 57 | blog: uz_mam_taky_blog | varnsdorf
Rozbalit Rozbalit vše s kanonem na vrabce
Zdravim Myslim, ze je to zbytecne prekombinovane. Podle me by to slo udelat cely v PHP a MySQL, nic jineho podle me neni potreba. Zdenek
www.pirati.cz - s piráty do parlamentu i jinam www.gavanet.org - czfree varnsdorf
17.4.2003 09:12 met | skóre: 9 | Praha
Rozbalit Rozbalit vše Re: s kanonem na vrabce
Ja myslim, ze je to otazka pristupu. Kazdy ma moznost volby. Ja zase kdyz neco smolim v php+mysql, tak si rikam, zda nepouzit nejaky komplexnejsi nastroj, ktery by mi sedel lip nez fura roztrousenych kusu php kodu. Kazdemu se proste libi neco. Ale je pravda, ze kdyz jsem se tesil, ze tady se to dela jinak, a ze se konecne podivam, jak jinak se to taky da delat, ze bych se jako inspiroval, tak jsem se az zdesil, jak je to slozite a ze az takhle bych to delat nechtel (a asi ani neumel) :-(
17.4.2003 10:17 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše Re: s kanonem na vrabce
to bude asi tim, ze uz jsem pracoval na velkych projektech ;-) spise by me zajimalo, co na designu shledavate slozitym? me to prijde naopak velice jednoduche a elegantni. mam tu hierarchii trid reprezentujici objekty, jednoduchy zpusob pro jejich persistenci, controller a view. pokud se nekomu MVC architektura zda slozita, tak je to jeho problem, vyvracet mu to nebudu, casem na to prijde sam. slozitejsi je vyber sablon, to priznavam, na druhou stranu mi to hrozne setri cas a usnadnuje spravu. verzi pro lynx jsem diky ni zvladl za hodinu vytvorenim tri souboru, kdybych musel delat vsechny soubory pro lynx znovu, vykaslal bych se na to. v planu je verze pro plucker (opet mi budou stacit tri/ctyri soubory) a pro gprs.
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
22.4.2003 19:26 Zajsoft | skóre: 1 | Pardubice
Rozbalit Rozbalit vše Re: s kanonem na vrabce
Zdravim, tohle nejak nechapu... " slozitejsi je vyber sablon, to priznavam, na druhou stranu mi to hrozne setri cas a usnadnuje spravu. verzi pro lynx jsem diky ni zvladl za hodinu vytvorenim tri souboru, kdybych musel delat vsechny soubory pro lynx znovu, vykaslal bych se na to. v planu je verze pro plucker (opet mi budou stacit tri/ctyri soubory) a pro gprs. " ...pro PHP snad neexistuji sablony? ;-) Ja osobne uz pouzivam pekne dlouhou dobu Smarty(smarty.php.net) a jsem velmi spokojen.
17.4.2003 10:23 Martin Krauskopf | skóre: 9
Rozbalit Rozbalit vše Re: s kanonem na vrabce
Spis si myslim, ze je to otazka toho, co od konecny implementace ocekavas. Pokud bys chtel, jak rikas, neco sesmolit v PHP jako jednorazovy reseni, coz Leos mozna moch, tak by to bylo urcite rychlejsi a jednodusi v PHPku (znam ho jenom z doslechu :) ). Sesmolit to timto zpusobem lze samozrejmne i v Jave :) Ale myslim si, ze Leos se poucil a puvodniho projektu z penguina a presel na uplne opacnej extrem - maximalni mira abstraktnosti. Osobne si myslim, ze to je vzycky ten spravnej pristup, protoze jeden nikdy nevi, co kdy bude chtit pridat/zmenit/odebrat (viz. puvodni penguin_hw popisovanej v prvnim clanku). A ac se nam to vsem muze zdat sebeslozitejsi, tak myslim, ze po poradnym ponoreni do navrhu zjistis uplnej opak. Vsechny moduly jsou modularni/rozsiritelny bez minimalniho vlivu na ostatni komponenty a predelani modulu je vetsinou velice jednoduchy, nez kdyby bylo reseni "allInOne". To zaroven umoznuje i pohodlnou praci vice vyvojaru. A urcite nikdo nepochybujem, ze web jako je AbcLinuxu potrebuje byt co nejvic bezproblemove rozsiritelnej. Jina otazka je, proc Leos zvolil psani svych vlastnich komponentu. Mozna ze v dobe psani projektu jeste nebyli Strutsy, tam kde jsou dneska. To samy treba Hibernate. Pak by byla asi cela implementace abclinuxu jednodussi. Nebo lepe receno byla by stejne slozita, ale slozitost by byla resena prave frameworkama tretich stran a ne Leosem samotnym :) Proto rikam klobouk dolu, ze se s tim Leos psal :) <noflame> A posledni vec je asi ta, ze hodne linuxaku nema rado Javu, protoze je "pomala, preplacana, nevim co jeste....". Ale vsichni Javari vedi, ze to jsou dneska uz jenom obycejny blaboly :) Na servru to plati 10-ti nasobne. Takze opak je pravdou :) <noflame/>
11.9.2003 02:34 Kamil Sopko
Rozbalit Rozbalit vše Re: s kanonem na vrabce
hm co byste potom rekli na to co provadim ja ;] sice PHP +Mysql jenze objektove jako delphi podebne VCL knihovny kde vystupem je XML(da se rict v objektovych celcich na sebe navazujicich) a vyobrazenei pomoci generovaneho XSLT z defaultnich vzhledu pro objekty popripade o upresnenou definici daneho scriptu
15.9.2003 09:28 Martin Lhotsky
Rozbalit Rozbalit vše Dalsi navrhove vzory???
Diky za zajimave cteni. Zajimalo by me ale, jestli jsi Leosi nejakym zpusobem zvazoval v Modelu navrhovy vzor Composite a u vyberu sablony Builder, a pokud ano, tak z jakeho duvodu jsi je zavrhl. Chapu, ze ne vzdy se daji vzory pouzit, ale specialne v tomhle pripade me zajima kazdy podnetny nazor. Diky.

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.