Překonaný ResourceBundle, Spring MessageSource vítězí v prvním kole KO

Tento článek mám ve WordPressu rozepsaný snad už rok. Jeho původní název zněl "ResourceBundle - stačí Javě beze změny?". Plno věcí, které jsme původně jako Java vývojáři dělali my, postupně uzpůsobujeme tak, aby je mohli dělat web designeři. Na prezentační vrstvu zcela jistě patří lokalizované texty a zprávy, pro které standardně používáme ResourceBundly Javy, které se načítají z property souborů. Ideální model pro web developery je iterace: navrhnu stránku, vložím text do property bundlu, uložím, reloadnu stránku a kouknu jak to vypadá. V tomhle jednoduchém scénáři jsme však narazili hned na několik problémů.

Oracle, od slova věštit

Ano, ano. Dnes jsem po nasazení nového buildu opět strávil plodné čtyři hodiny věštěním z křišťálové koule zvané Oracle Application Server. Ještě ke všemu na prostředí, ke kterému není přímý přístup. Kód, který máme již na tuctu instalací, který bez problémů běží i na dvou testovacích strojích s "přibližně" stejnou konfigurací na produkci ne a ne.

Výsledkem mého pátrání bylo to, že pokud se na konkrétní verzi OC4J zavolá metoda getParameterMap() dřív než některá z metod getParameter, getParameterNames nebo getParameterValues, tak je výsledkem prázdná mapa, přestože se v requestu parametry nachází.

Školení Produktivita práce v Eclipse

Pavel Jetensky

O autorovi: Jetyho blog | LinkedIn

Pavel Jetenský se věnuje Java/J2EE vývoji již od roku 2003, z toho několik let v Irsku. Zajímají ho techniky automatického testování. V současné době pracuje jako metodický vedoucí Java/J2EE v Deltax Systems a.s.

Toto školení vám ukáže, jak co nejlépe využít různých pomůcek vývojového nástroje Eclipse IDE pro urychlení vývoje SW. Není zaměřeno na žádné pluginy pro Eclipse, veškeré tipy využijete v základní instalaci.

jQuery effects - quick start

V minulém článku, ve kterém jsem se zabýval JavaScript Closures, jsem se zmiňoval o tom, že mě k jejich studiu donutilo používání efektů z knihovny jQuery. Také jsem sliboval, že o svých zkušenostech něco málo napíšu v dalším článku. Nuže směle do toho.

jQuery je obecná knihovna obalující odlišné implementace (více než odlišnosti jazyka, míním odlišnosti práce s DOM reprezentací) JavaScriptu v běžně používaných prohlížečích. Efekty jsou pouze její minoritní částí, kterou možná většina vývojářů pracujících s jQuery ani nevyužívá. Jelikož jsem hračička, koketoval jsem s efekty už od první chvíle, kdy jsem s jQuery začal. Z globálního pohledu musím říct, že mě překvapuje, že tyto efekty fungují velmi dobře skrze všechny podporované prohlížeče a kupodivu jsou poměrně svižné i na pomalejších počítačích (pomalejšími mám na mysli, průměrný počítač koupený před 3-4 lety). Základní použití je velmi jednoduché a zvládne ho i člověk, který s JavaScriptem a jQuery teprve začíná. Kromě základních efektů dodávaných přímo jako součást jQuery Core (show, hide, toggle, fadeIn, fadeOut, animate), je k dispozici ještě oficiální dodatečná knihovna s widgety a dalšími effekty známá jako jQuery UI (zde najdete řadu dalších pěkných efektů, které byly kdysi součástí js knihovny interface.js).

Mock FTP server - další perla do sbírky automatického testování

Předevčírem se v mé RSS síti zachytila zajímavá zpráva, která dobře zapadá do katalogu řešení pro automatické testování. Jedná se o MockFtpServer, který se velmi podobá přístupu SubEtha SMTP Serveru, se kterým mám velmi pozitivní zkušenosti.

