Michal Barla Michal Tvaroek Ako vytvori zapojiten rieenie
Michal Barla Michal Tvarožek Ako vytvoriť „zapojiteľné“ riešenie
Motivácia n n n Vytvoríte niečo, čo neskončí v šuflíku Niečo, čím sa dá pochváliť v životopise Ukážete, že viete pracovať v kontexte väčšieho riešenia (inžiniersky) Ukážete, že viete znovupoužívať softvérové súčiastky Spoznáte zaujímavé technológie
Obsah n n n JOP/P 3 - portál Možné cesty riešenia a ich spoločný základ Cocoon n Základná koncepcia How to. . . komplikované GUI/interakcia How to. . . jednoduché GUI
Portál n Jednoduchý informačný portál n n n Portlety (coplety) Správa používateľov. . . Univerzálnosť a konfigurovateľnosť Jednoduché pridávanie ďalších prezentačných nástrojov
Portál – zaintegrovaný formulár
Portál – zaintegrovaný formulár
Možné cesty riešenia – spoločný základ n Jazyk: Java SE 5. 0 n n Ontologické úložisko: Sesame 1. x n n n Ako servlet v Tomcat 5. 5. x Využívať existujúce ontológie Pristupovať cez Onto. CM rozhranie (je v Pe. We repository) Relačné úložisko n n Eclipse 3. 2. x (nie je podmienka) Parametre cez Java properties Rozhrania (Interface) My. SQL 5. x + Hibernate (voliteľný) Logovanie: Log 4 J Dokumentácia: Javadoc
Možné cesty riešenia n Neriešite GUI n n Váš nástroj nepotrebuje komunikovať s používateľom ani nič prezentovať Integrácia n n 1 x jar s vašou implementáciou N x jar s knižnicami, ktoré používa (libky) Skript pre vytvorenie databázovej štruktúry (ak sa používa) Dokumentácia
Možné cesty riešenia n Riešite GUI n n Niekoľko možností: Komplikované GUI vlastná implementácia základných prvkov sitemapy Cocoonu Jednoduchšie GUI šablóny, Cocoon Forms Integrácia rovnako bez GUI a navyše: n Adresár s potrebnými súbormi pre Cocoon 2. 1. 8+
Obsah n n n JOP/P 3 - portál Možné cesty riešenia a ich spoločný základ Cocoon n Základná koncepcia How to komplikované GUI/interakcia How to jednoduché GUI
Základné charakteristiky n n n Rámec pre tvorbu webových aplikácií Open source riešenie pod záštitou Apache Software Foundation Implementácia v jazyku Java Cocoon je Java servlet Vyžaduje servlet kontajner (Tomcat/Jetty)
Kľúčové vlastnosti n n Separácia záležitostí (MVC) Hlavná idea: Použitie dátovodov n n n Generátor=>transformátory=>serializátor Spracovanie a transformácia XML Pokročilý tok riadenia n Mechanizmus pokračovaní angl. continuations
Kľúčové vlastnosti pokr. n Komponentovo založený vývoj n n n Veľké množstvo funkčných blokov mimo jadra Cocoonu Cocoon Forms Portal Authentication framework. . .
Spracovanie požiadavky
Dátovod v Cocoone
Obsah n n n JOP/P 3 - portál Možné cesty riešenia a ich spoločný základ Cocoon n Základná koncepcia How to komplikované GUI/interakcia How to jednoduché GUI
Ešte chvíľu spoločne. . . n n V obidvoch prípadoch vytvárate „samostatnú“ webovú aplikáciu Vlastná sitemap. xmap, ktorá definuje základné dátovody, tok Ak neprispôsobujete, tak o portáli ani nemusíte vedieť Ak prispôsobujete, tak vám portál dodá informáciu o aktuálne prihlásenom používateľovi
Obsah n n n JOP/P 3 - portál Možné cesty riešenia a ich spoločný základ Cocoon n Základná koncepcia How to komplikované GUI/interakcia How to jednoduché GUI
Komplikované GUI
Komplikované GUI n Možnosti: n n XSP – radi sa o tom od vás niečo dozvieme Vlastný generátor (transformátor) n n Odvodiť od org. apache. cocoon. generation. Abstract. Generator Preťažiť: public void generate() throws SAXException V nej volať vaše Java jadro Váš generátor dáva XML potrebná transformácia (XSLT, custom, . . . ) n Je dobré, aby XML opisovalo logiku, nie výzor
Ukážka - kód import org. apache. cocoon. generation. Abstract. Generator; import org. xml. sax. helpers. Attributes. Impl; import org. xml. sax. SAXException; public class Hello. World. Generator extends Abstract. Generator { Attributes. Impl empty. Attr = new Attributes. Impl(); public void generate() throws SAXException { // the org. xml. sax. Content. Handler is inherited // through org. apache. cocoon. xml. Abstract. XMLProducer content. Handler. start. Document(); content. Handler. start. Element("", "example", empty. Attr); content. Handler. characters("Hello World!". to. Char. Array(), 0, "Hello World!". length()); content. Handler. end. Element("", "example"); content. Handler. end. Document(); } } Prebraté z: http: //cocoon. apache. org/2. 1/tutorial-generator. html
Ukážka – sitemap. xmap <map: generator name="hello. World" src="Hello. World. Generator"/>. . . <map: match pattern="hey. There. xml"> <map: generate type="hello. World"/> <map: serialize type="xml"/> </map: match> Pozrite si: http: //cocoon. apache. org/2. 1/tutorial-generator. html
Obsah n n n JOP/P 3 - portál Možné cesty riešenia a ich spoločný základ Cocoon n Základná koncepcia How to komplikované GUI/interakcia How to jednoduché GUI
Jednoduché GUI n Parametrizovateľné šablóny n n Formuláre (CForms) n n n JXTemplate Model formulára Šablóna formulára Väzba na Java Bean objekt alebo XML Rôzne hotové widgety, podpora AJAX, validácia Kontrola toku: n n Flowscript Action (extends Abstract. Action)
Ukážková aplikácia n http: //d 209 a. mine. nu: 8080/cocoon/game. CF/
Sitemap <map: match pattern="game-display-pipeline"> <map: generate type="jx" src="documents/Game_template. xml"/> <map: select type="request-parameter"> <map: parameter name="parameter-name" value="lang"/> <map: when test="sk"> <map: transform type="i 18 n"> <map: parameter name="locale" value="sk"/> </map: transform> </map: when> <map: otherwise> <map: transform type="i 18 n"> <map: parameter name="locale" value="en"/> </map: transform> </map: otherwise> </map: select> <map: transform src="styling/forms-styling. xsl"/> <map: serialize/> </map: match>
Flow function main() { var random = Math. round( Math. random() * 9 ) + 1; var form = new Form("documents/Game_definition. xml"); var lang = cocoon. request. get. Parameter("lang"); var guesses = 0; var hint = "No hint for you!" while (true) { form. show. Form("game-display-pipeline", {"hint" : hint, "guesses" : guesses, "lang" : lang} ); var guess = parse. Int( cocoon. request. get("guess") ); guesses++; if (guess) { if (guess > random) { hint = "Nope, lower!" } else if (guess < random) { hint = "Nope, higher!" } else { break; } } } cocoon. send. Page("success. jx", {"random" : random, "guess" : guess, "guesses" : guesses, "lang" : lang } ); } Tu môžeme volať JAVU!!!
Model <fd: form xmlns: fd="http: //apache. org/cocoon/forms/1. 0#definition"> <fd: widgets> <fd: field id="guess"> <fd: label>Your guess: </fd: label> <fd: datatype base="long"/> <fd: validation> <fd: range min="0" max="10"> <fd: failmessage>Must contain only numbers from < 0, 10> </fd: failmessage> </fd: range> </fd: validation> </fd: field> </fd: widgets> </fd: form>
Template <head> <title>cocoon flow number guessing game</title> </head> <body> <h 1><i 18 n: text i 18 n: catalogue="messages">Guess a number between 1 and 10</i 18 n: text></h 1> <h 2><i 18 n: text i 18 n: catalogue="messages">${hint}</i 18 n: text></h 2> <h 3><i 18 n: translate> <i 18 n: text i 18 n: catalogue="messages">No. Of. Tries. Message</i 18 n: text> <i 18 n: param>${guesses}</i 18 n: param> </i 18 n: translate> </h 3> <ft: form-template action="#{$continuation/id}. kont? lang=${lang}" method="POST"> <ft: widget id="guess"/> <input type="submit" value="messages: Submit" i 18 n: attr="value"/> </ft: form-template> <jx: choose> <jx: when test="#{lang = 'sk'}"> <a href =". /? lang=en"><img src="pics/uk. gif" alt="English" border="0" /></a> </jx: when> <jx: otherwise> <a href =". /? lang=sk"><img src="pics/sk. gif" alt="Slovensky" border="0" /></a> </jx: otherwise> </jx: choose> </body>
Internacionalizácia <? xml version="1. 0"? > <!-- message catalogue file for locale sk --> <catalogue xml: lang="sk"> <message key="cocoon flow number guessing game">Hra hadanie cisiel</message> <message key="Guess a number between 1 and 10">Uhadni cislo od 0 do 10</message> <message key="No hint for you!">Bez napovedy!</message> <message key="No. Of. Tries. Message">Skusas {0} krat. </message> <message key="Submit">Hadaj!</message> <message key="Success!">Uspech!</message> <message key="The Number was: ">Cislo bolo: </message> <message key="No. Of. Tries. Succes. Message">Uhadli ste na {0} pokusov. </message> <message key="Nope, higher!">Nie, vyssie!</message> <message key="Nope, lower!">Nie, nizsie!</message> <message key="Play again">Hrat znova</message> </catalogue>
Zhrnutie n n V naších projektoch sa ako integračná technológia používa Apache Cocoon, konkrétne jeho blok Portal Engine Vaše výsledky sa budú dať ľahko zapojiť ak: n n Budú v Jave Ak majú GUI, tak ho realizujú pomocou Cocoonu (Generátor, Šablóna, . . . )
- Slides: 31