Internetové technologie na platformě JAVA. Miroslav Hrúz
|
|
- Eva Jandová
- před 9 lety
- Počet zobrazení:
Transkript
1 České vysoké učení technické v Praze Fakulta elektrotechnická ČVUT FEL katedra počítačů Bakalářská práce Internetové technologie na platformě JAVA Miroslav Hrúz Vedoucí práce: Ing. Andrej Zachar Studijní program: Elektrotechnika a informatika strukturované bakalářské Obor: Informatika a výpočetní technika srpen 2007
2 ii
3 Poděkování Chtěl bych poděkovat firmě SimpleWay s.r.o., kde jsem měl tu možnost seznámit se s technologiemi, které popisuji ve svojí bakalářské práci. iii
4 iv
5 Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze dne v
6 vi
7 Abstract The goal of this bachalor thesis is to show possibilities of the Java platform for building web applications. Content of this paper is from on piece a recherche and from other piece an implementation. In the beginning I make the reader acquainted with technologies like Java EE, Spring framework and Hibernate ORM. In the next section I show the principles of Extreme programming and Test-Driven development. In the last section I apply knowledges of foregoing parts to the practical project, to the portal for seeking roommates. I show illuminating apply of Extreme programming in the real life. Abstrakt Cílem této bakalářské práce je ukázat možnosti JAVA platformy pro tvorbu webových aplikací. Obsah díla je z části rešeršní, z části implementační. V úvodu seznamuji čtenáře s technologiemi jako Java EE, Spring framework a Hibernate ORM. V další části ukazuji principy Extrémního programování a Testem řízeného vývoje. V poslední části aplikuji teoretické znalosti z předchozího textu na praktickém projektu, portálu pro hledání spolubydlících. Ukazuji názornou aplikaci Extrémního programování v každodenním životě. vii
8 viii
9 Obsah Seznam obrázků xiii 1 Úvod Nároky a technická obtížnost textu Typografická úprava a členění textu Rešerše Java EE Vícevrstvá architektura (N-tier architecture) Koncept kontejneru Aplikační servery Servletové kontejnery Java EE aplikační servery Výběr technologií Spring framework Aplikační framework Historie Hlavní přednosti Moduly Inversion of Control Dependecy lookup Dependecy injection Rozhraní BeanFactory a ApplicationContext BeanFactory Životnost beany Typové konverze Autowiring ApplicationContext Spring Web MVC Návrhový vzor MVC Rozdělení webových frameworků Architektura Dispacher servlet Webové scopy Spring Web Flow Struktura Stavy Výhody Nevýhody Scope Syntax Konfigurace Hibernate ORM framework JPA Mapování Anotace Práce s objekty ix
10 2.3.6 Dotazy HQL API Criteria API Lazy, Eager loading Integrace se Springem Deklarativní transakce Extrémní programování Historie Role Základní postupy Plánovací hra Malé iterace Metafora Testování Jednoduchý návrh Refaktorování Párové programování Kolektivní vlastnictví kódu ti hodinový pracovní týden Zákazník na správném místě (On-site customer) Standardní podoba kódu Sjednocené pracovní prostředí Testovací framework JUnit JUnit 3.x Architektura Assert Integrace s IDE JUnit 4.x Hlavní změny oproti 3.x assertthat Předpoklady a teorie Testovací framework JMock Mockování, Mock objekty Architektura Příklad Implementace Zadání Analýza Co už je naimplementováno? Průzkum trhu Prototypy Implementace Iterace Iterace Iterace Iterace Zhodnocení Shrnutí Možnosti rozšíření x
11 4.3 Osobní zkušenosti Obsah přiloženého CD 61 6 Literatura 63 7 Seznam použitých zkratek 65 xi
12 xii
13 Seznam obrázků 2.1 Kontext Java EE technologií, zdroj: [6] Spring framework, zdroj: [13] Princip IoC, zdroj: [13] Návrhový vzor MVC, zdroj: [15] MVC implementace JSP Model 2, zdroj: [1] Architektura aplikace ve Spring MVC, zdroj: [20] Stavy objektu a přechody pomocí metod persistent manageru, zdroj: [17] Průběh vývoje v XP Základní UI prototyp Vkládání nového inzerátu Validace položky Nový inzerát více lokalit Hledání v poptávkách xiii
14 xiv
15 KAPITOLA 1. ÚVOD 1 1 Úvod Internet se v dnešní době stal nepostradatelnou záležitostí, můžeme ho využívat různými způsoby a vydolovaných informací je více než dost. Je to v dnešní době, stále, nejperspektivnější reklamní médium na světě. Zákazníků, přejících si mít na internetu svoji prezentaci stále přibývá. Není proto od věci se seznámit s technologiemi použitými pro vývoj internetových aplikací. Tato práce pojednává o tvorbě rozsáhlejších aplikací na platformě JAVA. JAVA spolu s technologiemi.net a Ruby on rails vede žebříčky statistik použitých platforem [12] a pokud si zvolíme vhodnou metodiku vývoje, aplikace nám roste pod rukama velice rychle. 1.1 Nároky a technická obtížnost textu Práce by měla sloužit jako studijní materiál všem, kteří mají zájem vyvíjet internetové aplikace na platformě Java. Předpokládám proto patřičnou znalost tohoto jazyka. Je dobře, pokud má čtenář znalost vývoje webových aplikací na jiné platformě (například s PHP). Na škodu nejsou zkušenosti s vývojem pro Java EE, znalost tvorby JSP stránek nebo JPA, plně postačuje absolvování předmětu X36TJV - Technologie programování v jazyku Java, vyučovaného u nás na fakultě. 1.2 Typografická úprava a členění textu Veškerý text je psán pomocí nástroje L A TEX, s použitím připravené šablony, kterou poskytuje katedra. Text je členěn hierarchicky do kapitol, sekcí a podsekcí. Pro lepší čitelnost a orientaci v textu budu veškerý kód psát takto, pokud budu v textu hovořit o rozhraních, zapisuji je takto. Třídy a metody zapisuji takto. Práce je psána v češtině, ačkoliv je IT odvětví charakteristické všemožnými anglickými termíny, tam, kde to lze, jsem použil jejich český ekvivalent s originálním zněním v závorkách.
16 2 KAPITOLA 1. ÚVOD
17 KAPITOLA 2. REŠERŠE 3 2 Rešerše 2.1 Java EE Java Enterprice Edition je platforma určená pro vývoj byznys aplikací. Stávající specifikace Java EE 5 definuje řadu technologií a API potřebných pro vývoj rozsáhlých systémů. Dříve se platforma označovala zkratkou J2EE, z marketingových důvodů, stejně jako JRE 1.5 se označuje Java 5, se přejmenovala na Java EE. Aktuálně je celé JVM opensourceováno a Javě nic nestojí v cestě stát se nejpoužívanější platformou od mobilních telefonů po velké byznys aplikace. Kromě standardních API jsou k dispozici stovky opensourceových knihoven, frameworků a projektů. Nejdříve se seznámíme se základy. Obrázek 2.1: Kontext Java EE technologií, zdroj: [6] Vícevrstvá architektura (N-tier architecture) Architektura byznys aplikace v Java EE se typicky skládá z částí, jež ukazuje obrázek 2.1. Vždy se jedná o model klient/server [2], resp. request/response, serverová část se skládá z webového kontejneru, doplněného v případě použití specifikace EJB o EJB kontejner, dále jakéhokoliv perzistentního datového úložiště (představme si například klasickou relační databázi) a nějakého klienta, v našem případě webového prohlížeče Koncept kontejneru Kontejner je takový softwarový objekt, který je alokován uvnitř daného aplikačního serveru nebo aplikačního frameworku. Zodpovídá za přidělování zdrojů daným komponentám. Řídí životní cyklus objektů. Někdy se pojmy jako framework a kontejner záměrně zaměňují, např. EJB a EJB kontejner, Spring a Spring kontejner Aplikační servery Aplikační server je jádrem Java EE technologie. Podle počtu implementovaných specifikací je můžeme rozdělit do dvou skupin
18 4 KAPITOLA 2. REŠERŠE Servletové kontejnery Implementují pouze webový kontejner a technologie v něm dostupné, viz 2.1. Jeho nasazení je vhodné obecně pro menší a střední aplikace. Cílem mojí práce je ukázat, že i bez těžkotonážního kanónu jménem EJB jsme schopni vytvořit robustní aplikaci přesně podle našich představ. Mezi zástupce této kategorie patří Apache Tomcat - opensource projekt vydaný pod Apache licencí, nejběžnější a nejdostupnější vůbec. Jetty - opensource, webový server pro statický a dynamický obsah, optimalizace pro výkon Java EE aplikační servery stacku. Narozdíl od předchozí kategorie, Java EE AS implementují plnou specifikaci z Java EE GlassFish (Sun Java AS) - opensource řešení od Sun Microsystems, referenční implementace JBoss AS - opensource IBM Websphere AS - komerční, vlastní implementace JVM BEA WebLogic AS - komerční Výběr technologií Při výběru aplikačního serveru musíme zvážit, co daný projekt opravdu potřebuje, jaký používáme aplikační framework, jaký ORM nástroj nebo jaké další API jsou nezbytné, popřípadě jaké používáme IDE. V zásadě bychom měli zvolit jednoho dodavatele řešení a nekombinovat dodavatele JVM, AS, frameworku a dalších API a knihoven nebo zvolit takovou kombinaci, která je odzkoušená a bezproblémová; například Sun JVM, Glassfish AS, JSF, EJB, Toplink Essentials a NetBeans IDE, vše pěkně standardní nebo v našem případě Sun JVM, Apache Tomcat, Spring framework, Spring Web MVC a WebFlow, Hibernate a Eclipse IDE. 2.2 Spring framework Aplikační framework Aplikace se dnes netvoří celé od základů, spíše se podobají stavebnicím. Proč bychom měli znovu objevovat kolo, když už ho někdo před námi vymyslel a funguje dobře. Framework je softwarový systém, který nám pomáhá řešit nejčastější problémy při implementaci, měl by zrychlovat a usnadňovat vlastní vývoj, řídit životní cyklus aplikace a pomáhat oddělit nízkoúrovňový kód od vlastní aplikační logiky daného zadání Historie Odlehčený J2EE framework Spring vznikl původně jako demo aplikace knihy Roda Johnsonna: Expert One-to-One: J2EE design and development z roku 2002, která ukázala v době EJB 2.0, že lze v J2EE programovat také jednoduše. Později, roku 2003 byl založen opensource projekt na portálu sourceforge.net, který vycházel z původního kódu a postupně se stal mezi vývojáři velmi populární. Dnes je Spring ve stabilní verzi 2.0, čas ukázal, že koncept,
19 KAPITOLA 2. REŠERŠE 5 který Rod Johnsonn navrhl je správný. Stávající Java EE 5 se velmi Springem inspirovala a budoucí specifikace Java EE 6 se plánuje Springu přiblížit ještě více Hlavní přednosti Snazší a příjemnější práce s J2EE, neinvazivnost, nenutí používat nic, co právě nepotřebujeme, objektově orientovaný návrh je důležitější než jakákoliv implementační technologie, JavaBeans jako silný konfigurační nástroj, testování je zásadní, Spring dělá kód snadněji testovatelný, modularita, umožňuje zvolit jen ty komponenty, které potřebujeme, usnadňuje práci s dalšími frameworky, použití jako sjednocující přístup rozličných technologií a implementací, usnadňuje práci s vyjímkami, kdy je zaobaluje do lépe čitelných. Obrázek 2.2: Spring framework, zdroj: [13] Moduly Důležitým aspektem je, že Spring lze použít i na servletovém kontejneru, dokonce i čistě s Java SE. Modulárnost je také docílena tím, že se skládá z více.jar archivů, základních i volitelných, přičemž si vybereme, co z něj chceme použít. Spring Core - hlavní jádro frameworku, jediný povinný modul, metodika Inversion of Control, rozhraní BeanFactory Spring DAO - abstrakce a zjednodušení práce s JDBC
20 6 KAPITOLA 2. REŠERŠE Spring ORM - integrace s ORM frameworky, vlastní implementace perzistentního API i na JRE 1.4 bez JPA Spring Web - integrace s webovými frameworky jako JSF, Struts2, Velocity, vlastní implementace webového frameworku Spring Web MVC Spring AOP - podpora aspektově orientovaného programování Spring J2EE - podpora pro EJB, JMX, JMS, web service Inversion of Control Návrhový vzor IoC je založen na tzv. Hollywoodském principu: Nevolejte mi, já zavolám vám. [5]. Aplikace se vzdává odpovědnosti za vytváření a nastavení instancí ve prospěch frameworku, resp. jeho IoC kontejneru. Jedná se o stěžejní vlastnost, proto ji ukážu na příkladu. Obrázek 2.3: Princip IoC, zdroj: [13] Zapíšeme třídu SampleContoller dvěma způsoby, jednak klasicky a jednak s využitím techniky IoC. SampleContollerWithoutIoC.java public class SampleContollerWithoutIoC implements org.springframework.web.servlet.mvc.controller { public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { Connection connection = DatabaseUtils.getConnection(); UserDAO dao = DAOFactory.createUserDAO("hibernate", connection); List users = dao.getusers(); DatabaseUtils.closeConnection(conn); return new ModelAndView("userList", "users", users); SampleContollerWithIoC.java public class SampleContollerWithIoC implements org.springframework.web.servlet.mvc.controller { private UserDAO dao = null; public void setuserdao(userdao userdao) { this.dao = userdao; public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { List users = dao.getusers();
21 KAPITOLA 2. REŠERŠE 7 return new ModelAndView("userList", "users", users); action-servlet.xml <?xml version="1.0" encoding="utf-8"?> <beans> <bean id="samplecontroller" class="samplecontollerwithioc"> <property name="userdao" ref="userdao"/> </bean> </beans> Ve třídě SampleContollerWithoutIoC jsme ručně nastavovali komponentu dao. Ve třídě SampleContollerWithIoC jsme ji dostali již nakonfigurovanou. Představme si příklad v kontextu reálného života, komponentu dao využívají desítky tříd. Co by se stalo, kdybychom byli nuceni změnit rozhraní tovární metody createuserdao? Museli bychom změnit i implementaci v desítkách tříd, které dao používají, což odporuje první zásadě OOP: Přidávej vlastnost jen na jednom místě!. 1 Účel souboru action-servlet.xml a vlastní konfigurace bean, jak vidíme v příkladu, řeším v kapitole Dependecy lookup Návrhový vzor IoC můžeme rozdělit do dvou technik, první z nich je dependecy lookup. Je to návrhový vzor, pomocí něhož objekt žádá kontejner o beanu. Toto řešení bylo použito v EJB 2.X v technologii JNDI, kdy požadovaná beana musela implementovat API specifické pro daný kontejner. Evoluce ukázala, že toto není nejvhodnější řešení. Spring jej používá pro získání beany z ruky. XmlBeanFactory beanfactory = new XmlBeanFactory("action-servlet.xml"); DemandService demandservice = (DemandService) beanfactory.getbean("demandservice"); Dependecy injection Druhou technikou IoC je návrhový vzor dependecy injection, který řeší samotné nastavení a nainjektování potřebných objektů a jejich závislostí. Vlastní vložení závislostí může probíhat pomocí Setter injection - Nainjektování závislostí pomocí JavaBeans setterů. Příklad je uveden v kapitole Constructor injection - Nainjektování závislostí pomocí konstruktoru. public class SampleContollerWithIoC implements Controller { private UserDAO dao = null; public SampleContollerWithIoC(UserDAO userdao) { this.dao = userdao; public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { 1 V takto jednoduchém příkladu to samozřejmě lze obejít, vývojář komponenty dao by byl nucen provést změnu s ohledem na kompatibilitu, každopádně je to problém, do kterého se nemusíme dostat.
22 8 KAPITOLA 2. REŠERŠE List users = dao.getusers(); return new ModelAndView("userList", "users", users); action-servlet.xml <bean id="samplecontroller" class="samplecontollerwithioc"> <constructor-arg ref="userdao"/> </bean> Method injection - Použití pro speciální případy, pro netriviálnost zde neuvedu příklad. 2 Mezi další typ dependecy injection, který Spring avšak nepodporuje, patří Interface injection, na kterém je založen kontejner frameworku Avalon. Nejpoužívanější je metoda Setter injection, nejčastěji z těchto důvodů: je jednodušší pracovat s defaultními hodnotami properties daného objektu, pomocí getteru získáme okamžitě hodnotu dané property, settery mohou být v případě potřeby volány vícekrát, což konstruktor být nemůže, gettery/settery jsou zděděny na rozdíl od konstruktorů jako klasické metody Rozhraní BeanFactory a ApplicationContext BeanFactory BeanFactory je ústřední částí celého frameworku, řídí životní cyklus, konfiguraci a vlastní injektaci všech bean. Kontejner startuje podle nasazení aplikace, např. na aplikačním serveru pomocí definice v deployment deskriptoru web.xml nebo v JUnit testovací sadě pomocí připravených startovacích API, můžeme ho také samozřejmě nainicializovat ručně, jak jsme viděli v kapitole Manageovaný objekt může být jakýkoliv, v této souvislosti se mluví o tzv. POJO, což v překladu znamená starý dobrý java objekt. Je to jakýkoliv objekt, který není nucen dodržovat implementační omezení dané platformy. Vlastní konfigurace vzájemných vztahů bean můžeme definovat pomocí: XML - nejčastější a nejpřehlednější zápis, odděluje konfiguraci od vlastního použití, anotací - podobně jako EJB, je konfigurace zapsána v POJO, JavaBean properties, Jakarta Commons atributes. Pokud využíváme XML konfigurace, máme minimálně jeden kořenový konfigurační soubor, nazveme jej např. applicationcontext.xml, na který ve webovém nasazení ukazuje depoloyment descriptor. web.xml 2 Pokud chceme nainjektovat beany s různými scopy (viz ), nevystačíme si s setter injection, čtenáře odkazuji na referenční dokumentaci Springu [13].
23 KAPITOLA 2. REŠERŠE 9 <?xml version="1.0" encoding="utf-8"?> <web-app> <!-- Context Configuration locations for Spring XML files --> <context-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/applicationcontext.xml</param-value> </context-param> <!-- Base dispacher s servlet mapping --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <init-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/action-servlet*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> </web-app> Kromě kořenového aplikačního kontextu 3 nadefinujeme servlet, který se vždy stará o jeden typ požadavků (v našem případě o vše s příponou.html), které zpracovává DispacherServlet. Podrobněji je tomu věnována kapitola Jelikož budu mluvit o jedné jediné konfiguraci, budu ApplicationContext.xml a action-servlet.xml vědomě zaměňovat. Víme, kam zapsat XML konfigurace, aby se automaticky načetly, podíváme se ted na základní syntaxi. Hodnotu do property dané beany můžeme zapsat bud to rovnou, <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" <bean id="bean" class="samplebean"> <property name="property" value="value"/> </bean> </beans> nebo odkazem na jinou beanu. <bean id="bean" class="samplebean"> <property name="property" ref="bean2"/> </bean> <bean id="bean2" class="samplebean2" /> Životnost beany výraz. 3 Nic nám nebrání mít kořenových konfiguračních souborů více, v tagu <param-value/> může být regulární
24 10 KAPITOLA 2. REŠERŠE Každá beana má z hlediska konverze IoC kontejneru s klientem svoji životnost (obor viditelnosti), které říkáme scope. Kromě definice závislostí beany, Spring jednoduše dovoluje si zvolit i její scope. Od verze 2.0 můžeme vytvářet beany 5ti (resp. 6ti) scopů. sigleton - existuje jen jedna instance, která se vytvoří při první injekci, u dalších se injektuje tato, prototype - pro každou injektaci se vytvoří nová instance, request - beana platí po dobu HTTP requestu, 4 session - beana platí po dobu HTTP session, global session - beana platí po dobu HTTP global session, custom - pokud potřebujeme nestandardní řešení, Spring dovoluje definovat vlastní. prototype Defaultně se vždy použije singleton. Je to logické, ve většině případů nás stav beany nezajímá a plně si s tím vystačíme, pokud ale potřebujeme vytvářet pokaždé nové instance, tj. chceme zohledňovat stav beany, musíme uvést explicitně parametr scope. <bean id="bean3" class="samplebean3" scope="prototype" /> web scopes Jako příklad uvedu následující beany: <bean id="loginaction" class="loginaction" scope="request"/> <bean id="userpreferences" class="userpreferences" scope="session"/> <bean id="userpreferences" class="userpreferences" scope="globalsession"/> Po každém HTTP requestu se vytvoří nová instance beany loginaction, zatímco intuitivně beana userpreferences má mít platnost po celou dobu relace. Ve většíně případů ve webové aplikaci si při definici bean vystačíme pouze s prvními dvěma standardními scopy. Pokud potřebujeme nainjektovat beanu s webovým (nebo custom) scopem do beany se standardním scopem, musíme k tomu požít chytrého objektu - proxy, který nainjektovanou beanu zastupuje. Při volání metody beany proxy získá objekt ze scopu a deleguje její volání. <bean id="userpreferences" class="com.foo.userpreferences" scope="session"> <aop:scoped-proxy/> </bean> <bean id="userservice" class="com.foo.simpleuserservice"> <property name="userpreferences" ref="userpreferences"/> </bean> K webovým scopům však nejčastěji přistupujeme jako ke kontejnerům, do kterých ukládáme objekty (a z nich vybíráme) programově. Tuto praktiku ukazuji spolu s SWF scopy v kapitolách , Tyto 3 tzv. webové scopy mají smysl pouze ve webové aplikaci s použitím webové implementace ApplicationContextu - s XmlWebApplicationContext.
25 KAPITOLA 2. REŠERŠE Typové konverze Typová konverze je způsob převodu hodnot zapsaných v XML deskriptoru na reálné objekty. Chtěli bychom například zapsat něco jako <bean id="bean" class="samplebean"> <property name="measure" value="90/60/90"/> </bean> public Class SampleBean { private Measure measure; public Measure getmeasure() { return measure; public void setmeasure(measure measure) {this.measure=measure; Spring nám nabízí možnost implementace Property editoru, na který se kontejner obrátí v případě, že v setteru narazí na daný typ, který neumí automaticky dosadit. public class MeasurePropertyEditor extends java.beans.propertyeditorsupport public void setastext(string measure) throws IllegalArgumentException { try { //set data from String to value setvalue(value); catch (NumberFormatException e) { throw new IllegalArgumentException(); Implementaci metody setastext nechávám na čtenáři. Kromě ní existuje inverzní metoda getastext(). Property editor zaregistrujeme například do beany customeditorconfigurer, kterou umístíme na viditelné místo z ApplicationContextu. <bean id="customeditorconfigurer" class="org.springframework.beans.factory.config.customeditorconfigurer"> <property name="customeditors"> <map> <entry key="measure"> <bean class="measurepropertyeditor" /> </entry> </map> </property> </bean> Autowiring Ohledně Spring IoC kontejneru stojí za to zmínit ještě jednu zajímavou vlastnost - autowiring. <bean id="bean" class="samplebean" autowire="byname" /> Tím řekneme Sprigu, aby se pokusil automaticky vyřešit závislosti injektovaných bean sám, bez nutnosti je explicitně uvádět. Hodnota v parametru autowire může nabývat nejčastěji následujících hodnot: no - žádný autowiring,
26 12 KAPITOLA 2. REŠERŠE byname - Spring hledá ve svém ApplicationContextu beanu, podle jména JavaBean property, bytype - Spring hledá beanu podle typu JavaBean property, funguje pouze pokud se v beaně nevyskytuje více properties stejného druhu ApplicationContext Rozhraní ApplicationContext obaluje BeanFactory a rozšiřuje její funkcionalitu o internacionalizaci, publikování událostí nebo nahrávání zdrojů. Ukáži na příkladu internacionalizaci, resp. použití souboru.properties, kde uvádíme k danému klíči jeho hodnotu. Sample.properties bean.value = someothervalue Kdekoliv v naší XML konfiguraci tyto proměnné můžeme pomocí Expression Language 5 použít, například takto. <bean id="bean" class="samplebean"> <property name="property" value="${bean.value"/> </bean> Vše bude fungovat, pokud doplníme ApplicationContext o beanu <bean id="propertyconfigurer" class="org.springframework.beans.factory.config. PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:sample.properties</value> </list> </property> </bean> Spring Web MVC V této kapitole představím webové frameworky, vysvětlím cestu, jak jsme se k nim dostali a ukážu Springovskou implementaci webového frameworku Spring Web MVC. Jako všechny moderní webové frameworky je Spring MVC, jak už jeho název napovídá, založen na návrhovém vzoru Model View Controller Návrhový vzor MVC Z historického pohledu se před nástupem JSP používaly pouze servlety, s nimiž se výsledný HTML výstup generoval obtížně. Z dnešního pohledu je tento způsob vhodný jen pro nejjednodušší případy. Při příchodu specifikace JSP 1.0 byla zvolena architektura tzv. Model 1, kdy je HTTP požadavek delegován přímo na příslušnou JSP stránku, v níž je umístěn veškerý kód pomocí skriptletů. 6 Tento přístup se dnes označuje termínem špagetový kód, postrádáme tu jakékoliv 5 EL se primárně používá pro vyhodnocování výrazů na JSP stránkách, pro přístup k hodnotám z Command Objektů a podobně. 6 Skriptlet je speciální tag, v němž je umístěn přímo Java kód <% /*java code here*/ %>.
27 KAPITOLA 2. REŠERŠE 13 Obrázek 2.4: Návrhový vzor MVC, zdroj: [15] rozdělení do vrstev, centralizovaný přístup HTTP požadavků a potenciální možnost rozšíření aplikace. Specifikace JSP 1.1, kromě přístupu psaní logiky aplikace pomocí tagů, přinesla implementaci návrhového vzoru MVC (obrázek 2.4), kterou označujeme jako Model 2. Obrázek 2.5: MVC implementace JSP Model 2, zdroj: [1] MVC slouží k oddělení aplikační, prezentační logiky a datového modelu. Není použit jen ve webových frameworcích, ale například v desktopových aplikacích u knihoven Swing a SWT. Jeho kořeny můžeme najít ve Smalltalku, kdy byl původně použit pro zakomponování klasického postupu vstup-zpracování-výstup do GUI programů. Controller - prostředník mezi vrstvami Model a View Model - představuje vlastní data zobrazovaná ve View View - transformuje Model do prezentační podoby Jelikož HTTP protokol je typu request/response, tedy bezestavový, nemůžeme zde aplikovat typický MVC pattern. Model 2 je upravené MVC schéma, kdy jediný rozdíl spočívá v tom, že View nemůže volat Controller. Vzájemnou interakci si můžeme představit tak, že klient pošle požadavek na webový server, ten je vzápětí delegován na servlet, který představuje controller, servlet zavolá aplikační
28 14 KAPITOLA 2. REŠERŠE logiku, ze které získá model, ten zaregistruje do scopu viditelného z JSP, které představuje view. Následně provede přesměrování na View a posléze na JSP, které si vyzvedne data ze scopu a ten výsledek zobrazí.[15] V prostředí webu existuje několik implementací, které odpovídají návrhovým vzorům: Front Controller (Service to worker) - frameworky Struts, Spring Web MVC, WebWork, Ruby on Rails Dispacher view (View helper) - frameworky JSF-based (JSF, Seam, Shale), Tapestry, Wicket, Echo2 Rozdíl mezi přístupy je v okamžiku volání aplikační logiky. V případě Front Controller u se aplikační logika volá před předáním zpracování do View, zatímco u Dispacher View se volá aplikační logika uvnitř View pomocí View Helper u[3] Rozdělení webových frameworků Nejdůležitější roli hraje úroveň abstrakce nad protokolem HTTP. Čím větší je úroveň abstrakce, tím méně se musí jednotlivé vrstvy starat o samotný protokol. Takto dělíme webové frameworky do dvou skupin Požadavkově orientované (Request based) - založené na Front Controlleru, Komponentově orientované (UI component based, event-based) - založené na View Helperu. Budoucnost patří komponentově orientovaným webovým frameworkům. Ty umožňují vývojáři pracovat na úrovni UI komponent a událostí, tedy stejně jednoduše jako s dalšími např. s desktopovými frameworky (Swing, SWT). Snadno například vytvoříme RAD nástroj pro WYSIWYG editaci webové aplikace Architektura Obrázek 2.6: Architektura aplikace ve Spring MVC, zdroj: [20] Architektura aplikace ve Spring Web MVC je rozdělena do navzájem nezávislých vrstev, jak vidíme na obrázku 2.6. User Interface - prezentační vrstva, stará se o generování výstupu k uživateli (nejčastěji XHTML), většinou použito JSP, ke kterému existují implementace rozhraní View
29 KAPITOLA 2. REŠERŠE 15 org.springframework.web.servlet.view.jstlview. Jako příklad si uvedeme jednoduchou JSP stránku. 7 SampleJSP.jsp <?xml version="1.0" encoding="utf-8"?> <html><body> <c:choose> <c:when test="${1 + 1 == 10"> we count in binary base </c:when> <c:otherwise> we don t count in binary base </c:otherwise> <c:choose> </body></html> Web - webová vrstva řeší přechody mezi stránkami a odstiňuje servisní vrstvu od vlastní implementace. Hlavní rozhraní v této vrstvě je Controller. AbstractController - základní abstraktní kontrolér BaseCommandController,AbstractCommandController - pracuje s Command Objectem, tj. objekt, do kterého namapujeme vstupní hodnoty z hodnot získaných HTTP requestu, ten pak používáme ve View vrstvě SimpleFormController,AbstractSearchController - umožňuje například přechody mezi jednotlivými obrazovkami pomocí reakce na výsledek metody MultiActionController - umožňuje reagovat na více typů HTTP requestů, defaultně se metoda obsluhující danou namapovanou stránku jmenuje stejně jak tato stránka UrlFilenameViewController - pomocí namapované stránky zobrazí JSP se stejným jménem Příklad na takový jednoduchý kontrolér je uveden hned v kapitole Service - V této vrstvě se nachází implementace daných byznys requirementů, jako jediná má přístup k perzistentní vrstvě. Jelikož je tato vrstva obvykle v každé aplikaci jiná, Spring k ní nenabízí žádné rozhraní. Jako příklad ukážu rozhraní IUserService public interface IUserService { public boolean isloginfree(string login); public AbstractUser getuser(string login); public boolean saveuser(abstractuser user); Persistence - Perzistentní vrstva implementuje ukládání,nahrávání a práci s objekty datového modelu z databáze. Nejčastěji implementuje metody CRUD (create,retrieve,update,delete). Spring ve svém ORM modulu dovoluje použít deklarativní transakce imlementované pomocí AOP nebo zaobaluje méně čitelné vyjímky do čitelnějších. Spolupráce s Hibernate frameworkem je hlavně docílena pomocí tříd HibernateTemplate 7 Uvedené tagy začínající XML namespacem c nebo ftm jsou součástí knihovny JSTL, kde jsou definovány základní tagy pro větvení kódu, zobrazování, iterace, definování a používání proměnných nebo pro formátování textu.
30 16 KAPITOLA 2. REŠERŠE HibernateDaoSupport Jako příklad zde uvedu rozhraní IOfferDao. Ukázku deklarativních transakcí spolu s implementaci rozhraní IOfferDao si ukážeme v kapitole public interface IOfferDao { void saveorupdate(offer offer); Offer getofferbyid(long id); Offer getofferby(inzerent inzerent); void delete(offer offer); List<Offer> gettopitems(int maxresult); Domain model - datový model, soubor tzv. Bussiness Objectů, které abstrahují entity z doménového modelu do programu, který s nimi pracuje, nakonfigurovaných pro O/R mapování daným perzistentním nástrojem. Ukážeme si jednoduchý příklad se zápisem pomocí JPA anotací. public class Inzerent extends AbstractUser { private String firstname = ""; private String lastname = ""; private String telephone = ""; //appropriate getters and setters Podrobněji se této problematice věnuji v kapitole Dispacher servlet DispacherServlet je Front Controller, jak jsem ukázal v kapitole Nyní si ukážeme jednoduchý příklad, kde dáme vše probrané v této kapitole do kontextu. V deployment deskriptoru jsme nadefinovali pro všechny přístupy na *.html obsluhu servletu action, jemuž odpovídá konfigurace action-servlet.xml 8, jak je uvedeno v kapitole V action-servlet.xml nadefinujeme: <bean id="urlmapping" class="org.springframework.web.servlet.handler.simpleurlhandlermapping"> <property name="alwaysusefullpath" value="true" /> <property name="mappings"> <props> <prop key="/sample-web-page.html">samplecontroller2</prop> </props> </property> </bean> <bean id="samplecontroller2" class="samplecontroller2"> <property name="view" value="samplejsp" /> </bean> 8 Podle jména servletu action se přidá automaticky -servlet.
31 KAPITOLA 2. REŠERŠE 17 Tedy každý požadavek o sample-web-page.html bude zpracovávat beana samplecontroller2, ta má nasetovánu JSP stránku 9, která se ve výsledku zobrazí. Implementace třídy SampleController2 bude velmi podobná příkladu SampleContollerWithIoC u kapitoly public class SampleContoller2 implements org.springframework.web.servlet.mvc.controller { private String view; public void setview(string view) { this.view = view; public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { return new ModelAndView(view); Pokud potřebujeme jen jednoduše podle požadavku na sample-web-page.html zobrazit jen JSP stránku a nic jiného, tak k tomu použijeme kontrolér UrlFilenameViewController, který hledá View a posléze JSP se stejným jménem jako je html požadavek. V příkladu by stačilo změnit odpovídající kontrolér. <bean id="urlfilenameviewcontroller" class="org.springframework.web.servlet.mvc.urlfilenameviewcontroller" /> Webové scopy Jak jsem zmínil v kapitole , častěji k webovým scopům přistupujeme jako ke kontejnerům pro data, jež mají být viditelná v rámci námi definovaného scopu. Request - platnost jen v průběhu jednoho HTTP požadavku, v requestu přichází parametry z HTTP GETu, Session - platnost v průběhu HTTP session, Global session - platnost v průběhu HTTP global session, Základní možnosti práce uvádím v následujícím příkladu, například s pomocí třídy org.springframework.web.context.request.dispatcherservletwebrequest. HttpServletRequest request; //gets as method parameter HttpSession session = request.getsession(); DispatcherServletWebRequest webrequest = new DispatcherServletWebRequest(request); Integer id = (Integer) request.getparameter("id"); id = (Integer) webrequest.getattribute("id", RequestAttributes.SCOPE_REQUEST); session.setattribute("string", id.tostring()); webrequest.setattribute("string", id.tostring(), RequestAttributes.SCOPE_SESSION); webrequest.setattribute("string", id.tostring(), RequestAttributes.SCOPE_GLOBAL_SESSION); 9 V tomto jednoduchém kontextu si můžeme představit například tu, jež jsem ukázal v kapitole
32 18 KAPITOLA 2. REŠERŠE Spring Web Flow Spring Web Flow je mocný nástroj pro definici toku obrazovek ve webové aplikaci. Snadno řeší problémy, které konvenční přístup řeší velmi neefektivně. Hlavní idea spočívá v klíčové abstrakci konverzace mezi uživatelem a serverem - ve flow. Flow je něco více než jednotlivý požadavek, něco méně než celá session. Jediné flow řídí celou konverzaci, když se od uživatele očekává nějaký vstup, flow je pozastaveno a čeká na uživatelův vstup. Klient ovládá konverzaci pomocí událostí, podle kterých se flow rozhoduje, co udělat dál Struktura Definice flow není nic jiného než konečný automat s počátečním stavem, množinou stavů, ve kterých se může nacházet, množinou konečných stavů a vlastními přechody do dalších stavů. Takovýto zápis provádíme bud to do XML souboru nebo do java kódu (použití při speciálních případech a napojeních na další systémy). Pro začátek zde uvedu úvodní zápis, ve kterém flow konfigurujeme. sample-flow.xml <?xml version="1.0" encoding="utf-8"?> <flow xmlns=" xmlns:xsi=" xsi:schemalocation=" </flow> Stavy Start State - Počáteční stav, jako u každého automatu je právě jeden. Parametr idref odkazuje na jiný stav. <start-state idref="actionstate" /> End State - Koncový stav, pokud je ve flow na nejvyšší úrovni, ukončí se jeho provádění, zresetují se všechny proměnné. <end-state id="endstate" /> View State - Stav, ve kterém dochází k vykreslení zadaného obsahu. <view-state id="viewstate"> <transition to="actionstate" /> </view-state> Action State - Stav, ve kterém dochází k nějaké akci, tj. zavolání metody dané beany a obvykle podle návratu následuje přechod do jiného stavu. <action-state id="actionstate" > <action bean="actionbean" method="sampleaction" /> <transition to="decisionstate" /> </action-state> Decision State - Stav, určený k větvení logiky, testuje podmínku, podle které přejde do dalšího stavu.
33 KAPITOLA 2. REŠERŠE 19 <decision-state id="decisionstate" > <if test="requestparameters.id gt 0" then="viewstate" else="subflowstate"/> </decision-state> SubFlow State - Do flow můžeme vnořit jiné flow jako subflow a pomocí koncového stavu daného subflow reagovat a přejít dle logiky aplikace. Vhodné pokud se určité sekvence stavů a přechodů opakují ve více flow. <subflow-state id="subflowstate" flow="inner-flow"> <transition on="ok" to="viewstate" /> <transition on="cancel" to="endstate"/> </subflow-state> Výhody Za hlavní výhody SWF můžeme bezpochyby označit: oddělení navigace od vlastního kódu, automatické řízení stavu aplikace, vyšší úroveň abstrakce, dovoluje volat metody střední vrstvy bez nutnosti použití kontroléru Nevýhody Spring Web Flow nemůžeme použít tam, kde kvůli velké práci, než se zprovozní jen jedna jediná obrazovka, se nám jej nevyplatí nasadit. Avšak po určité velikosti a složitosti přechodů mezi stránkami v aplikaci tato nevýhoda padá Scope Stejně jako webové scopy ve Spring Web MVC, existují ve SWF podobné kontejnery pro uložení jakýchkoliv krátkodobých dat. Přistupuje se k nim přes rozhraní Map pomocí instance třídy RequestContext. SampleFormAction.java public org.springframework.webflow.event sampleaction(org.springframework.web.servlet.support. RequestContext context) { Object object = context.getxxxscope().get("key"); context.getxxxscope().put("key",object); context.getexternalcontext().getrequestmap().put("key",object); Object object = context.getexternalcontext().getsessionmap().get("key"); context.getexternalcontext().getglobalsessionmap().put("key",object); context.getexternalcontext().getapplicationmap().put("key",object); return success(); kde za XXX dosadíme jeden za 4 scopů použitelných ve SWF: request - mají platnost pouze pro daný požadavek,
34 20 KAPITOLA 2. REŠERŠE flash - platí dokud uživatel neopustí aktuální stav, flow - platí pro celé flow, conversation - platí po dobu životnosti mateřského flow. Na příkladu vidíme, že pomocí třídy RequestContext máme přístup i ke klasickým webovým scopům představeným v kapitole , s tím rozdílem, že k nim přistupujeme jako k mapě. Poslední dosud nepředstavený je application scope, který platí v průběhu chodu celé aplikace. Nutno poznamenat, že data v jakémkoliv scopu, kromě singletonu, nejsou viditelná všemi uživateli dohromady Syntax <transition/> - Definujeme přechod do jiného stavu, parametry on, to, on-exception. Parametr to je povinný. Pokud provádíme ve stavu více akcí, přechod můžeme podmínit výsledkem právě jedné metody. <action-state id="actionstate" > <action bean="actionbean" method="sampleaction" /> <action bean="actionbean" method="sampleaction2" /> <transition on="sampleaction.success" to="decisionstate" /> <transition on-exception="exception" to="endstate" /> </action-state> <global-transitions/> - Vhodné použít, pokud se přechody v každém stavu z flow opakují. <global-transitions> <transition on="globalevent1" to="state1"/> <transition on="globalevent2" to="state2"/> </global-transitions> <xxx-actions/> - Pomocí tagu definujeme akce: <start-actions/> - akce se provedou po vstupu do flow, <end-actions/> - akce se provedou před koncem flow, <entry-actions/> - akce se provedou po vstupu do stavu, <exit-actions/> - akce se provedou před koncem stavu, <renderer-actions/> - akce se provedou před vlastním renderováním ve viewstate. <xxx-mapper/> - Tagem definujeme mapování do flow/z subflow: <input-mapper/> - vstupní mapování, <output-mapper/> - výstupní mapování. Pokud chceme v subflow přistoupit k datům z nadřazeného flow, máme 2 možnosti, jak toho dosáhnout. První možností je použít conversation scope, který je v subflow viditelný. Tímto ale daná data zviditelníme i pro všechny ostatní subflow. Další možností je použít mapování atributů. V hlavním flow definujeme:
35 KAPITOLA 2. REŠERŠE 21 <subflow-state id="samplesubflow" flow="sample-flow"> <attribute-mapper> <input-mapper> <mapping source="flowscope.number" target="number"/> </input-mapper> <output-mapper> <output-attribute name="result"/> </output-mapper> </attribute-mapper> <transition to="decisionstate"/> </subflow-state> Zápisem <mapping source="flowscope.number" target="number"/> vezmeme proměnnou number uloženou ve flow scope a předáme jí pomocí input-mapperu do subflow. Zápisem <output-attribute name="result"/> získáme proměnnou result z output-mapperu a předáme jí do flow scope tohoto flow. V subflow je ovšem musíme definovat také: <flow> <input-mapper> <input-attribute name="number"/> </input-mapper>... some logic <end-state id="finish"> <output-mapper> <output-attribute name="result"/> </output-mapper> </end-state> </flow> Zápisem <input-attribute name="number"/> získáme pomocí input-mapperu proměnnou number do flow scope, zápisem <output-attribute name="result"/> umístěným v koncovém stavu mapujeme proměnnou result z flow scope do output-mapperu. redirect - Pokud chceme násilně přesměrovat tok aplikace, převážně použijeme jeden ze dvou hlavních přístupů: flowredirect - přesměrování na jiné flow, externalredirect - přesměrování na kompletně jiný HTTP požadavek 10. <end-state id="finish" view="flowredirect:sampleflow"/> <end-state id="finish" view="externalredirect:sample-web-page.html"/> Pro kompletní přehled syntaxe a práci s SWF odkazuji čtenáře na referenční dokumentaci SWF. [14] 10 Rozdíl je samozřejmě ten, že ve druhém případě se postupuje k dispacher servletu, zatímco první případ zůstává ve flowcontrolleru.
36 22 KAPITOLA 2. REŠERŠE Konfigurace SWF zapojíme do naší aplikace tím, že přidáme následující beany do XML deskriptoru Springu. action-servlet.java <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:flow=" xsi:schemalocation=" <bean name="/sample-web-page.html" class="org.springframework.webflow.executor.mvc.flowcontroller"> <property name="flowexecutor" ref="flowexecutor" /> </bean> <!-- Launches new flow executions and resumes existing executions. --> <flow:executor id="flowexecutor" registry-ref="flowregistry"/> <!-- Creates the registry of flow definitions for this application --> <flow:registry id="flowregistry"> <flow:location path="/web-inf/sample-flow.xml"/> </flow:registry> <!-- All formactions in application --> <bean id="formaction" class="sampleformaction" /> </beans> Uvedená konfigurace je opravdu základní, pro větší počet stránek a flow se nehodí. Lepší konfigurace je uvedena v implementaci portálu jehož zdrojové kódy jsou obsaženy na přiloženém CD. 2.3 Hibernate Tato část by měla čtenáři osvětlit použití perzistentní vrstvy ve webové aplikaci. Vysvětlím cestu k ORM frameworkům, jejich dnešní standard JPA a blíže se podíváme na jednu z implementací - JBoss Hibernate framework ORM framework Z historického pohledu existuje více přístupů, jak řešit problém s napojením perzistentní vrtsvy k javovské aplikaci. Problém spočívá v tom, že zde máme dva přístupy - OOP přístup používaný v Javě a relační přístup používaný v relačních databázích. JDBC - vlastní implementace perzistentní vrstvy pomocí JDBC API, zápis SQL dotazů a metod DAO tříd, které volají příslušné procedury - příliš zdlouhavé, dnes v podstatě přežitek Serializace - ukládání/načítání serializovatelných hierarchií objektů do/z souboru nebo DB - pracuje se jen s celými hierarchiemi - nevhodné
37 KAPITOLA 2. REŠERŠE 23 Objektová DB - použití objektového databázového stroje, neexistuje jediné řešení, které by se prosadilo v praxi EJB 2.x Entity Beany - starší EJB 2.x specifikace, v 3.0 se přešlo k ORM-based JPA Dlouhou dobu převládal první způsob, až do doby, kdy se objevily první ORM nástroje jako Castor a Hibernate. ORM je mapovací nástroj mezi OOP světem, kde základní nosič dat je třída, vztah mezi objekty je definován kompozicí a je vždy jednosměrný, a mezi světem relační DB, kde nosičem dat je tabulka, sloupce definují atributy entity a vztah (relace) mezi tabulkami je definován pomocí cizích klíčů nebo vztahové tabulky a je vždy obousměrný. ORM mapuje třídy na tabulky, jejich instance na jednotlivé řádky tabulky JPA Java Persistence API je dnešní standard, který popisuje základní myšlenky ORM. Hibernate 3.x byl přepsán, aby odpovídal tomuto standardu. Jako referenční implementace byl zvolen framework Oracle Toplink Essentinals. Mezi další hlavní ORM řešení patří: Oracle Toplink - komerční Apache ibatis - opensource JBoss Hibernate - opensource Řešení používající JPA jej berou jako základní balík vlastností, budeme-li používat čistě samotné JPA, teoreticky bychom mohli vyměnit jeden ORM framework za jiný bez změny jediné řádky kódu. JPA bohužel neřeší všechny problémy a tak jsou frameworky nuceny používat vlastní nestandardní řešení Mapování Vlastní mapování z objektů na tabulky zapisujeme v JPA pomocí anotací. U Hibernate se také můžeme setkat se zápisem metadat pomocí XML nebo XDoclet. Zde ukážu jen první způsob, protože se jedná o standard. Anotace zapisujeme bud to před atribut třídy, kde framework používá pro přístup k položkám Java Reflection API (gettery/settery nemusí být vůbec implementovány), nebo do getteru JavaBean třídy, kdy framework pro přístup používá volání getterů/setterů[19]. JavaBeans přístup je public class Customer implements Serializable { private Integer id; private public Integer getid() {return id; public void setid(integer id) { this.id = id; public String getname() { return name; public void setname(string name) { this.name = public class Producer implements Serializable { private Integer id; private String name; private List<Customer> customers;
Spring framework 2.0. Roman Pichlík http://sweb.cz/pichlik/ CZJUG http://java.cz/jug
Spring framework 2.0 Spring framework 2.0 Roman Pichlík http://sweb.cz/pichlik/ Nejdůležitejší slide http://springframework.org/ http://www.springframework.org/documen Historie 2002 - Rod Johnson kniha
Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java
KIV/PIA 2013 Jan Tichava
KIV/PIA 2013 Jan Tichava Java EE JSF, PrimeFaces Spring JPA, EclipseLink Java Platform, Enterprise Edition Persistence Zobrazovací vrstva Interakce aplikací Deployment Java Persistence API Enterprise
Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/
Nástroje a frameworky pro automatizovaný vývoj Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/ Proces vývoje webové aplikace Předepsaná adresářová struktura. Kompilace zdrojových kódů.
Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu
Servlety a JSP Petr Adámek, petr.adamek@ibacz.eu Úvod Rekapitulace vstupních znalostí Standardy Nástroje (Běhové prostředí, nástroje pro vývoj) Servlety JSP JSP značky EL (Expression Language) Internacionalizace
PA165: Úvod do Java EE. Petr Adámek
PA165: Úvod do Java EE Petr Adámek Obsah přednášky Organizace předmětu Formy výuky Hodnocení Osnova Java EE aplikace Architektury Java EE aplikací Technologie Java EE Základní koncepty PA165: Úvod do Java
Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links
Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links links Apache Struts Article with examples JSTL a EL (into JSP) MVC, webové aplikace, JSP Bezpečnost ve webových
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký 1, Miroslav Beneš 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2005/2006 c 2006 Michal Krátký, Miroslav Beneš Tvorba informačních
Semináˇr Java X J2EE Semináˇr Java X p.1/23
Seminář Java X J2EE Seminář Java X p.1/23 J2EE Složitost obchodních aplikací robusní, distribuované, spolehlivé aplikace s transakcemi na straně serveru, klientské aplikace co nejjednodušší Snaha : Návrh,
(Enterprise) JavaBeans. Lekce 7
(Enterprise) JavaBeans Lekce 7 JavaBeans vs. Enterprise JavaBeans (EJB) JavaBeans technologie: jedná se o tzv. komponentní architekturu určenou pro JSE platformu určená pro tvorbu JSE GUI programů pomocí
1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:
Architektura webové aplikace, funkce jednotlivých vrstev, životní cyklus standardizovaných komponent Java EE, Servlety, JSP, frameworky, návrhové vzory 1. Distribuce Javy Distribuce Javy se liší podle
Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18
Spring Framework Pavel Mička Pavel Mička Spring Framework 1/18 Obsah Úvod 1 Úvod 2 Service locator Dependency injection Rozsah platnosti bean 3 4 Pavel Mička Spring Framework 2/18 Co je to Spring framework
Web Services na SOAP
Web Services Používají HTTP Existují dvě varianty: Služby postavené na protokolu SOAP Java standard pro vytváření : JAX-WS RESTfull služby Java standard pro vytváření : JAX-RS Web Services na SOAP Žádost
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2007/2008 c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních
Tvorba podnikových aplikací v jazyce JAVA. Josef Pavlíček KII PEF CZU
Tvorba podnikových aplikací v jazyce JAVA Josef Pavlíček KII PEF CZU J2EE Jedná se o přístup: sadu pravidel, technologií, metod, doporučení jak provádět design, vývoj, nasazení a provozování vícevrstvých
UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
Architektury informačních systémů
Architektury informačních systémů doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes/vyuka/tis Miroslav.Benes@vsb.cz Obsah přednášky Co je to
Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)
Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB) Michal Papež Spring & EJB Program: K čemu je to dobré, historie, odlišnosti Spring 2.5 EJB 3.0 K čemu jsou? 1 Vývoj velkých podnikových
NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze
NOVINKY V JEE EJB 3.1 Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze PROGRAM Seznámení s Java Enterprise Edition (JEE) Enterprise Java Beans (EJB) Novinky v EJB 3.1 2 JAVA EDITIONS Java
Architektury informačních systémů
Architektury informačních systémů doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes/vyuka/tis Miroslav.Benes@vsb.cz Obsah přednášky Co je to
Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.
Úvod Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne. Organizace předmětu Materiály k předmětu -Web stránky: http://cw.felk.cvut.cz/doku.php/courses/x33eja/start
Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework
Web Jaroslav Nečas Obsah přednášky Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework Co to je web HTTP protokol bezstavový GET POST HEAD Cookies Session HTTPS
PHP framework Nette. Kapitola 1. 1.1 Úvod. 1.2 Architektura Nette
Kapitola 1 PHP framework Nette 1.1 Úvod Zkratka PHP (z anglického PHP: Hypertext Preprocessor) označuje populární skriptovací jazyk primárně navržený pro vývoj webových aplikací. Jeho oblíbenost vyplývá
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký 1, Miroslav Beneš 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2005/2006 c 2006 Michal Krátký, Miroslav Beneš Tvorba informačních
Platformy / technologie. Jaroslav Žáček
Platformy / technologie Jaroslav Žáček jaroslav.zacek@osu.cz Které platformy / technologie znáte Java Trocha historie Java EE Java EE 5 Java EE 6 Pruning, Extensibility Ease of Dev, CDI, JAX-RS Java EE
Platformy / technologie. Jaroslav Žáček jaroslav.zacek@osu.cz
Platformy / technologie Jaroslav Žáček jaroslav.zacek@osu.cz Které platformy / technologie znáte Java Java Java EE 5 Java EE 6 Pruning, Extensibility Ease of Dev, CDI, JAX-RS Java EE 7! JMS 2, Batch, Concurrency,
PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK
PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK JAROSLAV.ZACEK@OSU.CZ KTERÉ PLATFORMY / TECHNOLOGIE ZNÁTE JAVA TROCHA HISTORIE JAVA EE Java EE 7! Java EE 6 Java EE 5 J2EE 1.4 J2EE 1.3 J2EE 1.2 Servlet, JSP, EJB,
X33EJA Enterprise Java
X33EJA Enterprise Java Petr Šlechta Sun Microsystems petr.slechta@sun.com Petr Aubrecht CA (Computer Associates) petr.aubrecht@ca.com X33EJA (2+2) Cvičení Formou samostatné práce na projektu témata budou
NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
NetBeans platforma Aplikační programování v Javě (BI-APJ) - 7 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme
Enterprise Java Beans 3.0
Enterprise Java Beans 3.0 Lukáš Zapletal liberix.cz EJB 3.0 a JPA 1.0 JavaBean - vysvětlení pojmu Java třída s get/is a set metodami má tedy vlastnosti žádné další podmínky nejsou kladeny JavaBean je tedy
Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU 8.6.2011
Technologie Java Enterprise Edition Přemek Brada, KIV ZČU 8.6.2011 Přehled tématu Motivace a úvod Infrastruktura pro velké Java aplikace (Java základní přehled) Části třívrstvé struktury servlety, JSP
<Insert Picture Here> Vývoj portálových řešení v Javě
Vývoj portálových řešení v Javě Pavel Kubal Program Úvod do problematiky portálů Co je to Portál Jak se vyvíjejí portlety Softwarová podpora vývoje Výhody vývoje portálů Praktické
public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());
Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového
2012 ET NETERA a.s. Wicket přehled technologie Martin Strejc www.etnetera.cz 5.4.2012
Wicket přehled technologie Martin Strejc www.etnetera.cz 5.4.2012 Osnova přednášky 1. Vznik Wicketu 2. Co Wicket umí a co neumí? 3. Účely užití výhody a nevýhody 4. Rozšiřitelnost Wicketu 5. Srovnání s
Softwarové komponenty a Internet
Softwarové komponenty a Internet Doc. Dr. Ing. Miroslav Beneš Katedra informatiky FEI VŠB-TU Ostrava Miroslav.Benes@vsb.cz Obsah přednášky Motivace Vývoj přístupů k tvorbě programů Definice komponenty
Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice
základní seznámení s frameworkem Lukáš Koĺısko lkolisko@gmail.com 26.11.2007 Cíle prezentace Cíle prezentace To DI, or not to DI Varianty řešení DI Výhody a nevýhody Cílem prezentace je ukázat, že... v
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký 1, Miroslav Beneš 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2006/2007 c 2005-2007 Michal Krátký, Miroslav Beneš Tvorba
Elektronická podpora výuky předmětu Komprese dat
Elektronická podpora výuky předmětu Komprese dat Vojtěch Ouška ouskav1@fel.cvut.cz 19. června 2006 Vojtěch Ouška Elektronická podpora výuky předmětu Komprese dat - 1 /15 Co je to SyVyKod? SyVyKod = Systém
Spring Framework Handout
Spring Framework Handout Martin Ledvinka martin.ledvinka@fel.cvut.cz 25. listopadu 2015 1 Spring Framework Spring framework vznikl v roce 2002 jako alternativa tehdejší težkopádné enterprise verze Javy
Návrhové vzory Tvorba objektů
Objektové modelování, AD7B36OMO Návrhové vzory Tvorba objektů ČÁST B Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze https://edux.feld.cvut.cz/courses/ad7b36omo Přednáška
Databázové a informační systémy
Databázové a informační systémy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Jak ukládat a efektivně zpracovávat
X36WWW. Technologie aplikačních serverů. Miroslav Bureš,, Martin Klíma. X36WWW: 12. přednáška 1
X36WWW 13.. přednáškap Technologie aplikačních serverů Miroslav Bureš,, Martin Klíma 1 Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2007/2008 c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních
Úvod do problematiky vývoje Vývoj informačních systémů
Úvod do problematiky vývoje informačních systémů Vývoj informačních systémů Management Klasický management - slouží k udržování a rozvíjení zavedených systémů, které jsou prostředkem pro nepřetržitou,
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2005/2006 c 2006-2007 Michal Krátký, Miroslav Beneš Tvorba informačních
E LEARNINGOVÁ WEBOVÁ APLIKACE PRO VÝUKU BIOMEDICÍNSKÉHO INŽENÝRSTVÍ Petr Huňka
E LEARNINGOVÁ WEBOVÁ APLIKACE PRO VÝUKU BIOMEDICÍNSKÉHO INŽENÝRSTVÍ Petr Huňka Anotace V rámci projektu FRVŠ jsme připravili webovou e-learningovou aplikaci, která je implementována v jazyce Java v rozšířené
Michal Krátký, Miroslav Beneš
Tvorba informačních systémů 1/32 Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2008/2009 Tvorba informačních
Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni
Webové aplikace Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni Harmonogram Dopolední blok 9:00 12:30 Ing. Dostal Úvod, XHTML + CSS Ing. Brada,
Systémová administrace portálu Liferay
02 Systémová administrace portálu Liferay 1 Agenda Administrace Instalace lokálního a serverového prostředí Základní práce s uživateli Role a oprávnění Konfigurace portálu 2014 IBA CZ, s. r. o. 2 Portálová
Podpora aplikační logiky v J2EE aplikačních rámcích
Podpora aplikační logiky v J2EE aplikačních rámcích Petr Matulík, Tomáš Pitner Masarykova univerzita v Brně, Fakulta informatiky Abstrakt. Prostředí J2EE (Java2 Enterprise Edition) je dobrou volbou všude
KAPITOLA 3. Architektura aplikací na frameworku Rails. V této kapitole: modely, pohledy, řadiče.
KAPITOLA 3 Architektura aplikací na frameworku Rails V této kapitole: modely, pohledy, řadiče. 58 Část I: Začínáme Jedna ze zajímavých vlastností frameworku Rails spočívá v tom, že klade docela závažná
Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika
Vývoj informačních systémů Architektura, návrh Vzory: Doménová logika Zachman Framework Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented
Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE
X33EJA Security, Realms Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE 'web.xml' 'glassfish-web.xml' dále nutno nastavit realm v admin. konzoli GF 1
Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky
Google Web Toolkit Martin Šurkovský, SUR096 Vysoká škola Báňská - Technická univerzita Ostrava Katedra informatiky 29. března 2010 Martin Šurkovský, SUR096 (VŠB - TUO) Google Web Toolkit 29. března 2010
X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.
X33EJA Web Services Martin Ptáček, KOMIX s.r.o. ptacek@komix.cz Copyright 2007 KOMIX Copyright s.r.o. 2007 KOMIX s.r.o. 1. Obsah Historie Co jsou Web Services? Co je to SOA? JAX-WS (Java API for XML Web
Stručný úvod pro programátory. Michal Kuchta
Stručný úvod pro programátory Michal Kuchta Alespoň základní znalost PHP Základy klasického OOP a jeho implementaci v PHP Schopnost oprostit se od konvenčního tvoření stránek 2 Framework pro snazší vývoj
Multiplatformní osobní organizér v jazyce Java
Mendelova zemědělská a lesnická univerzita v Brně Provozně ekonomická fakulta Multiplatformní osobní organizér v jazyce Java Bakalářská práce Vedoucí práce: Ing. Petr Jedlička, Ph.D Petr Gola Brno 2009
Java Server-side. Štěpán Kuchař. stepan.kuchar@vsb.cz. VŠB-TUO FEI Katedra informatiky
Java Server-side Štěpán Kuchař stepan.kuchar@vsb.cz VŠB-TUO FEI Katedra informatiky Trocha historie 500 před n. l. Pythagoras založil bratrstvo vyznávající reinkarnaci, vegetariánství, mystický význam
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
Platforma J2EE. Lukáš Zapletal liberix.cz. Platforma Java 2 Enterprise Edition vývoj webových aplikací
Platforma J2EE Lukáš Zapletal liberix.cz Platforma Java 2 Enterprise Edition vývoj webových aplikací Pictures (c) Sun Microsystems from J2EE 5 Tutorial J2EE - webové aplikace hlavní komponentou u webového
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
Technologie Java. Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/
Technologie Java Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/ Trocha historie Java vznikla v roce 1995 jak minimalistický programovací jazyk (211 tříd). Syntaxe vycházela z C/C++. V
3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda
1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání
Komponentově orientované webové frameworky. Jiří Stránský twitter.com/jistr
Komponentově orientované webové frameworky Jiří Stránský jistr@jistr.net twitter.com/jistr O čem to bude Three-Tier aplikace MVC frameworky Komponentově orientované frameworky Apache Wicket Three-Tier
Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java
Snadný vývoj webových aplikací s Nette. Lukáš Jelínek
Snadný vývoj webových aplikací s Nette Lukáš Jelínek Proč framework? ušetří spoustu práce (implementace, úpravy) vývoj = co udělat, ne jak to udělat bezpečnost štábní kultura prostředky pro ladění podpora
TÉMATICKÝ OKRUH Softwarové inženýrství
TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího
Architektura softwarových systémů
Architektura softwarových systémů Ing. Jiří Mlejnek Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Jiří Mlejnek, 2011 jiri.mlejnek@fit.cvut.cz Softwarové
Platforma J2EE. Lukáš Zapletal liberix.cz. Platforma Java 2 Enterprise Edition
Platforma J2EE Lukáš Zapletal liberix.cz Platforma Java 2 Enterprise Edition Co je J2EE J2EE je standard pro vývoj robustních, škálovatelných a bezpečných serverových systémů v Javě. Poskytuje business
Obsah přednášky. Technologie. Enterprise Java Beans. Enterprise Java Beans. EJB kontejner. Enterprise Java Beans (EJB)
Obsah přednášky Technologie Miroslav Beneš Popis technologie EJB J2EE aplikace Typy komponent Entity Beans Session Beans Message-Driven Beans Java Messaging Service (JMS) Závěr 2 (EJB) EJB kontejner Specifikace
KIV/PIA Semestrální práce
KIV/PIA Semestrální práce Diskuzní fórum Tomáš Časta(A10N0057P) casta@students.zcu.cz 1. Architektura aplikace 1.1 MVC Model-view-controller (MVC) je softwarová architektura, která rozděluje datový model
Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML
Obsah přednášky Webové služby a XML Miroslav Beneš Co jsou to webové služby Architektura webových služeb SOAP SOAP a Java SOAP a PHP SOAP a C# Webové služby a XML 2 Co jsou to webové služby rozhraní k
Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo
Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)
Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková
Ruby on Rails Bc. Tomáš Juřík Bc. Bára Huňková Co nás dnes čeká? Ruby (programovací jazyk) Ruby on Rails (webový framework) Praktická ukázka Ruby (programovací jazyk) Ruby (programovací jazyk) Skriptovací
1 Webový server, instalace PHP a MySQL 13
Úvod 11 1 Webový server, instalace PHP a MySQL 13 Princip funkce webové aplikace 13 PHP 14 Principy tvorby a správy webového serveru a vývojářského počítače 14 Co je nezbytné k instalaci místního vývojářského
Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika
Vývoj informačních systémů Architektura, návrh Vzory: Doménová logika Zachman Framework Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented
Komponentní technologie
Komponentní technologie doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Motivace Aplikace v IT Vývoj přístupů
Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer
Jalapeño: pekelně ostrá Java persistence v Caché Daniel Kutáč Senior Sales Engineer Co je Jalapeño Pár slov ředitele vývoje software Klikni! Tak tedy, o čem dnes budeme mluvit Architektura Instalace Anotace
Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.
Jakub Klemsa Jan Legerský Objektově orientované programování klemsjak@fjfi.cvut.cz jan.legersky@gmail.com 30. října 2012 návrhový vzor (design pattern) obecné řešení problému, které se využívá při návrhu
OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC
OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational
Spring portfolio. Tomáš Krátký tomas.kratky@profinit.eu http://www.profinit.eu
Spring portfolio Tomáš Krátký tomas.kratky@profinit.eu http://www.profinit.eu Obsah Když se řekne Spring Představení ukázkové aplikace Využití Spring portfolia Spring Framework (core) Spring Web Services
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2007/2008 c 2006-2008 Michal Krátký, Miroslav Beneš Tvorba informačních
Architektura aplikace
Architektura aplikace MARBES-JIRA plugin Tým: GRSS Členové: František Schneider Jaroslav Ráb Lukáš Gemela Jaromír Staněk Upravil Verze dokumentu Datum F. Schneider 1.0 25.3.2012 F. Schneider 2.0 25.4.2012
Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);
Programovací jazyk PHP doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Třídy a objekty Výjimky Webové aplikace
Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký
Anotace a Hibernate Aleš Nosek Ondřej Vadinský Daniel Krátký Anotace v Javě novinka Javy 5 umožňují k Java kódu přidávat dodatečné informace (podobně jako JavaDoc) za předchůdce anotací je možné považovat
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
Databáze EMS podacích lístků
Databáze EMS podacích lístků Semestrální práce ------------------------------ 1 / 30 Obsah Obsah...2 Obsah...2 Záměr projektu...3 Uživatele...6 Katalog požadavků...7 Use case...8 Konceptuální datový model...9
GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím
GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER váš partner na cestě od dat k informacím globtech spol. s r.o. karlovo náměstí 17 c, praha 2 tel.: +420 221 986 390 info@globtech.cz
Session Beans. Petr Aubrecht CA. Vtipy budou tentokrát o krizi:
Session Beans Petr Aubrecht CA Vtipy budou tentokrát o krizi: Resty z minula -2 slidy s anotacemi servletů -JPA, slide 42, kaskády Anotace v Servletech 3.0 - Netřeba zápis do web.xml @WebServlet(name="CalculatorServlet",
Základy objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
Využití OOP v praxi -- Knihovna PHP -- Interval.cz
Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování
Databázové aplikace pro internetové prostředí. 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku
Databázové aplikace pro internetové prostředí 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku Projekt: Inovace výuky prostřednictvím ICT Registrační číslo: CZ.1.07/1.5.00/34.250
Použití databází na Webu
4IZ228 tvorba webových stránek a aplikací Jirka Kosek Poslední modifikace: $Date: 2010/11/18 11:33:52 $ Obsah Co nás čeká... 3 Architektura webových databázových aplikací... 4 K čemu se používají databázové
Úvod do Web Services
Úvod do Web Services Základy webových služeb a jejich implementace na platformě OS/2 Jarda Kačer jarda@kacer.biz Český Warpstock 2008 Brno, 20.-21.9.2008 Co je to webová služba? Část business logiky přístupná
Úvod do Groovy pro Java experty
Úvod do Groovy pro Java experty Václav Pech Senior Software Developer JetBrains, Inc. Něco o mně Václav Pech Programátor Nadšenec do Groovy JetBrains Dodavatel Vašich oblíbených nástrojů IntelliJ IDEA,
1. Webový server, instalace PHP a MySQL 13
Úvod 11 1. Webový server, instalace PHP a MySQL 13 Princip funkce webové aplikace 13 PHP 14 Principy tvorby a správy webového serveru a vývojářského počítače 14 Co je nezbytné k instalaci místního vývojářského
Analýza a Návrh. Analýza
Analysis & Design Návrh nebo Design? Design = návrh Není vytváření použitelného uživatelského prostředí (pouze malinká podmnožina celého návrhu) Často takto omezeně chápáno studenty nedokáží si představit,
Vývoj informačních systémů. Přehled témat a úkolů
Vývoj informačních systémů Přehled témat a úkolů Organizace výuky doc. Mgr. Miloš Kudělka, Ph.D. EA 439, +420 597 325 877 homel.vsb.cz/~kud007 milos.kudelka@vsb.cz Přednáška Teorie Praxe Cvičení Diskuze
Java a Caché IV: Manipulace s objekty
1 z 6 11.1.2007 11:13 přihlašovací jméno heslo Registrace Přihlásit články odkazy aktuality CZJUG konference o portálu přidejte se o nás Vyhledávání Text: najdi Oborový filtr J2ME J2SE J2EE Enterprise
Technologie JavaBeans
Technologie JavaBeans doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Historie Komponentový model Typy komponent