Princip je skutečně analogický zmiňovanému SubEtha SMTP Serveru, se kterým lze jednoduše ověřovat správné rozesílání emailů. Jednoduše nakonfigurujeme "virtuální" FTP server a nastartujeme jej na konkrétním portu. V testech pak můžeme ověřovat kód, který komunikuje s FTP serverem, aniž bychom museli vytvářet vlastní stub nebo mock objekty:

Druhý rok Otce Fura

Blíží se konec roku a s ním i rekapitulace toho, co je za námi. Rád bych prošel, ve zkratce to co se letošní rok odehrálo a zveřejnil pár statistik z Google Analytics a Wordpressu.

Hlavními událostmi tohoto roku, které mají nějakou spojitost s blogem, byla jOpenSpace konference, školení NetBeans platform a dvojice přednášek na Univerzitě Hradec Králové. Všechny události zarezonovaly blogem ať už ve formě záznamů a reportáží, nebo jako vedlejší produkt příprav na tyto akce. Doufám, že i příští rok budu mít zase příležitost se nějakých podobných událostí zůčastnit a přinést Vám z nich nějaké hodnotné informace.

Podcast: Záznam přednášky Pokročilé techniky automatického testování v praxi

V polovině listopadu jsem měl na Univerzitě Hradec Králové přednášku o automatickém testování v Javě, ve které jsem zabrousil už trošku do větší hloubky než v té, která proběhla na jaře tohoto roku. Přestože jsem především závěr přednášky nemohl probrat do takových podrobností, jak bych rád, doufám, že se mi většinu nasbíraných zkušeností nějakým způsobem podařilo předat. Pokud vás tedy opakovaně trápí některé problémy při psaní unit a integračních testů, možná při poslechu zjistíte, že i já jsem řešil podobný problém a můžu vám nabídnout nějaký tip co s daným problémem udělat, popř. čeho se vyvarovat.

Monitoring Declarative Transactions in Spring, <br>bod pro Otce Fura

Nevím jak vy, ale já mám vždy radost, když někdo jiný nezávisle dojde ke stejným závěrům, jako jsem došel já sám. Osobně to považuji za jisté potvrzení smysluplnosti mých vlastních úvah a toho, že nejsem tak úplně "mimo mísu".

Dnes vyšel na java.DZone.com článek s názvem Monitoring Declarative Transactions in Spring od Toma Celluciho, který se zabývá jednoduchým otestováním správného nastavení pointcutů při používání deklarativního nastavení transakcí ve Springu. Pokud si pamatujete, sám jsem tuto problematiku řešil před pár měsíci a publikoval vlastní řešení (a tak trochu mě zviklal Dagi, když se na něj na jOpenSpace moc netvářil).

JavaScript Closures - překvapení Java programátora

Javascript používám několik let, snad už od doby kdy jsem na univerzitě začal koketovat s webem. Celou dobu ho používám jen na jednoduché skriptování bez ambic na jakýkoliv propracovanější programovací model. S nástupem kvalitních frameworků jako je třeba jQuery, PrototypeJS, MooTools, Script.aculo.us a další, je člověk přinucen ponořit se do tajů JavaScriptu hlouběji a narazí na věci o kterých se mu před tím ani nesnilo. V tomto článku bych se s vámi rád podělil o pár zkušeností a především odkazů na kvalitní články o tzv. Closures v JavaScriptu. Dopředu upozorňuji, že nejsem žádný JavaScript guru a že čerpám především z odkazovaných článků a z několika projektů, kde jsem díky jQuery a DWR s closures přišel do styku.

Pozvánka na přednášku na UHK <br> Pokročilé techniky automatického testování v praxi

Díky mému špatnému odhadu, kolik je možné probrat za hodinu a půl jsem se na minulé přednášce nestihnul dotknout žádného z pokročilejších témat souvisejících s automatickým testováním, se kterými se při douhodobém vývoji s použitím testů zcela jistě setkáte. Proto jsem se s Tomášem Kozlem z Univerzity Hradec Králové dohodl na druhé přednášce, která by se věnovala už jen pouze těmto záludnějším věcem a také rozkryla podporu pro testování ve Spring Frameworku.

