Hlavní menu

Nástroje

SlovnikTerminologie / JemnyUvodDoAplikace

View (print) - Edit page | Recent changes - Page history

Updated 20 February 2014, 00:16 by JR

SlovnikTerminologie.JemnyUvodDoAplikace History

Hide minor edits - Show changes to output

20 February 2014, 00:16 by JR -
Changed lines 309-311 from:
* JemnyUvodDoTestoveni
* TestovaciScenare
to:
* JemnyUvodDoTestoveni
02 February 2014, 23:54 by MartinKozisek -
Changed lines 249-250 from:
Poznámka: Pro testování je možné nastavit u tagu @@dwr:controller@@ debug na *true*. V takovém případě je generována stránka na pro testování příslušných metod na adrese @@/dwr/index.html@@. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na *false*.
to:
Poznámka: Pro testování je možné nastavit u tagu @@dwr:controller@@ debug na *true*. V takovém případě je generována stránka pro testování příslušných metod na adrese @@/dwr/index.html@@. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na *false*.
02 February 2014, 23:53 by MartinKozisek -
Changed lines 249-250 from:
Poznámka: Pro testování je možné nastavit u tagu @@dwr:controller@@ debug na *true*. V takovém případě je generována stránka na pro testování na příslušných metod na adrese @@/dwr/index.html@@. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na *false*.
to:
Poznámka: Pro testování je možné nastavit u tagu @@dwr:controller@@ debug na *true*. V takovém případě je generována stránka na pro testování příslušných metod na adrese @@/dwr/index.html@@. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na *false*.
02 February 2014, 23:52 by MartinKozisek -
Added lines 249-250:
Poznámka: Pro testování je možné nastavit u tagu @@dwr:controller@@ debug na *true*. V takovém případě je generována stránka na pro testování na příslušných metod na adrese @@/dwr/index.html@@. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na *false*.
23 May 2013, 20:35 by MartinKozisek -
Changed lines 114-115 from:
Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller, který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.
to:
Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller (mapování URL na controllery je ve @@spot-servlet.xml@@), který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.
Deleted lines 310-311:
* tipy a triky pro práci s databázi na stránce [[NavrhAplikace -> NavrhAplikace]]
23 May 2013, 20:25 by MartinKozisek -
Changed lines 90-91 from:
V současné době má [[datový model -> NavrhAplikace]] okolo 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit.
to:
V současné době má [[datový model -> EraModel]] okolo 27 tabulek.
23 May 2013, 20:23 by MartinKozisek -
Changed lines 46-47 from:
Je více méně na vás, jaké IDE si zvolíte. Ať už [[Netbeans -> http://www.netbeans.org]] nebo [[Eclipse -> http://www.eclipse.org]] (případně [[IntelliJ Idea -> http://www.jetbrains.com/idea/]] nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s [[Mavenem -> JemnyUvodDoMavenu]], [[Springem -> http://www.springsource.org/]] aj. Tato volba je opravdu jen na vás.
to:
Je více méně na vás, jaké IDE si zvolíte. Ať už [[Netbeans -> http://www.netbeans.org]] nebo [[Eclipse -> http://www.eclipse.org]] (případně [[IntelliJ Idea -> http://www.jetbrains.com/idea/]] nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s [[Mavenem -> JemnyUvodDoMavenu]], [[Springem -> http://www.springsource.org/]] aj. Tato volba je opravdu jen na vás. Vhodné je použití [[Spring Tool Suite -> http://www.springsource.org/sts ]], což je vývojové prostředí založené na Eclipse, které usnadňuje vývoj aplikací s využitím Spring frameworku, Mavenu atd.
31 March 2013, 21:06 by MartinKozisek -
Added lines 25-26:
[[Podrobnější popis -> PopisStrukturyAplikace]]
10 July 2012, 16:55 by Jenda Rybak -
Changed lines 227-229 from:
Komunikaci mezi klientskou (javascript) a serverovou částí (java) zajišťuje knihovna DWR. Zprovoznění vyžaduje několik kroků, které nejsou úplně intuitivní, proto je popíšu níže.

h4. Nastavení v spot-servlet.xml
to:
Komunikaci mezi klientskou (javascript) a serverovou částí (java) zajišťuje knihovna DWR. Zprovoznění vyžaduje několik kroků, které nejsou úplně intuitivní, proto je zde popíšu.

h4. Nastavení spot-servlet.xml
Changed lines 272-273 from:
V controlleru musí existovat metoda, kterou v javascriptu voláme. Uvádím zde ukázku načtení kontextu.
to:
V controlleru musí existovat metoda, kterou v javascriptu voláme. V níže uvedeném kódu je i ukázka, jak načíst kontext.
10 July 2012, 16:50 by Jenda Rybak -
Added lines 271-293:
h4. Serverová část
V controlleru musí existovat metoda, kterou v javascriptu voláme. Uvádím zde ukázku načtení kontextu.

[@
public String[] ajaxWordEdit(String wordWord, int wordId, int usageId, int stateId) {
/* nacteni web kontextu */
WebContext ctx = WebContextFactory.get();
HttpServletRequest request = ctx.getHttpServletRequest();

...

if ( /* nastala chyba */ ) {
return null;
}

...

String[] infoToDisplay = {word.getWord(), word.getUrl(), state.getValue(), usage.getName()};
return infoToDisplay;
}
@]

10 July 2012, 16:44 by Jenda Rybak -
Changed lines 250-251 from:
Javascriptová funkce, která volá metodu [@ajaxWordEdit@] controlleru WordShowController a předává jí hodnoty formulářových polí s ID [@wordWord, wordId, usageId@] a [@stateId@]. Poslední parametr je název callback funkce.
to:
Ukázka javascriptové funkce, která volá metodu [@ajaxWordEdit@] controlleru WordShowController a předává jí hodnoty formulářových polí s ID [@wordWord@], [@wordId@], [@usageId@] a [@stateId@]. Poslední parametr je název callback funkce.
Changed lines 258-259 from:
Callback funkce je zavolána po přijetí dat od metody controlleru a nebo po vytikání timeoutu.
to:
Callback funkce je zavolána po přijetí dat od metody controlleru a nebo po vytikání timeoutu. Přijatá data jsou uložená v parametru funkce (zde: wordData). Chybové stavy jsou řešeny vrácením [@null@] z controlleru.
10 July 2012, 16:40 by Jenda Rybak -
Changed lines 248-249 from:
Javascriptové funkce jsou umístěny v adresáři [@webapp/static/js/ajax/@].
to:
Javascriptové funkce jsou umístěny v adresáři [@webapp/static/js/ajax/@]. Je nutné napsat jednu funkci pro volání metody controlleru na serveru a druhou funkci (callback), která bude přijímat data vrácená controllerem.

Javascriptová funkce, která volá metodu [@ajaxWordEdit@] controlleru WordShowController a předává jí hodnoty formulářových polí s ID [@wordWord, wordId, usageId@] a [@stateId@]. Poslední parametr je název callback funkce.
Deleted lines 251-255:
/*
* Tato funkce odesila data controlleru (WordShowController), do metody ajaxWordEdit a ziskava
* zpet data pres callback updateWord, ktery je definovan nize.
*
* */
Changed lines 255-259 from:

/*
* Callback z metody ajaxWordEdit, naplni stranku novymi daty a obnovi stranku.
*
* */
to:
@]

Callback funkce je zavolána po přijetí dat od metody controlleru a nebo po vytikání timeoutu.

[@
Deleted line 267:
10 July 2012, 16:35 by Jenda Rybak -
Added lines 250-274:
[@
/*
* Tato funkce odesila data controlleru (WordShowController), do metody ajaxWordEdit a ziskava
* zpet data pres callback updateWord, ktery je definovan nize.
*
* */
function ajaxWordEdit() {
WordShowController.ajaxWordEdit(value("wordWord"), value("wordId"), value("usageId"), value("stateId"), ajaxWordEditCallback);
}

/*
* Callback z metody ajaxWordEdit, naplni stranku novymi daty a obnovi stranku.
*
* */
function ajaxWordEditCallback(wordData) {
if (wordData == null) {
alert("Ke změně slova nedošlo. Nastala chyba.");
return false;
} else {
/* zde bude nejaky kod, ktery provede zmenu na strance */
}
}

@]
10 July 2012, 16:33 by Jenda Rybak -
Changed lines 247-249 from:
to:
h4. Javascript
Javascriptové funkce jsou umístěny v adresáři [@webapp/static/js/ajax/@].
10 July 2012, 16:29 by Jenda Rybak -
Changed line 229 from:
h.4 Nastavení v spot-servlet.xml
to:
h4. Nastavení v spot-servlet.xml
10 July 2012, 16:28 by Jenda Rybak -
Changed lines 226-228 from:
h3. Ajax pomocí DWR (Direct Web Remoting)

to:
h3. Ajax a knihovna DWR (Direct Web Remoting)
Komunikaci mezi klientskou (javascript) a serverovou částí (java) zajišťuje knihovna DWR. Zprovoznění vyžaduje několik kroků, které nejsou úplně intuitivní, proto je popíšu níže.

h.4 Nastavení v spot-servlet.xml
Zde je nutné určit, který controller bude obsluhovat volání javascriptových funkcí. V tomto případě musí třída WordShowController obsahovat uvedené metody (ajaxWordEdit, ajaxSeeAlsoAdd,...).

[@
<bean id="wordShowController" class="cz.zcu.kiv.spot.controllers.WordShowController">
<property name="dictionaryManager" ref="dictionaryManager" />
<dwr:remote javascript="WordShowController">
<dwr:include method="ajaxWordEdit" />
<dwr:include method="ajaxSeeAlsoAdd" />
<dwr:include method="ajaxCommentAdd" />
<dwr:include method="ajaxCommentDelete" />
<dwr:include method="ajaxTransDelete" />
<dwr:include method="ajaxTransAdd" />
<dwr:include method="ajaxTransEdit" />
</dwr:remote>
</bean>
@]

10 July 2012, 16:15 by Jenda Rybak -
Added lines 225-228:

h3. Ajax pomocí DWR (Direct Web Remoting)

17 April 2010, 14:36 by JanSobisek -
Changed lines 51-52 from:
Nejčastější klávesové zkratky, které mohou výrazným způsobem urychlit práci [[(Attach:)eclipse-zkratky.txt]]
to:
Nejčastější klávesové zkratky, které mohou výrazným způsobem urychlit práci [[(Attach:)eclipse-zkratky.txt]], další zajímavé informace na http://tipy.kiv.zcu.cz
06 December 2009, 17:48 by JanSobisek a RomanKunes -
Added line 249:
Changed lines 252-255 from:
Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb ''[@StaticPageControlleru@]''.
Nastaveni kontrolerů pro poskytování statických stránek a namapováni jednotlivých kontrolerů na URL se nachází v souboru [@spot-servlet.xml@]

to:
* Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb ''[@StaticPageControlleru@]''. Nastaveni kontrolerů pro poskytování statických stránek a namapováni jednotlivých kontrolerů na URL se nachází v souboru [@spot-servlet.xml@]

* Snažte se psát v rámci možností [[validní HTML -> http://validator.w3.org/]] a [[validní CSS -> http://jigsaw.w3.org/css-validator/]] kód.

03 December 2009, 03:18 by JanSobisek a RomanKunes -
Added lines 65-70:
!!!!SVN pluginy pro eclipse
* Subclipse - http://subclipse.tigris.org/
* Subversive - http://www.eclipse.org/subversive/

v případě prioblémů zkuste navštívit http://wiki.eclipse.org/SVN_Howto
Changed lines 73-74 from:
to:
Netbeans IDE maji plugin pro SVN defaultně zabudovaný.
03 December 2009, 03:11 by JanSobisek a RomanKunes -
Added lines 51-52:
Nejčastější klávesové zkratky, které mohou výrazným způsobem urychlit práci [[(Attach:)eclipse-zkratky.txt]]
03 December 2009, 03:06 by JanSobisek a RomanKunes -
Deleted line 241:
Added lines 243-245:
Nastaveni kontrolerů pro poskytování statických stránek a namapováni jednotlivých kontrolerů na URL se nachází v souboru [@spot-servlet.xml@]

30 November 2009, 23:59 by JanSobisek a RomanKunes -
Changed lines 96-102 from:
S principiálním popisem začnu od pohledu uživatele. Tomu přijde do browseru html kód, které umí browser zobrazit. HTML kód se odešle ze servletového kontejneru po příchozím requestu. Servletový kontejner vytváří tento zmiňovaný kód ze servletů. Ty získává dynamicky překladem jsp stránek na servlety. A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace.
to:
S principiálním popisem začnu od pohledu uživatele.
# Tomu přijde do browseru html kód, které umí browser zobrazit.
# HTML kód se odešle ze servletového kontejneru po příchozím requestu.
# Servletový kontejner vytváří tento zmiňovaný kód ze servletů.
# Ty získává dynamicky překladem jsp stránek na servlety.

A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace.
30 November 2009, 23:56 by JanSobisek a RomanKunes -
Changed lines 90-94 from:
* ''spot-servlet.xml'' - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení ''spot.properties'' přes ''[@PropertyPlaceholderConfigurator@]''.

* ''applicationContext.xml'' - beany pro transakce, DAO objekty, validátory, načtení ''jdbc.properties'' přes ''[@PropertyPlaceholderConfigurator@]'', beana pro messages aplikace a beana business logiky ''[@DictionaryManager@]''.

to:
* ''spot-servlet.xml'' - [[beany -> http://en.wikipedia.org/wiki/Entity_bean]] controllerů a interceptorů, [[beany -> http://en.wikipedia.org/wiki/Entity_bean]] pro namapovaní konkrétních částí URL patřičným controllerům, načtení ''spot.properties'' přes ''[@PropertyPlaceholderConfigurator@]''.

* ''applicationContext.xml'' - [[beany -> http://en.wikipedia.org/wiki/Entity_bean]] pro transakce, DAO objekty, validátory, načtení ''jdbc.properties'' přes ''[@PropertyPlaceholderConfigurator@]'', beana pro messages aplikace a beana business logiky ''[@DictionaryManager@]''.

30 November 2009, 23:54 by JanSobisek a RomanKunes -
Changed lines 81-84 from:
h3. Implementace aplikace

Dodržujte prosím ImplementacniKonvence. Pro snažší zorientování ve třídách a metodách je doporučeno vygenerování [[javadocu -> http://cs.wikipedia.org/wiki/Javadoc]] příkazem @@mvn javadoc:javadoc@@, který se defaultně vygeneruje do [@./target/site/apidocs@]
to:
h3. Implementace

# Dodržujte prosím ImplementacniKonvence.
# Pro snažší zorientování ve třídách a metodách je doporučeno vygenerování [[javadocu -> http://cs.wikipedia.org/wiki/Javadoc]] příkazem @@mvn javadoc:javadoc@@, který se defaultně vygeneruje do [@./target/site/apidocs@]

!!!!Konfigurační soubory
Added lines 94-95:

!!!![[MVC - Model-view-controller -> http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller]]
Changed lines 129-130 from:
Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru ''[@AdminUserController@]''. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od ''[@HandlerInterceptorAdapter@]'', který má 3 metody - ''[@preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)@]'', ''[@postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)@]'' a ''[@afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)@]''. Ve Spotu je implementována pouze metoda ''[@preHandle()@]''.) Beana interceptoru vypadá podobně jako beana controlleru. Například ''[@AuthInterceptor@]'' se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru ''[@AdminUserController@]'', jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.
to:
!!!!interceptory
Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru ''[@AdminUserController@]''. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu.
Intercetpory dědí od ''[@HandlerInterceptorAdapter@]'', který má 3 metody:

*''[@preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)@]''
*''[@postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)@]''
*''[@afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)@]''.

Ve Spotu je implementována pouze metoda ''[@preHandle()@]''.) Beana interceptoru vypadá podobně jako beana controlleru. Například ''[@AuthInterceptor@]'' se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru ''[@AdminUserController@]'', jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

!!!!Controllery
Added line 173:
!!!![[DAO -> http://en.wikipedia.org/wiki/Data_Access_Object]]
30 November 2009, 23:35 by JanSobisek a RomanKunes -
Added lines 35-36:
Snažte se prosím tyto rady dodržovat a nevnášejte do aplikace ještě větší [[(Attach:)spot_stress_controll.jpg | zmatek]], než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích (bez diakritiky).
Changed lines 77-78 from:
h3. Jemné seznámení s datovým modelem
to:
h3. Datový model
Changed lines 81-84 from:
h3. Princip implementace aplikace

dodrzovat ImplementacniKonvence
to:
h3. Implementace aplikace

Dodržujte prosím ImplementacniKonvence. Pro snažší zorientování ve třídách a metodách je doporučeno vygenerování [[javadocu -> http://cs.wikipedia.org/wiki/Javadoc]] příkazem @@mvn javadoc:javadoc@@, který se defaultně vygeneruje do [@./target/site/apidocs@]
Changed lines 220-221 from:
Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší [[(Attach:)spot_stress_controll.jpg | zmatek]], než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích (bez diakritiky).
to:

30 November 2009, 23:14 by JanSobisek a RomanKunes -
Added lines 215-216:
* Při změně hodnoty v některém [@property souboru@] je nutný restart [[servletového kontejneru -> NasazeniAplikace]], protože tyto hodnoty se načítají pouze při jeho startu.
30 November 2009, 23:02 by JanSobisek a RomanKunes -
Changed lines 185-186 from:
Tak toto byla asi nejtěžší část celého seznámení se SPOTem. Doufám tedy, že jsem vám alespoň objasnil základní princip fungování aplikace. Na principu tohoto příkladu příkladu více méně funguje celá aplikace.
to:
Tak toto byla asi nejtěžší část celého seznámení se [[SPOTem -> http://spot.zcu.cz]]. Doufám tedy, že jsem vám alespoň objasnil základní princip fungování aplikace. Na principu tohoto příkladu příkladu více méně funguje celá aplikace.
Changed line 193 from:
h3. Logování
to:
h3. Logování a komentáře
Added lines 196-197:
Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Postupem doby se došlo k doporučení používat ke komentářům sice češtinu, ale bez diakritiky. Vývoj [[SPOTu -> http://spot.zcu.cz]] probíhá na operačním systému windows a linux, každý systém používá defaultně jiné kódování a i přes opratrnost v commitech se vyskytují neustále problémy s diakritikou ve zdrojových kódech. Čeština tedy bez diakritiky!
Changed lines 216-217 from:
Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší [[(Attach:)spot_stress_controll.jpg | zmatek]], než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích.
to:
Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší [[(Attach:)spot_stress_controll.jpg | zmatek]], než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích (bez diakritiky).
30 November 2009, 22:50 by JanSobisek a RomanKunes -
Added lines 49-59:
!!! IDE, nastavení kódování projektu

!!!! Linux
Nastavení kódování celého projektu v IDE je velice důležité. Pod operačním systémem linux je automaticky v IDE Netbeans i Eclipse nastaveno kódování projektu (a všech jeho souborů) na [[UTF8 -> http://cs.wikipedia.org/wiki/UTF-8]].

!!!! Windows
V případě použítí MS windows je situace závislá na konkrétním IDE:
* Netbeans - automaticky nastaveno na [[UTF8 -> http://cs.wikipedia.org/wiki/UTF-8]]
* Eclipse - automaticky na [[Cp1250 -> http://cs.wikipedia.org/wiki/Cp1250]], je doporučená změna na [[UTF8 -> http://cs.wikipedia.org/wiki/UTF-8]]. Pravým tlačítkem kliknout na vybraný projekt [@-> Resource -> Text file encoding@] a vybrat [@Other UTF-8@]. Nebo provést změnu globálně pro všechny projekty: nabídka [@Window -> Preferences -> General -> Workspace -> Text file encoding@] a vybrat [@Other UTF-8@].

30 November 2009, 21:29 by JanSobisek a RomanKunes -
Added lines 194-201:
h3. Tipy a triky
* tipy a triky pro práci s databázi na stránce [[NavrhAplikace -> NavrhAplikace]]

* Pro rychlejší vývoj na localhostu a hlavně zachování věrohodnosti statistik přístupu je doporučeno zakomentovat v [@./src/main/webapp/WEB-INF/jsp/include/header.jsp@]:
** tag [@<link href="http://www.google.com/uds/css/gsearch.css".../>@]
** tag [@<script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0"...</script>@]
** tag [@<script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0&amp;key=AB...</script>@]
24 November 2009, 14:57 by JanSobisek -
Added line 8:
/scripts - obsahuje jednoduché skripty pro windows(bat) i linux(sh), spuštění aplikace, vytvoření war souboru, vytvoření dokumentace
23 November 2009, 18:47 by JanSobisek -
Changed lines 41-42 from:
Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans nebo Eclipse (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s [[Mavenem -> JemnyUvodDoMavenu]], Springem aj. Tato volba je opravdu jen na vás.
to:
Je více méně na vás, jaké IDE si zvolíte. Ať už [[Netbeans -> http://www.netbeans.org]] nebo [[Eclipse -> http://www.eclipse.org]] (případně [[IntelliJ Idea -> http://www.jetbrains.com/idea/]] nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s [[Mavenem -> JemnyUvodDoMavenu]], [[Springem -> http://www.springsource.org/]] aj. Tato volba je opravdu jen na vás.
Added lines 46-48:
Tutoriál pro spustění aplikace naleznete na stránce [[NasazeniAplikace -> NasazeniAplikace]]

h3. SVN
Changed lines 52-53 from:
Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí Netbeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:
* otevřete NetBeans IDE
to:
Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí [[Netbeans -> http://www.netbeans.org]]. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:
* otevřete [[Netbeans IDE -> http://www.netbeans.org]]
Changed lines 59-60 from:
Tutoriál pro spustění aplikace naleznete na stránce [[NasazeniAplikace -> NasazeniAplikace]]
to:
!!!!Odkazy
* http://cs.wikipedia.org/wiki/Subversion
* http://merlin.fit.vutbr.cz/wiki/index.php/SVN_tutoriál
23 November 2009, 18:36 by JanSobisek -
Changed line 46 from:
h3. Nastavení SVN pro [[Netbeans -> http://www.netbeans.org]]
to:
!!!!Nastavení SVN pro [[Netbeans -> http://www.netbeans.org]]
Added lines 56-57:
Tutoriál pro spustění aplikace naleznete na stránce [[NasazeniAplikace -> NasazeniAplikace]]
23 November 2009, 18:15 by JanSobisek -
Changed lines 39-40 from:
to:
h3. Nastavení IDE
Changed lines 43-58 from:
h3. Instalace a spuštění postgresql databáze

Návod instalce je určen pro linux. Práce v ''psql'' konzoli je nezávislá na platformě.

[@$ sudo apt-get install postgresql #yum install postgresql
$ sudo passwd postgres #Změní heslo uživaleli 'postgres'
$ sudo /etc/init.d/postgresql-* restart #Restartuje server
$ su postgres #Přihlášení jako administrátor databáze

$ createdb postgres #vytvoří databázi nazvanou 'postgres'
$ psql postgres #přihlášení do databáze 'postgres'
postgres=# ALTER USER postgres with password 'postgres'; #nastaví heslo uživateli 'postgres' v databázi na 'postgres'
postgres=# \i spot.sql #provedení příkazů ze souboru, př. nahraje dump databáze projektu

@]
h3. Nastavení IDE [[Eclipse -> http://www.eclipse.org]]
to:
!!!![[Eclipse -> http://www.eclipse.org]]
Deleted lines 59-62:

h3. Spuštění aplikace
Pro windows: [[(Attach:)turorial-spot-app-spusteni.zip]] [0,4 MB]
23 November 2009, 18:11 by JanSobisek -
Changed lines 38-57 from:
h3. Konfigurace aplikace

Je potřeba mít [[nainstalovaný -> NasazeniAplikace]]:
* [[Java -> http://java.sun.com/javase/downloads/index.jsp]] 5.0 nebo vyšší
* [[Maven -> http://maven.apache.org/download.html]], ideálně 2.0.x
* [[Postgresql -> http://www.postgresql.org/download/]] 8.1 - na toto pozor! Při mém 1. [[deploy -> NasazeniAplikace]] běžel SPOT nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1...- a to je více méně vše.

Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem.
# volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii.
# volbou je mít "nainstalovaný" servletový kontejner [[Tomcat -> http://tomcat.apache.org ]] a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.


Pro zdárný běh aplikace je potřeba nakonfigurovat pár [[konfiguračních -> NasazeniAplikace]] souborů pro local:

''./src/main/resources/WEB-INF/properties/jdbc.properties'' - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva)

''./src/main/resources/WEB-INF/classes/log4j.properties'' - nastavení cesty, kam se budou zapisovat logy, případně velikost logovacího souboru.

''./src/main/resources/WEB-INF/classes/spot.properties'' - různé možnosti nastaveni vlastní aplikace.
to:

22 November 2009, 17:54 by JanSobisek -
Changed lines 50-51 from:
Pro zdárný běh aplikace je potřeba nakonfigurovat pár [[konfiguračních -> NavrhAplikace]] souborů pro local:
to:
Pro zdárný běh aplikace je potřeba nakonfigurovat pár [[konfiguračních -> NasazeniAplikace]] souborů pro local:
10 November 2009, 18:47 by roman85 -
10 November 2009, 18:47 by roman85 -
Changed lines 64-69 from:
[@$ sudo apt-get install postgresql #yum install postgresql
$ sudo passwd postgres #Změní heslo uživaleli 'postgres'
$ sudo /etc/init.d/postgresql-* restart #Restartuje server
$ su postgres #Přihlášení jako administrátor databáze

$ createdb postgres #vytvří databázi nazvanou 'postgres'
to:
[@$ sudo apt-get install postgresql #yum install postgresql
$ sudo passwd postgres #Změní heslo uživaleli 'postgres'
$ sudo /etc/init.d/postgresql-* restart #Restartuje server
$ su postgres #Přihlášení jako administrátor databáze

$ createdb postgres #vytvoří databázi nazvanou 'postgres'
10 November 2009, 18:45 by roman85 -
10 November 2009, 18:45 by roman85 -
Changed lines 62-64 from:
Návod instalce je určen pro linux. Práce v ''psql''konzoli je nezávislá na platformě.

[@sudo apt-get install postgresql #yum install postgresql
to:
Návod instalce je určen pro linux. Práce v ''psql'' konzoli je nezávislá na platformě.

[@$ sudo apt-get install postgresql #yum install postgresql
10 November 2009, 18:44 by roman85 -
Changed lines 61-63 from:
/sudo apt-get install postgresql
\sudo passwd postgres #Změní heslo
to:

Návod instalce je určen pro linux. Práce v ''psql''konzoli je nezávislá na platformě.

[@sudo apt-get install postgresql #yum install postgresql
$ sudo passwd postgres #Změní heslo uživaleli 'postgres'
$ sudo /etc/init.d/postgresql-* restart #Restartuje server
$ su postgres #Přihlášení jako administrátor databáze

$ createdb postgres #vytvří databázi nazvanou 'postgres'
$ psql postgres #přihlášení do databáze 'postgres'
postgres=# ALTER USER postgres with password 'postgres'; #nastaví heslo uživateli 'postgres' v databázi na 'postgres'
postgres=# \i spot.sql #provedení příkazů ze souboru, př. nahraje dump databáze projektu

@]
10 November 2009, 18:29 by roman85 -
Changed lines 61-63 from:
''sudo apt-get install postgresql''
''sudo passwd postgres #Změní heslo''
to:
/sudo apt-get install postgresql
\sudo passwd postgres #Změní heslo
10 November 2009, 18:28 by roman85 -
Added lines 60-63:
h3. Instalace a spuštění postgresql databáze
''sudo apt-get install postgresql''
''sudo passwd postgres #Změní heslo''
05 November 2009, 18:38 by JanSobisek -
Added lines 19-21:
/target - defaultní adresář pro vygenerovaný war soubor a vygenerovanou dokumentaci
/site - adresář pro vygenerované stránky projektu
/apidocs - pro javadoc
03 November 2009, 20:54 by JanSobisek -
Changed line 7 from:
/logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace
to:
/logs - sem se mohou(podle nastavení v log4j.properties) zapisovat [[logy -> JemnyUvodDoLogovani]] aplikace
Changed line 9 from:
/src - adresář obsahuje všechny zdrojové a konfigurační souboru.
to:
/src - adresář obsahuje všechny zdrojové a [[konfigurační -> NasazeniAplikace]] soubory.
Changed line 13 from:
/WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + ''web.xml''.
to:
/WEB-INF - adresář jako takový obsahuje [[konfigurační -> NasazeniAplikace]] soubory pro spring + ''web.xml''.
Changed line 16 from:
/properties - obsahuje konfigurační properties soubory
to:
/properties - obsahuje [[konfigurační -> NasazeniAplikace]] properties soubory
Changed lines 38-45 from:
* [[Java -> http://java.sun.com/javase/downloads/index.jsp]] 5.0 nebo vyšší
* [[Maven -> http://maven.apache.org/download.html]], ideálně 2.0.x
* [[Postgresql -> http://www.postgresql.org/download/]] 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1 ...
- a to je více méně vše. Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem. 1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii. 2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.


Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local:
to:
* [[Java -> http://java.sun.com/javase/downloads/index.jsp]] 5.0 nebo vyšší
* [[Maven -> http://maven.apache.org/download.html]], ideálně 2.0.x
* [[Postgresql -> http://www.postgresql.org/download/]] 8.1 - na toto pozor! Při mém 1. [[deploy -> NasazeniAplikace]] běžel SPOT nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1...- a to je více méně vše.

Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem.
# volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii.
# volbou je mít "nainstalovaný" servletový kontejner [[Tomcat -> http://tomcat.apache.org ]] a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.


Pro zdárný běh aplikace je potřeba nakonfigurovat pár [[konfiguračních -> NavrhAplikace]] souborů pro local:
Changed lines 124-125 from:
A nebo v případě nějaké chyby se do mv vloží ''Object'' reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "''error.unknow''" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech ''messages_xx.properties'' v různých jazykových mutacích.
to:
A nebo v případě nějaké chyby se do mv vloží ''Object'' reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "''error.unknow''" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech ''messages_xx.properties'' v různých [[jazykových -> LokalizaceAplikace]] mutacích.
03 November 2009, 20:24 by JanSobisek - pridany odkazy
Changed line 8 from:
/sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí.
to:
/sql - obsahuje sql scripty pro vytvoření potřebných [[tabulek a sekvencí -> NavrhAplikace]].
Changed line 14 from:
/classes - obsahuje soubory s lokalizačními řetězci.
to:
/classes - obsahuje soubory s [[lokalizačními řetězci -> lokalizaceAplikace]].
Changed line 18 from:
/test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
to:
/test/java/cz/zcu/kiv/spot - adresář obsahující veškeré [[testy -> JemnyUvodDoTestoveni]] aplikace.
Changed lines 37-40 from:
Je potřeba mít nainstalovaný:
- Java 5.0 nebo vyšší
- Maven, ideálně 2.0.x
- Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1 ...
to:
Je potřeba mít [[nainstalovaný -> NasazeniAplikace]]:
* [[Java -> http://java.sun.com/javase/downloads/index.jsp]] 5.0 nebo vyšší
* [[Maven -> http://maven.apache.org/download.html]], ideálně 2.0.x
* [[Postgresql -> http://www.postgresql.org/download/]] 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1 ...
Changed lines 52-53 from:
Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans nebo Eclise (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.
to:
Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans nebo Eclipse (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s [[Mavenem -> JemnyUvodDoMavenu]], Springem aj. Tato volba je opravdu jen na vás.
Changed lines 67-72 from:
h3. Jemné seznámení s datovým modelem.

V současné době má datový model 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit.
TODO pridat datovy model

to:
h3. Jemné seznámení s datovým modelem

V současné době má [[datový model -> NavrhAplikace]] okolo 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit.

Changed lines 85-86 from:
S principiálním popisem začnu od pohledu uživatele. Tomu přijde do browseru html kód, které umí browser zobrazit. HTML kód se odešle ze servletového kontejneru po příchozím requestu. Servletový kontejner vytváří tento zmiňovaný kód ze servletů. Ty získává dynamicky překladem jsp stránek na servlety. A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace. Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller, který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.
to:
S principiálním popisem začnu od pohledu uživatele. Tomu přijde do browseru html kód, které umí browser zobrazit. HTML kód se odešle ze servletového kontejneru po příchozím requestu. Servletový kontejner vytváří tento zmiňovaný kód ze servletů. Ty získává dynamicky překladem jsp stránek na servlety. A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace.
Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller, který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.
31 October 2009, 18:21 by JanSobisek - doplneny odkazy
Added lines 77-79:

dodrzovat ImplementacniKonvence
Changed lines 183-185 from:
to:
h4. Zpracování vyjímek
* ExceptionHandling
31 October 2009, 18:05 by JanSobisek -
Added line 187:
* JemnyUvodDoLogovani
Added line 193:
* JemnyUvodDoTestoveni
31 October 2009, 17:14 by JanSobisek - merge dokumentace se SVN doc
Added lines 37-43:
Je potřeba mít nainstalovaný:
- Java 5.0 nebo vyšší
- Maven, ideálně 2.0.x
- Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1 ...
- a to je více méně vše. Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem. 1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii. 2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.

Added lines 52-53:
Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans nebo Eclise (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.
Added lines 67-72:
h3. Jemné seznámení s datovým modelem.

V současné době má datový model 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit.
TODO pridat datovy model

31 October 2009, 16:44 by JanSobisek - odkazy na jiz vytvorene stranky
Changed lines 166-168 from:
h3. JSP
Cílem je, aby se veškeré zobrazované statické texty načítaly z ''messages_xx.properties'', kde xx představuje danou jazykovou mutaci(cz, en a de). Tyto texty se snadno vypíší například přes [@<fmt:message key="index.jakPrispet.popis" />@], kde ''index.jakPrispet.popis'' je záznam v messages_xx.properties a má přiřazen daný přeložený řetězec, který se vypíše. Volba příslušné jazykové mutace je závislá na aktuální uživatelově volbě.
to:
h3. Lokalizace v JSP
Samostatná stránka věnovaná [[lokalizaci aplikace -> LokalizaceAplikace]] SPOT.
Changed lines 175-176 from:
Bylo by více než vhodné, aby jste při práci s třídami, na kterých budete pracovat, k nim rovnou psali alespoň základní testy. Netvrdím, že můj nástřel testů je dostačující, na druhou stranu ho lze použít jako vodítko.
to:
Bylo by více než vhodné, aby jste při práci s třídami, na kterých budete pracovat, k nim rovnou psali alespoň základní testy. Netvrdím, že můj nástřel testů je dostačující, na druhou stranu ho lze použít jako vodítko.

* TestovaciScenare
19 September 2009, 15:02 by jsobisek - drobnosti
Changed lines 178-179 from:
Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích.
to:
Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší [[(Attach:)spot_stress_controll.jpg | zmatek]], než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích.
06 September 2009, 15:55 by jsobisek -
Changed lines 59-60 from:
[[(Attach:)turorial-spot-app-spusteni.zip]] [0,4 MB]
to:
Pro windows: [[(Attach:)turorial-spot-app-spusteni.zip]] [0,4 MB]
06 September 2009, 15:53 by jsobisek -
Changed line 48 from:
h3. Nastavení SVN pro NetBeans
to:
h3. Nastavení SVN pro [[Netbeans -> http://www.netbeans.org]]
Changed line 51 from:
Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí NetBeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:
to:
Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí Netbeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:
06 September 2009, 15:47 by jsobisek - Pridan tutorial pro ide netbeans pro linux
Changed lines 46-47 from:
[[(Attach:)turorial-spot-win32-ide-eclipse.zip]] [1,4 MB]
to:
Pro windows i pro unix: [[(Attach:)turorial-spot-win32-ide-eclipse.zip]] [1,4 MB]
Changed lines 49-50 from:
to:
Pro unix: [[(Attach:)tutorial-spot-unix-ide-netbeans.zip]] [0,7 MB]
06 September 2009, 11:45 by jsobisek - Pridany tutorialy pro ide eclipse a spusteni aplikace
Added lines 45-47:
h3. Nastavení IDE [[Eclipse -> http://www.eclipse.org]]
[[(Attach:)turorial-spot-win32-ide-eclipse.zip]] [1,4 MB]
Changed lines 57-59 from:
to:
h3. Spuštění aplikace
[[(Attach:)turorial-spot-app-spusteni.zip]] [0,4 MB]
29 March 2009, 18:50 by H -
Changed line 47 from:
Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí NetBeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se sprovoznění nepovede, je to velmi jednoduché:
to:
Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí NetBeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:
29 March 2009, 18:48 by H -
Changed lines 45-54 from:
to:
h3. Nastavení SVN pro NetBeans

Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí NetBeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se sprovoznění nepovede, je to velmi jednoduché:
* otevřete NetBeans IDE
* v Menu/Versioning klikněte na Checkout
* ponechejte defaultní nastavení a stiskněte OK
* opakujte bod 2
* nastavte cestu uložiště, jméno a heslo

09 March 2009, 22:34 by Tomas Peterka -
Added lines 157-158:
* LogovaciKonvence
23 February 2009, 10:51 by PremekBrada -
Changed lines 64-65 from:
[@<bean id="urlAbcMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" abstract="false" singleton="true"
to:
[@<bean id="urlAbcMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
abstract="false" singleton="true"
21 February 2009, 20:47 by Tomas Peterka -
Changed lines 41-42 from:
''./src/main/resources/WEB-INF/classes/log4j.properties'' - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru.
to:
''./src/main/resources/WEB-INF/classes/log4j.properties'' - nastavení cesty, kam se budou zapisovat logy, případně velikost logovacího souboru.
21 February 2009, 20:44 by Tomas Peterka -
Changed line 16 from:
/properties - obsahuje velkou část konfiguračních properties souborů
to:
/properties - obsahuje konfigurační properties soubory
Changed lines 23-37 from:

projekt, application

značka, tag, kategorie

úzus, usage

odkaz, link

typ zdrojů, source usages

komentář, comment

uživatel, user
to:
* projekt, application
* značka, tag, kategorie
* úzus, usage
* odkaz, link
* typ zdrojů, source usages
* komentář, comment
* uživatel, user
21 February 2009, 20:43 by Tomas Peterka -
Added line 25:
Added line 27:
Added line 29:
Added line 31:
Added line 33:
Added line 35:
Changed lines 39-42 from:

SPOT - Slovník Překladů Odborné terminologie.
úzus - například angličtina může mít několik odnoží. Například je rozdíl mezi anglickou a americkou angličtinou. Tyto varianty angličtin pak nazveme úzusy.
to:
* SPOT - Slovník Překladů Odborné terminologie.
* úzus - například angličtina může mít několik odnoží. Například je rozdíl mezi anglickou a americkou angličtinou. Tyto varianty angličtin pak nazveme úzusy.
21 February 2009, 20:42 by Tomas Peterka -
Changed line 88 from:
Nyní tedy konečně přichází ke slovu ''[@AdminUserController@]''. Tento implementuje rozhraní ''Controller'', který má k naimplementování pouze 1 metodu, tou je ''[@handleRequest(HttpServletRequest request, HttpServletResponse response)@]'', která navrací ModelAndView(mv)@]''. ''[@ModelAndView@]'' slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: [@mv = new ModelAndView("/WEB-INF/jsp/admin/admin-users.jsp")@];
to:
Nyní tedy konečně přichází ke slovu ''[@AdminUserController@]''. Tento implementuje rozhraní ''Controller'', který má k naimplementování pouze 1 metodu, tou je ''[@handleRequest(HttpServletRequest request, HttpServletResponse response)@]'', která navrací ''[@ModelAndView(mv)@]''. ''[@ModelAndView@]'' slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: [@mv = new ModelAndView("/WEB-INF/jsp/admin/admin-users.jsp")@];
Changed lines 109-110 from:
Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager@]'' je do adminUserControlleru@]'' injektován Springem, proto je v controlleru tento setter:
to:
Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. ''[@DictionaryManager@]'' je do ''[@AdminUserControlleru@]'' injektován Springem, proto je v controlleru tento setter:
21 February 2009, 18:47 by Tomas Peterka -
Changed lines 86-90 from:
Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru adminUserController. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od HandlerInterceptorAdapter, který má 3 metody - preHandle(HttpServletRequest request, HttpServletResponse response, Object handler), postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) a afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex). Ve Spotu je implementována pouze metoda preHandle().) Beana interceptoru vypadá podobně jako beana controlleru. Například authInterceptor se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru adminUserController, jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

Nyní tedy konečně přichází ke slovu AdminUserController. Tento implementuje rozhraní Controller, který má k naimplementování pouze 1 metodu, tou je handleRequest(HttpServletRequest request, HttpServletResponse response), která navrací ModelAndView(mv). ModelAndView slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: mv = new ModelAndView("/WEB-INF/jsp/admin/admin-users.jsp");
A nebo v případě nějaké chyby se do mv vloží Object reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "error.unknow" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech messages_xx.properties v různých jazykových mutacích.
to:
Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru ''[@AdminUserController@]''. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od ''[@HandlerInterceptorAdapter@]'', který má 3 metody - ''[@preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)@]'', ''[@postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)@]'' a ''[@afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)@]''. Ve Spotu je implementována pouze metoda ''[@preHandle()@]''.) Beana interceptoru vypadá podobně jako beana controlleru. Například ''[@AuthInterceptor@]'' se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru ''[@AdminUserController@]'', jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

Nyní tedy konečně přichází ke slovu ''[@AdminUserController@]''. Tento implementuje rozhraní ''Controller'', který má k naimplementování pouze 1 metodu, tou je ''[@handleRequest(HttpServletRequest request, HttpServletResponse response)@]'', která navrací ModelAndView(mv)@]''. ''[@ModelAndView@]'' slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: [@mv = new ModelAndView("/WEB-INF/jsp/admin/admin-users.jsp")@];
A nebo v případě nějaké chyby se do mv vloží ''Object'' reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "''error.unknow''" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech ''messages_xx.properties'' v různých jazykových mutacích.
Changed lines 109-110 from:
Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager je do adminUserControlleru injektován Springem, proto je v controlleru tento setter:
to:
Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager@]'' je do adminUserControlleru@]'' injektován Springem, proto je v controlleru tento setter:
Changed lines 115-116 from:
Zpět k volání dictionaryManager.getAllUsers(). Podíváme-li se na implementaci rozhraní DictionaryManager, nalezneme tam tento kód:
to:
Zpět k volání [@dictionaryManager.getAllUsers()@]. Podíváme-li se na implementaci rozhraní ''[@DictionaryManager@]'', nalezneme tam tento kód:
Changed lines 121-122 from:
Z něho vidíme, že je třeba jít do datové vrstvy aplikace k DAO rozhraním a jejich implementaci. Implementace UserDaoImpl je ta třída, která už komunikuje s databází.(Pozn.: S db komunikuje přímo jdbc, ale naše DAO jsou poslední z pohledu aplikace.) Pojďme se podívat jak přesně funguje.
to:
Z něho vidíme, že je třeba jít do datové vrstvy aplikace k DAO rozhraním a jejich implementaci. Implementace ''[@UserDaoImpl@]'' je ta třída, která už komunikuje s databází.(Pozn.: S db komunikuje přímo jdbc, ale naše DAO jsou poslední z pohledu aplikace.) Pojďme se podívat jak přesně funguje.
Changed lines 128-129 from:
Metoda getAllUsers() je přehledná. Nejdříve je popsán string, který představuje SQL dotaz nad databází. Následuje return, který navrací volání dotazu sql za použití UserRowMapper(). UserRowMapper je vnitřní privátní třída třídy UserDaoImpl a zajišťuje namapování jednotlivých záznamů z tabulky "users" na doménové objekty User.
to:
Metoda [@getAllUsers()@] je přehledná. Nejdříve je popsán string, který představuje SQL dotaz nad databází. Následuje return, který navrací volání dotazu sql za použití [@UserRowMapper()@]. ''[@UserRowMapper@]'' je vnitřní privátní třída třídy ''[@UserDaoImpl@]'' a zajišťuje namapování jednotlivých záznamů z tabulky "users" na doménové objekty ''User''.
Changed lines 153-154 from:
Cílem je, aby se veškeré zobrazované statické texty načítaly z messages_xx.properties, kde xx představuje danou jazykovou mutaci(cz, en a de). Tyto texty se snadno vypíší například přes <fmt:message key="index.jakPrispet.popis" />, kde index.jakPrispet.popis je záznam v messages_xx.properties a má přiřazen daný přeložený řetězec, který se vypíše. Volba příslušné jazykové mutace je závislá na aktuální uživatelově volbě.
to:
Cílem je, aby se veškeré zobrazované statické texty načítaly z ''messages_xx.properties'', kde xx představuje danou jazykovou mutaci(cz, en a de). Tyto texty se snadno vypíší například přes [@<fmt:message key="index.jakPrispet.popis" />@], kde ''index.jakPrispet.popis'' je záznam v messages_xx.properties a má přiřazen daný přeložený řetězec, který se vypíše. Volba příslušné jazykové mutace je závislá na aktuální uživatelově volbě.
21 February 2009, 18:38 by Tomas Peterka -
Changed lines 49-54 from:
* ''web.xml'' - kde jinde bych měl začít, když než u tohoto souboru. Jde o vstupní od do každé webové aplikace napsané v Javě. Definují se zde základní listenery, context-param, servlet-mapping, taglibs a další.

* ''spot-servlet.xml'' - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení spot.properties přes PropertyPlaceholderConfigurator.

* ''applicationContext.xml'' - beany pro transakce, DAO objekty, validátory, načtení jdbc.properties a weight-votes.properties přes PropertyPlaceholderConfigurator, beana pro messages aplikace a beana business logiky DictionaryManager.
to:
* ''web.xml'' - kde jinde bych měl začít, když než u tohoto souboru. Jde o vstupní od do každé webové aplikace napsané v Javě. Definují se zde základní listenery, ''context-param'', ''servlet-mapping'', ''taglibs'' a další.

* ''spot-servlet.xml'' - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení ''spot.properties'' přes ''[@PropertyPlaceholderConfigurator@]''.

* ''applicationContext.xml'' - beany pro transakce, DAO objekty, validátory, načtení ''jdbc.properties'' přes ''[@PropertyPlaceholderConfigurator@]'', beana pro messages aplikace a beana business logiky ''[@DictionaryManager@]''.
21 February 2009, 18:37 by Tomas Peterka -
Changed lines 6-20 from:
/doc - tento adresář by měl obsahovat dokumentaci...
/logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace
/sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí.
/src - adresář obsahuje všechny zdrojové a konfigurační souboru.
/main
/java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
/resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
/WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + ''web.xml''.
/classes - obsahuje soubory s lokalizačními řetězci.
/jsp - obsahuje veškeré jsp soubory v daných podadresářích.
/properties - obsahuje velkou část konfiguračních properties souborů
/tld - potřebné tag libraries..
/test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
/temp - obsahuje vzorové soubory pro import slov ze souboru a je pracovním adresářem při hromadném importu slov.
to:
/doc - tento adresář by měl obsahovat dokumentaci...
/logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace
/sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí.
/src - adresář obsahuje všechny zdrojové a konfigurační souboru.
/main
/java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
/resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
/WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + ''web.xml''.
/classes - obsahuje soubory s lokalizačními řetězci.
/jsp - obsahuje veškeré jsp soubory v daných podadresářích.
/properties - obsahuje velkou část konfiguračních properties souborů
/tld - potřebné tag libraries..
/test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
/temp - obsahuje vzorové soubory pro import slov ze souboru a je pracovním adresářem při hromadném importu slov.
Changed lines 39-44 from:
Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local:
./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva)
./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru.
./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.

to:
Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local:

''./src/main/resources/WEB-INF/properties/jdbc.properties'' - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva)

''./src/main/resources/WEB-INF/classes/log4j.properties'' - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru.

''./src/main/resources/WEB-INF/classes/spot.properties'' - různé možnosti nastaveni vlastní aplikace.

21 February 2009, 18:32 by Tomas Peterka -
Changed lines 152-157 from:
to:
h3. Logování
Když se dostanete k práci s neokomentovanou třídou, dookomentujte jí. Času je na to třeba minimum a když se nám pak předhodí log ze serveru s tím, že aplikace padá tehdy a tehdy, tak se alespoň bude dát z logu poznat, co se před spadnutím aplikace dělo a také proč spadla. Z toho plyne, ze nebude problém chybu opravit. '''Čtení logu má být jako čtení knihy s příběhem, v každé části by mělo být jasné co se děje.'''

h3. Testování
Bylo by více než vhodné, aby jste při práci s třídami, na kterých budete pracovat, k nim rovnou psali alespoň základní testy. Netvrdím, že můj nástřel testů je dostačující, na druhou stranu ho lze použít jako vodítko.
Changed line 161 from:
Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb ''StaticPageControlleru''.
to:
Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb ''[@StaticPageControlleru@]''.
21 February 2009, 18:22 by Tomas Peterka -
Deleted lines 4-28:

h3. Co je potřeba mít nainstalované a v jaké verzi
Na tuto část je třeba dát si pozor. Když jsme projekt přebíral já, tak to vypadalo tak, že jsem se sešel s mým předchůdcem a ten mi řekl, že to běží nad Postgresql, používá se tam to to to a to, ale už neřekl nic o verzích. To, že jsme vyvíjel na nejnovějších verzích se mi následně vymstilo při deployi aplikace o půl roku později... Věnujte tedy prosím tomuto dokumentu pozornost a nezapomeňte jej pravidelně aktualizovat.

Je potřeba mít nainstalovaný:
- Java 5.0 nebo vyšší
- Maven, ideálně 2.0.x
- Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1 ...
- a to je více méně vše. Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem. 1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii. 2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local:
./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva)
./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru.
./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.


h3. IDE
Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans nebo Eclise (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

h3. Jemné seznámení s datovým modelem.
V současné době má datový model 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit. Pokud se podaří, bude externě dodáno schéma, na kterém bude jasně vidět, co s čím a jak je propojeno.

Bohužel vás asi jen odkážu na komentáře u jednotlivých tabulek a vaši fantazii. Bez ERA modelu, na který nemám čas, toho asi moc nepopíši.

Changed lines 10-18 from:
/main
/java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
/resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
/WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
/classes - obsahuje soubory s lokalizačními řetězci.
/jsp - obsahuje veškeré jsp soubory v daných podadresářích.
/properties - obsahuje velkou část konfiguračních properties souborů
/tld - potřebné tag libraries..
/test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
to:
/main
/java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
/resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
/WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + ''web.xml''.
/classes - obsahuje soubory s lokalizačními řetězci.
/jsp - obsahuje veškeré jsp soubory v daných podadresářích.
/properties - obsahuje velkou část konfiguračních properties souborů
/tld - potřebné tag libraries..
/test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
Deleted line 20:
Changed lines 37-44 from:
to:
h3. Konfigurace aplikace

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local:
./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva)
./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru.
./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.

21 February 2009, 18:18 by Tomas Peterka -
Added lines 1-175:
h1. Jemný úvod od aplikace

Tento dokument má za cíl sloužit jako pomocník pro "rychlé" zorientování se ve aplikaci a její architektuře.


h3. Co je potřeba mít nainstalované a v jaké verzi
Na tuto část je třeba dát si pozor. Když jsme projekt přebíral já, tak to vypadalo tak, že jsem se sešel s mým předchůdcem a ten mi řekl, že to běží nad Postgresql, používá se tam to to to a to, ale už neřekl nic o verzích. To, že jsme vyvíjel na nejnovějších verzích se mi následně vymstilo při deployi aplikace o půl roku později... Věnujte tedy prosím tomuto dokumentu pozornost a nezapomeňte jej pravidelně aktualizovat.

Je potřeba mít nainstalovaný:
- Java 5.0 nebo vyšší
- Maven, ideálně 2.0.x
- Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1 ...
- a to je více méně vše. Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem. 1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii. 2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local:
./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva)
./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru.
./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.


h3. IDE
Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans nebo Eclise (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

h3. Jemné seznámení s datovým modelem.
V současné době má datový model 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit. Pokud se podaří, bude externě dodáno schéma, na kterém bude jasně vidět, co s čím a jak je propojeno.

Bohužel vás asi jen odkážu na komentáře u jednotlivých tabulek a vaši fantazii. Bez ERA modelu, na který nemám čas, toho asi moc nepopíši.


h3. Adresářová struktura
/doc - tento adresář by měl obsahovat dokumentaci...
/logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace
/sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí.
/src - adresář obsahuje všechny zdrojové a konfigurační souboru.
/main
/java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
/resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
/WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
/classes - obsahuje soubory s lokalizačními řetězci.
/jsp - obsahuje veškeré jsp soubory v daných podadresářích.
/properties - obsahuje velkou část konfiguračních properties souborů
/tld - potřebné tag libraries..
/test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
/temp - obsahuje vzorové soubory pro import slov ze souboru a je pracovním adresářem při hromadném importu slov.


h3. Jmenné konvence
Tato kapitola je v rámci SPOTu docela problémová. Člověk se v aplikaci může setkat s tím, že jeden termín má i 3 ekvivalentní výrazy. Tomuto bych zde rád věnoval pár řádků. Zde jsou uvedená některá synonyma, na která jsem si vzpomněl:

projekt, application
značka, tag, kategorie
úzus, usage
odkaz, link
typ zdrojů, source usages
komentář, comment
uživatel, user

h4. Význam některých výrazů:

SPOT - Slovník Překladů Odborné terminologie.
úzus - například angličtina může mít několik odnoží. Například je rozdíl mezi anglickou a americkou angličtinou. Tyto varianty angličtin pak nazveme úzusy.


h3. Princip implementace aplikace
* ''web.xml'' - kde jinde bych měl začít, když než u tohoto souboru. Jde o vstupní od do každé webové aplikace napsané v Javě. Definují se zde základní listenery, context-param, servlet-mapping, taglibs a další.

* ''spot-servlet.xml'' - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení spot.properties přes PropertyPlaceholderConfigurator.

* ''applicationContext.xml'' - beany pro transakce, DAO objekty, validátory, načtení jdbc.properties a weight-votes.properties přes PropertyPlaceholderConfigurator, beana pro messages aplikace a beana business logiky DictionaryManager.

S principiálním popisem začnu od pohledu uživatele. Tomu přijde do browseru html kód, které umí browser zobrazit. HTML kód se odešle ze servletového kontejneru po příchozím requestu. Servletový kontejner vytváří tento zmiňovaný kód ze servletů. Ty získává dynamicky překladem jsp stránek na servlety. A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace. Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller, který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.

[@<bean id="adminUsersController" class="cz.zcu.kiv.spot.controllers.AdminUsersController">
<property name="dictionaryManager" ref="dictionaryManager" />
<property name="pagingHelper" ref="pagingHelper" />
</bean>@]

Id značí unikátní jméno, pod kterým je daná beana známa ostatním beanám, class je cesta ke controlleru a property říká, že je závislá na těch daných beanách.

Toto provázání je zaznamenáno v beanách v souboru ''spot-servlet.xml''. Konkrétně:

[@<bean id="urlAbcMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" abstract="false" singleton="true"
lazy-init="default" autowire="default" dependency-check="default">
<property name="interceptors">
<list>
<ref bean="settingInterceptor" />
<ref bean="authInterceptor" />
</list>
</property>
<property name="urlMap">
<map>
.
.
<entry key="/sprava/uzivatele" value-ref="adminUsersController" />
.
.
</map>
</property>
<property name="alwaysUseFullPath" value="true" />
</bean>@]

Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru adminUserController. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od HandlerInterceptorAdapter, který má 3 metody - preHandle(HttpServletRequest request, HttpServletResponse response, Object handler), postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) a afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex). Ve Spotu je implementována pouze metoda preHandle().) Beana interceptoru vypadá podobně jako beana controlleru. Například authInterceptor se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru adminUserController, jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

Nyní tedy konečně přichází ke slovu AdminUserController. Tento implementuje rozhraní Controller, který má k naimplementování pouze 1 metodu, tou je handleRequest(HttpServletRequest request, HttpServletResponse response), která navrací ModelAndView(mv). ModelAndView slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: mv = new ModelAndView("/WEB-INF/jsp/admin/admin-users.jsp");
A nebo v případě nějaké chyby se do mv vloží Object reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "error.unknow" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech messages_xx.properties v různých jazykových mutacích.

[@try {
/* Pokud bylo zadane nove heslo */
if (!pass.equals("")) {
user.setNpass(user.getPass());
}
dictionaryManager.saveUser(user);
mv.addObject("completeMsg", "editUser.complete");
}
catch (Exception e) {
logger.error("V aplikaci doslo k nasledujici chybe: " + e);
mv.addObject("errorViewMsg", "error.unknow");
return;
}@]

Tak a nyní se dostáváme k tomu, jak se data z databáze dostanou ke controlleru.

[@List<User> users = dictionaryManager.getAllUsers();@]

Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager je do adminUserControlleru injektován Springem, proto je v controlleru tento setter:

[@public void setDictionaryManager(DictionaryManager dictionaryManager) {
this.dictionaryManager = dictionaryManager;
}@]

Zpět k volání dictionaryManager.getAllUsers(). Podíváme-li se na implementaci rozhraní DictionaryManager, nalezneme tam tento kód:

[@public List<User> getAllUsers() {
return userDao.getAllUsers();
}@]

Z něho vidíme, že je třeba jít do datové vrstvy aplikace k DAO rozhraním a jejich implementaci. Implementace UserDaoImpl je ta třída, která už komunikuje s databází.(Pozn.: S db komunikuje přímo jdbc, ale naše DAO jsou poslední z pohledu aplikace.) Pojďme se podívat jak přesně funguje.

[@public List<User> getAllUsers () {
String sql = "SELECT * FROM users ORDER BY login";
return getJdbcTemplate().query(sql, new UserRowMapper ());
}@]

Metoda getAllUsers() je přehledná. Nejdříve je popsán string, který představuje SQL dotaz nad databází. Následuje return, který navrací volání dotazu sql za použití UserRowMapper(). UserRowMapper je vnitřní privátní třída třídy UserDaoImpl a zajišťuje namapování jednotlivých záznamů z tabulky "users" na doménové objekty User.

[@private class UserRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("users_id"));
user.setLogin(rs.getString("login"));
user.setPass(rs.getString("pass"));
user.setFirstname(rs.getString("firstname"));
user.setLastname(rs.getString("lastname"));
user.setEmail(rs.getString("email"));
user.setEmailpub(rs.getString("email_pub"));
user.setHomepage(rs.getString("homepage"));
user.setDescription(rs.getString("description"));
user.setRights(rs.getInt("rights"));
user.setActive(rs.getInt("active"));
user.setActiveCode("active_code");
return user;
}
}@]

Tak toto byla asi nejtěžší část celého seznámení se SPOTem. Doufám tedy, že jsem vám alespoň objasnil základní princip fungování aplikace. Na principu tohoto příkladu příkladu více méně funguje celá aplikace.


h3. JSP
Cílem je, aby se veškeré zobrazované statické texty načítaly z messages_xx.properties, kde xx představuje danou jazykovou mutaci(cz, en a de). Tyto texty se snadno vypíší například přes <fmt:message key="index.jakPrispet.popis" />, kde index.jakPrispet.popis je záznam v messages_xx.properties a má přiřazen daný přeložený řetězec, který se vypíše. Volba příslušné jazykové mutace je závislá na aktuální uživatelově volbě.


h3. Všeobecně
Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích.

Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb ''StaticPageControlleru''.