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 05:00 | Bezpečnostní upozornění

Maxim Goryachy a Mark Ermolov ze společnosti Positive Technologies budou mít v prosinci na konferenci Black Hat Europe 2017 přednášku s názvem "Jak se nabourat do vypnutého počítače, a nebo jak v Intel Management Engine spustit vlastní nepodepsaný kód". O nalezeném bezpečnostním problému informovali společnost Intel. Ta bezpečnostní problém INTEL-SA-00086 v Intel Management Engine (ME), Intel Server Platform Services (SPS) a Intel

… více »
Ladislav Hagara | Komentářů: 12
dnes 01:33 | Zajímavý projekt

Na Humble Bundle byla spuštěna akce Humble Book Bundle: Java. Za 1 dolar a více lze koupit 5 elektronických knih, za 8 dolarů a více 10 elektronických knih a za 15 dolarů a více 15 elektronických knih věnovaných programovacímu jazyku Java od nakladatelství O'Reilly. Peníze lze libovolně rozdělit mezi nakladatelství O'Reilly, neziskovou organizaci Code for America a Humble Bundle.

Ladislav Hagara | Komentářů: 0
dnes 00:11 | Zajímavý projekt

Článek na OMG! Ubuntu! představuje rodinu písma IBM Plex. Jedná se o open source písmo (GitHub) navržené a uvolněné společností IBM (YouTube, Carbon Design System). Ukázka na Font Squirrel.

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

Na Humble Bundle lze získat počítačovou hru Brütal Legend (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí ve středu v 19:00.

Ladislav Hagara | Komentářů: 0
včera 06:00 | Zajímavý článek

USA Network vysílá již třetí sérii seriálu Mr. Robot (Wikipedie, ČSFD.cz). Ryan Kazanciyan, technický konzultant seriálu, se na Medium v sérii článků Mr. Robot Disassembled věnuje jednotlivým dílům a popisuje použité nástroje a postupy.

Ladislav Hagara | Komentářů: 2
19.11. 23:55 | IT novinky

Společnost StartCom oficiálně oznámila, že jako certifikační autorita končí. Od 1. ledna 2018 přestane vydávat nové certifikáty a následující 2 roky bude poskytovat OCSP a CRL. Počátkem roku 2020 budou všechny platné certifikáty zneplatněny.

Ladislav Hagara | Komentářů: 40
19.11. 22:00 | IT novinky

Hodnota Bitcoinu, decentralizované kryptoměny, překonala hranici 8 000 dolarů [reddit].

Ladislav Hagara | Komentářů: 3
19.11. 21:55 | Zajímavý software

Byla vydána verze 10.0 linuxové distribuce Raspberry Digital Signage. Jedná se o distribuci pro jednodeskové počítače Raspberry Pi určenou k prezentačním účelům (veletrhy, prodejny, ...). Po naběhnutí systému je spuštěn webový prohlížeč v režimu celé obrazovky a vybraná prezentace. Nejnovější Raspberry Digital Signage vychází z distribuce Raspbian Stretch.

Ladislav Hagara | Komentářů: 0
19.11. 13:33 | Zajímavý software

Společnost Google na svém blogu věnovaném open source představila container-diff, nástroj pro analýzu a porovnávání Docker kontejnerů. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0.

Ladislav Hagara | Komentářů: 0
19.11. 08:00 | Komunita

Flatpak Workshop proběhne ve středu 29. listopadu od 10:00 v Brně. V dopolední přednáškové části se účastníci seznámí s Flatpakem, se specifiky pro aplikace napsané v Qt a GTK+, portály, které integrují aplikace do systému, a na závěr, jak dostat aplikaci do Flathubu, což je momentálně největší centralizovaný repozitář Flatpaků. V odpolední části si pak mohou za pomoci lektorů zkusit nějakou aplikaci zabalit pro Flatpak. Workshop je určen pro 20 účastníků. Nutná je registrace.

Ladislav Hagara | Komentářů: 7
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (9%)
 (1%)
 (1%)
 (1%)
 (74%)
 (14%)
Celkem 721 hlasů
 Komentářů: 37, poslední dnes 15:21
    Rozcestník

    Strč prst skrz AbcLinuxu - II

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

    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.