jOpenSpace 2008 – Audio #2

Není se třeba obávat, že by můj zájem o publikaci přednášek z jOpenSpace 2008 zveřejněním té mé ochladl. Ba naopak - předkládám Vám druhou várku záznamů a ještě nás čeká jedna várka, na kterou se můžete do konce roku těšit.

Pro úplnost ještě uvádím odkaz na předchozí záznamy:

Lightning Talk - Using Spring in large applications, Roman Pichlík

V této přednášce Dagi popisuje zkušenost s nasazením (a používáním) Spring Frameworku na velkém projektu v Hewlett-Packard. Velkým projektem se rozumí projekt složený z cca. 150 Maven subprojektů = 150 aplikačních kontextů, na kterém pracuje cca 40 vývojářů. Od šesté minuty se probírá zajímavý problém skládání velkého množství aplikačních kontextů Springu, na toto téma navazují já ve 13 minutě s narážkou na řešení popsané v seriálu o modulárních systémech ve Springu. Od 11 minuty se diskutuje o problematice autowiringu na velkých projektech. Po 15 minutě se naráží na použitelnost OSGI v J2EE projektech a obecně o rychlosti adopce nových Java standardů u velkých zákazníků. Po 20 minutě se probírají problémy vendor descriptorů a způsob instalace takto velké aplikace u různých zákazníků.

Release Day

Hned na začátku upozorňuji, že kdo očekává technické informace bude zklamán. Tento článek je spíš takovým zamyšlení nad tím, co znamená pro vývojáře slovo Release (nebo chcete-li český ekvivalent Spuštění). Z jednoho úhlu se na toto slovo můžeme dívat jako na měřítko času - obyčejní lidé měří čas v rocích, měsících a dnech, úředníci a ekonomové měří čas na zdaňovací období a kvartály, učitelé měří čas na semestry a pololetí a my vývojáři na milestony a releasy.

Selenium testování GUI

Pavel Jetensky

O autorovi: Jetyho blog | LinkedIn

Pavel Jetenský se věnuje Java/J2EE vývoji již od roku 2003, z toho několik let v Irsku. Zajímají ho techniky automatického testování. V současné době pracuje jako metodický vedoucí Java/J2EE v Deltax Systems a.s.

Na Java Open Space jsem měl na téma Selenium lightning talk. Honza ho nahrál jako podcast a zveřejnil v předchozím článku, ale bohužel je v nahrávce hodně šumu.

Testing Aspect Pointcuts - is there an easy way?

Nice thing about Aspect Oriented Programming is that you can easily add piece of logic to several (possibly other way not connected) parts of your application. You'll only write an Advice (piece of code that should be weaved into original code and executed at exactly specified point of time) and define Pointcut (an expression defining which classes and methods shall be advised). Please, keep in mind, that above description is somewhat simplyfying and that AOP could be much broader than this. Describing AOP is not the aim of this post - the aim lies in something else, and that is - testing. What's the best approach to test application logic modified in runtime (or compile time) with AOP process?

jOpenSpace 2008 – Audio #1

V reportáži z tohoto setkání jsem sliboval, že se pokusíme uveřejnit audio záznamy z jednotlivých session. Od slov došlo k realizaci a je připravena první várka záznamů ve formě podcastů.

Open Space Talk - ORM, Roman Pichlík

V této session se vede diskuse obecně o knihovnách pro objektově relační mapování. Zkraje se probírají obtíže s použitím Hibernate v prostředí desktopových Swingových aplikací v souvislosti s lazy loadingem v AWT threadu (do 16 minuty). Navazuje obecnější diskuse o ORM a jejich používání / zneužívání. Od 19 minuty probíhá porovnávání plnotučných ORM (JPA/Hibernate) s lehčími řešeními (konkrétní probíraný zástupce je iBatis). Od 24 minuty se reší problém N+1 pro dotahování master-detail dat v prostředí iBatis. Ve 27 minutě přebírá slovo Filemon a převádí řeč na Ruby a jeho Active Record. 29 minuta otvírá diskusi na téma faktoru složitosti. Po 30 minutě zmiňuje Petr Ferschman nástroj pro monitoring výkonnosti SQL v Hibernate (znovu otevřeno také po 54 minutě). Od 31 minuty se řeší problém automatického založení (a aktualizace) databázového schématu. Po 35 minutě se diskuse stáčí na MDA přístup pro řešení datové vrstvy aplikace. Od 44 minuty je probírána nutnost jednoznačných identifikátorů v tabulkách při použití Hibernate. 58 minuta odstartuje diskusi na téma cachování a performance v Hibernate a navazuje také popis principů cachování v iBatis.

