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í
×
dnes 13:00 | Komunita

Do 30. října se lze přihlásit do dalšího kola programu Outreachy (Wikipedie), jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 4. prosince 2018 do 4. března 2019, v participujících organizacích lze vydělat 5 500 USD.

Ladislav Hagara | Komentářů: 0
včera 22:22 | Komunita

Společnost Purism představila kryptografický token Librem Key. Koupit jej lze za 59 dolarů. Token byl vyvinut ve spolupráci se společností Nitrokey a poskytuje jak OpenPGP čipovou kartu, tak zabezpečení bootování notebooků Librem a také dalších notebooků s open source firmwarem Heads.

Ladislav Hagara | Komentářů: 1
včera 20:33 | Nová verze

Společnost NVIDIA oficiálně vydala verzi 10.0 toolkitu CUDA (Wikipedie) umožňujícího vývoj aplikací běžících na jejich grafických kartách. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 20:00 | Upozornění

Příspěvek Jak přežít plánovanou údržbu DNS na blogu zaměstnanců CZ.NIC upozorňuje na historicky poprvé podepsání DNS root zóny novým klíčem dne 11. října 2018 v 18:00. Software, který nebude po tomto okamžiku obsahovat nový DNSSEC root klíč, nebude schopen resolvovat žádná data. Druhým důležitým datem je 1. února 2019, kdy významní výrobci DNS softwaru, také historicky poprvé, přestanou podporovat servery, které porušují DNS standard

… více »
Ladislav Hagara | Komentářů: 5
včera 15:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 156. brněnský sraz, který proběhne v pátek 21. září od 18:00 v restauraci Na Purkyňce na adrese Purkyňova 80.

Ladislav Hagara | Komentářů: 0
včera 13:22 | Nová verze

Alan Griffiths z Canonicalu oznámil vydání verze 1.0.0 display serveru Mir (GitHub, Wikipedie). Mir byl představen v březnu 2013 jako náhrada X serveru a alternativa k Waylandu. Dnes Mir běží nad Waylandem a cílen je na internet věcí (IoT).

Ladislav Hagara | Komentářů: 0
20.9. 22:00 | Nasazení Linuxu
Stabilní aktualizace Chrome OS 69 (resp. Chromium OS), konkrétně 69.0.3497.95, přináší mj. podporu linuxových aplikací. Implementována je pomocí virtualizace, a proto je tato funkce také omezena na zařízení s dostatkem paměti a podporou hardwarové akcelerace, tudíž nejsou podporovány chromebooky s 32bitovými architekturami ARM, či Intel Bay Trail (tzn. bez Intel VT-x).
Fluttershy, yay! | Komentářů: 5
20.9. 21:32 | Zajímavý projekt

Došlo k uvolnění linuxové distribuce CLIP OS, vyvíjené francouzským úřadem pro kybernetickou bezpečnost ANSSI, jako open source. Vznikla za účelem nasazení v úřadech, kde je potřeba omezit přístup k důvěrným datům. Je založená na Gentoo.

Fluttershy, yay! | Komentářů: 1
20.9. 16:00 | Komerce

Zjistěte více o bezpečné a flexibilní architektuře v cloudu! IBM Cloud poskytuje bezpečné úložiště pro Vaše obchodní data s možností škálovatelnosti a flexibilitou ukládání dat. Zároveň nabízí prostředky pro jejich analýzu, vizualizaci, reporting a podporu rozhodování.

… více »
Fluttershy, yay! | Komentářů: 12
20.9. 12:22 | Nová verze

V dubnu letošního roku Mozilla představila webový prohlížeč pro rozšířenou a virtuální realitu Firefox Reality (GitHub). V úterý oznámila vydání verze 1.0. Ukázka na YouTube. Firefox Reality je k dispozici pro Viveport, Oculus a Daydream.

Ladislav Hagara | Komentářů: 2
Na optické médium (CD, DVD, BD aj.) jsem naposledy vypaloval(a) data před méně než
 (13%)
 (14%)
 (21%)
 (23%)
 (25%)
 (4%)
 (1%)
Celkem 386 hlasů
 Komentářů: 33, poslední 16.9. 11:55
Rozcestník

Strč prst skrz AbcLinuxu - II

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

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.