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 17:33 | Komunita

Byly zveřejněny videozáznamy přednášek z Fedora 28 Release Party v Brně konané 5. června.

Ladislav Hagara | Komentářů: 0
dnes 13:11 | IT novinky

Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. Dle očekávání se nejvýkonnějším superpočítačem stal superpočítač Summit. Český superpočítač Salomon klesl na 139. místo. Další přehledy a statistiky na stránkách projektu.

Ladislav Hagara | Komentářů: 0
dnes 09:00 | Nová verze

Po téměř 13 měsících vývoje od vydání verze 5.26 byla vydána nová stabilní verze 5.28 programovacího jazyka Perl. Do vývoje se zapojilo 77 vývojářů. Změněno bylo přibližně 730 tisíc řádků v 2 200 souborech. Přehled novinek a změn v podrobném seznamu.

Ladislav Hagara | Komentářů: 5
dnes 05:55 | Komunita

Při prvním spuštění Ubuntu 18.04 LTS (Bionic Beaver) je spuštěn nástroj Ubuntu Report. Pokud uživatel souhlasí, jsou pomocí tohoto nástroje odeslány do Canonicalu informace o daném počítači (doba instalace, počet procesorů, rozlišení displeje, velikost paměti, časová zóna, ...). Will Cooke, vedoucí týmu Ubuntu Desktop, zveřejnil na blogu Canonicalu první získané statistiky. Infografika na It's FOSS.

Ladislav Hagara | Komentářů: 0
včera 09:55 | Nová verze

Byl vydán Debian 8.11, tj. jedenáctá a současně poslední opravná verze Debianu 8 s kódovým názvem Jessie. Uživatelům je doporučen přechod na Debian 9 Stretch nebo využít LTS (Debian Long Term Support). LTS podpora Debianu 8 je plánována do 30. června 2020. LTS podpora Debianu 7 Wheezy skončila 31. května 2018.

Ladislav Hagara | Komentářů: 0
včera 09:11 | IT novinky

Hodnota Bitcoinu, decentralizované kryptoměny, klesla pod 6 000 dolarů. Před půl rokem byla hodnota Bitcoinu téměř 20 000 dolarů.

Ladislav Hagara | Komentářů: 51
23.6. 12:33 | Zajímavý projekt

Kernel.org představil lore.kernel.org, tj. archiv diskusního listu vývojářů linuxového jádra LKML (Linux Kernel Mailing List) s řadou zajímavých funkcí. Archiv běží na softwaru Public Inbox.

Ladislav Hagara | Komentářů: 0
23.6. 10:55 | Nová verze

Po devíti měsících vývoje od vydání verze 10.0 byla vydána verze 11.0 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 3
22.6. 20:44 | Nová verze

Po více než 3 měsících vývoje od vydání verze 238 oznámil Lennart Poettering vydání verze 239 správce systému a služeb systemd (GitHub, NEWS).

Ladislav Hagara | Komentářů: 74
22.6. 15:00 | Nová verze

Bylo oznámeno vydání nové stabilní verze 1.28 a beta verze 1.29 open source textového editoru Atom (Wikipedie). Přehled novinek i s náhledy v příspěvku na blogu. Podrobnosti v poznámkách k vydání. Atom 1.28 je postaven na Electronu 2.0.

Ladislav Hagara | Komentářů: 3
Jak čtete delší texty z webových stránek?
 (78%)
 (22%)
 (4%)
 (7%)
 (2%)
 (10%)
Celkem 259 hlasů
 Komentářů: 39, poslední 21.6. 17:44
    Rozcestník

    Strč prst skrz AbcLinuxu - II

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

    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.