MySQL temporary tables inside Transaction <br> and the magic of implicit commit

I've run into interesting and very strange problem. I was writing transactional Spring test that opens transaction at the beginning of it, and rollbacks at the end. First part of my test performed bunch of INSERT and UPDATE SQL commands and after that I was checking persisted changes by loading data back from the database. Suddenly my tests started to fail. And I was searching for the reason ...

Elegantní způsob ukládání verzi v Java archívech

Existují situace, kdy aplikaci neinstalujete sami, ale instaluje ji třetí strana - ať už je třetí stranou myšlen technik zákazníka nebo kolega z jiného oddělení firmy. Vy posléze přijdete už k nainstalované aplikaci, u které si nikdy tak úplně stoprocentně nemůžete být jisti verzí neřkuli verzemi knihoven, které daná aplikace používá. Přesto tato znalost může být pro řešení některých problémů zásadní (např. proto, že oprava může spočívat v pouhé instalaci nové verze knihovny / modulu). Můžete se s tím setkat i v daleko prostším případě - pokud vyvíjíte nějaký produkt s velkým množstvím instalací - chvíli vám může trvat než zjistíte jakou verzi má daný zákazník, u kterého řešíte nahlášené problémy.

Beans introspection - základy Springu

Je tomu už drahně let, co jsem používal k populaci JavaBean Commons-BeanUtils z rodiny Apache Jakarta. Od chvíle, kdy stavím svoje aplikace nad Springem, pozbývá používání této knihovny smysl - naopak bylo by bláhové se této knihovny držet, když Spring nabízí již ve svém základu mnohem víc. Prostým logickým úsudkem lze odvodit, že Spring coby IoC kontejner bude obsahovat promyšlenou logiku pro injektování dat do Java Bean. Nicméně v dokumentaci o tom najdete jen poměrně krátkou kapitolu Validation. Proto jsem se rozhodl vyextrahovat ze svého kódu pár příkladů, které standardní Spring dokumentaci trochu rozvádí do podrobností.

Jak bylo na J-Open Space Conference 2008

Tato reportáž vznikla v průběhu posledních session na J-Open Space konferenci v Jizerských Horách. Je na místě se ptát, co za akci to vlastně bylo. Otevření JOS 2008Jednalo se o první setkání lidí z české Java scény, kteří byli ochotní jeden letní víkend věnovat povídání o Javě a zkušenostech s SW vývojem obecně. Prvotní idea uspořádání konference a vlastní organizace akce patřila Michalovi Šrajerovi (alias Srakyi) ze společnosti Inmite. Výsledný mix 25 účastníků byl velmi pestrý - počínaje zástupci akademické sféry, lidí od Sun Microsystems nebo těch, co se točí okolo CZJUG (za pořadatele Dagi a několik přednášejících) a konče řadou českých bloggerů. Od slov Open Space v názvu konference byl odvozen způsob jakým konference probíhala (bližší informace o pravidlech OSC zde). Seance se dělily typově do tří skupin:

Teamcity & CVS & Maven: release on server

If you use Maven 2 and Teamcity integration server, you might want to perform releases on server. Although it's not so complicated, some things must fit one into another and you might spend a lot of time till you find out how to configure pom.xml and build configuration. For those of you, who need to setup it, this article could come quite handy.

Let's assume that you have maven release process setuped up for your localhost. If you do not, you can look at following articles, to get it running (this is the most difficult part, that I want to avoid analyzing in this post):