2010. szeptember 23., csütörtök

egy üzenet magamnak

Gyónás következik... Kicsit nehéz volt elmagyaráznom az operátoroknak is és végülis szerintem csak félig lett a vége megértés és a másik felében inkább napirendre térés, de mostanában számos JMS queue ütötte fel a fejét, aminek mindkét végén ugynanaz a webapp áll. JMS-t egyébént arra használja az ember, hogy más szolgáltatásokhoz üzeneteket küldjön és nem mellesleg biztos akar abban lenni hogy nem is alkalmatlankodik a kéréssel és egyszer ki is lesz szolgálva. Nos nekem ilyen nem áll rendelkezésre, nekem sima SOAP és egyéb http backendek vannak. Szóval amikor a webappom kiveszi a kérést a JMS-ből, akkor egy SOAP hívást küld tovább. Ha nem sikerült (pl network outage, server crash valahol, konfigurációs gubancok, satöbbi), akkor bátran és nagy magabiztossággal eldobom az exceptiont a message meg mehet a dead letter queue-ba vagy konfigtól függően újra besorolásra, legközelebb hátha több szerencséje lesz.

Szóval ez nekem olyan eccerű megoldásnak tűnik, JMS-SOAP bridge. Nem lesz ez mindig muszáj, már úton van a CXF-ben is a soap-over-jms cucc, más web service stackokban már talán ott is van.

Csak ennyit akartam mondani, köszönöm a figyelmet.

2010. augusztus 28., szombat

Servlet 3.0 első kör

Nagyon érdekelt a servlet 3.0 és közismerten türelmetlen tipus vagyok, letéptem hát a legfrissebb specifikációt és kipróbáltam rajta pár dolgot. A kipróbált implementációk:
  • Jetty 8
  • glassfish 3.0
  • tomcat 7
Hát eléggé fej-fej mellett voltak, úgy tünt kb mind ugyanaddig jutott el. A kisérletsorozatnak nem sikerült kizökkentenie a jetty-pártiságomból. Továbbra is a jetty volt a fejlesztés során a legkönyebben használható. A 8-as verzióhoz is van maven plugin. Pedig próbálgattam a glassfish 3 embedded pluginjét, igazából pozitív meglepetés volt, de hot deployt nem csinált. Szóval minden eltévedésem után újra kellett startolni és packagelni. A tomcat 7.0 az meg maradt a maga kis bemásolom és újraindítom megoldással. Magad uram ha integrációd nincsen.

Servlet annotációk

Iiiigen... aki velem dolgozik, az tudja mennyire nem komállom azt, hogy mindent annotálunk. Az XML HELL sem volt jó, de most elmentünk egy még rosszabb irányba. XML konfigurációkkal még megvolt az esélye annak, hogy áttekinthető marad. Mindenesetre gyors prototype alkalmazásokat az ember biztosan szivesebben tol össze úgy, hogy csak ráannotál a szervletére. Működött is mindenhol.

Azt soha nem értettem egyébként hogy a servlet ikonja az mi akart lenni. Valami ősi dolog lehet a Delphis és Progress-es időkből.

Opcionális búcsú a web.xml-től

Hát igen, ha nincs benne semmi érdekes, akkor le is törölhetjük és a dolog megy nélküle is. Persze ha már egy adatbázis kapcsolat kellene a la JNDI (ami végülis egy hasznos dolog), akkor vissza is jön egyből. Oké, szóval marad, adatbázisa kb mindenkinek van és az operátorok akarják babrálni. (Vajon miért pont azt az egy resource-ot? Az összes többivel miért nem foglalkoznak?)

Asynchron servlet support

Ez talán a legűberebb dolog mióta gyáva programózó vagyok, de az utóbbi 5 évben biztosan a legfontosabb dolog számomra. Nagyon egyszerő, ez történik: amikor úgy véled, hogy sokáig tartó művelet közeledik (pl vársz egy JMS üzenetre) egyszerűen azt mondod, hogy ez a request innentől asszinkron fog kiszolgálódni. Így:
req.startAsync();
Ezután elkérheted a requesthez tartozó AsyncContext ojjektumot

AsyncContext asyncContext = req.getAsyncContext();
Ezt akár bedobhatod egy másik szál által kezelt listába, ahol a lassú műveletre váró összes többi kliens várakozik. Az az egy szál le fogja tudni kezelni minden requestedet. Például valahogy így

asyncContext.getResponse().getWriter().write("gedappa!\n");
Eddig csúcs :) Na akkor most jön a gubanc. Azt is biztosan szeretnénk tudni, hogy mikor kellene ezt a AsyncContext objektumot kidobnunk a listából. Erre tök jó lett volna az AsyncListener osztály. Ami meg is van, kiválló. Példányosul is szépen az implementáció, még mindig oké, de aztán NoSuchMethodError amikor regisztrálni próbáltam, mind a 3 servlet containerben. Ez vagy valami kis lemaradás a specifikációhoz képest, vagy valami szokásos sünös-orákulumos gányolmány.

Elfelejtettem azzal kezdeni, hogy ennek mi értelme van. Talán már kiderült a fentiekből: megszabadulunk az millió kiszolgáló száltól, maradnak csak simán a TCP kapcsolatok. A NIO után végre a következő lépés.

Pár dolgot biztosan érdemes a async kedvéért átgondolni az üzemeltetésben is: például sokan használnak apache httpd-t a servlet container elött, mert példul még php és perl meg egyéb ingyombingyomokat is ezzel a szerverrel hajtanak. A httpd régebben single process per connection cucc volt, most már lehet külön szálakat is használni, de vicces hogy ott álnak majd a szálak, amig a java VM-ben megoldottuk hogy ne kelljen állniuk. Nekem nagyon gyanús, hogy ilyen esetekben sokkal érdemesebb lesz kihozni a servlet containert a httpd mögül. (és persze van, aki azt kérdezi: mit keresett ott addig, ha csak a java elött állt? kiválló kérdés...)

Hát ennyit akartam elmondani már jórég óta, csak mindig belémfolytották a szót. Egyébként komolyan gondolom, hogy ezt a lépést a java világ legnagyobb előrelépésének tartom az utóbbi 4-5 évre. Mondjuk nem kis lépés, de azért szivesen látnék nagyobb lépéseket is.

2010. július 23., péntek

nyáriszünet

Igen, nagyon meleg van, körülbelül ennyivel tudom magyarázni az elmúlt pár hónap inaktivítását. Kéktúrán voltam, néha egész hétvégén cuppogott és csámcsogott a cipőm a sárban, néha inkább forró mediterrán hangulatba hajlott, de végigcsináltam. Melóztam is elég sokat sajnos mindenki rámtolt mindenfélét és már nem csak fejlesztő vagyok hanem adminisztrátor is. Nem ideális, nagyon lefárasztanak, néha nem is marad időm haladni a fejlesztéssel. Holnap reggel elhúzok egy kicsit a tesóimmal tölteni az időt. Ők is le fognak fárasztani :)

Szóval ennek megfelelően lassan, de készül a todomap 0.6.0, és egy nagy rakás dolog már most is benne van. A héten akartam kitenni, de így nyaralás elött inkáb mégsem kapkodnék. Szóval ezek jönnek:
  • Van szabadszavas keresés. Elég bénácska, még valami szebb dizájn kellene neki :( A kinézettel mindig szívok.
  • Van integráció. A polgármesterek jobbára friss listáját használva üti a helyi hatóságokat. Még ki kellene őket listázni szépen a megfelelő oldalon.
  • Le lehet zárni a bugokat.
  • Pár új apróság, például egy térkép azokkala gebaszokkal, amiket te jelöltél be, saját RSS feedek. Ide még kell, hogy felhasználóknak is használhatóvá tegyem.
Szóval ez jön. Augusztus. A hőmérséklet lassan ismét csökkenni fog, a produktivítás fordított arányban nőni kezd.

2010. július 1., csütörtök

Cowboy Coding Manifesto

Annak ellenére hogy már másfél éve egyedül dolgozok (ami elég unalmas) és emiatt a scrum metodikát -vagy legalábbis jó részét- a sutba dobtam, a munkaadóm elküldött egy scrum trainingre. Azért nem volt tejesen haszontalan, nem írnék most róla részletes beszámolót, csak pár dolgot gondoltam vele kapcsolatban:
  • Kell-e egy scrum csapatnak dokumentálnia? - Erre nekem az lenne a válaszom, hogy HA a ügyfél kéri és csak azt amit kért. Amit senki sem fog elolvasni az ugyebár "waste". Például az OpenSSO-val hogy hogyan integrálódik a webalkalmazásom, nem hiszem hogy bárki elolvasná amit erről írok, de ha egy fejlesztő belenéz a kódba, szerintem értené (nagyon remélem :) ). Mindenki más állította hogy egy feladat akkor kész, ha dokumentálva van. Én ezt kivenném a kész definíciójából. A user doksin kívül egy ilyen feladathoz nem nagyon kell doko. Architektúra doko? Egy ennyire plain webapphoz?
  • Mondjuk azt meg is beszéltük, hogy ha nem adottak a feltételek (mint esetemben) akkor kár is erőltetni a scrumot. Szóval ennyiben maradtunk.
  • Egy processz nem hoz tavaszt. Az emberek visszazökkennek a megszokott munkatempójukhoz. Mondjuk ezért kell egy dedikált scrum master, de hát kinek van erre pénze?
  • Azért ahhoz bátorság kell, hogy idomítsd a munkaadód magas beosztású képviselőit. Pedig erre szükség van.
  • A scrum egy elég szigorú process és a training után már nem tartom annyira minimalistának. Szerintem ez már kicsit ellentétben áll az agile kiáltvány első pontjával.

2010. június 4., péntek

JUM XV log

Tegnap esti Java felhasználók találkozója. A democamphez hasonlóan viszonylag kevesen voltunk, erre az eseményre viszont sajnálhatja aki nem jött el, nekem nagyon tetszett a két előadás. Mindkét előadást szakmai bloggerek tartották, nekem is itt vannak a google reader végén.


A btrace egy trace eszköz, olyan mint a dtrace solarison (ez a legtöbb embernek azért nem mond sokat, nem egy mainstream oprendszer még a szervereken sem). Egyszerű kis scripteket lehet rá írni annotációkkal és nagyon kevés kóddal, ami a hotspot vm-hez kapcsolódik és bizonyos esetekben meghívódik. Például csinálhasz egy scriptet, ami a DriverManager.getConnection() metódusra ráakaszkodik. Tipikusan olyan komponensek tuningolásánál jól jöhet, amik nem logolnak és nem mi írtuk. Őszintén szólva tegnap került csak a látőterembe a cucc és most már nem tudom hogy élhettem eddig nélküle :)

Marhefka István: Domain Driven Development

István egy hosszabb előadást tartott a Domain Driven Developmentről, ami egy nagyon elméleti téma de nagyon sok gyakorlati tapasztalat is volt benne. A DTO pattern körül a végén sok kérdés volt, azt hiszem az említett fintorgók tábora nagy számban volt jelen. Én csak akkor szoktam bevetni, ha már nincs más választásom.
Egyébként nem is tudtam hogy van még a munkaadómon kívül teamcity felhasználó itthon. Elég borsos ára van :-)

Ez volt most az időny utolsó jum-ja, szeptemberig szünetelünk és akkor újjult lendülettel :)

2010. június 2., szerda

Eclipse Democamp 2010 Budapest

Immár szokásosnak mondható éves eclipse democamp a b2international szervezésében. Kis újításként 15 perces előadások vannak, viszont több. Nekem tetszik ez a műfaj. A felratkozott 43 főnél némileg kevesebben lehettünk, szerintem úgy 30 fő lehetett jelen. Mindenki unja az esőt. Szóval annak, aki lemardt...

Nekem kifejezetten tetszett Nagy Gergely Pythonos előadása, aminek csak a kisebb részét szánta a pydev bemutatására, inkáb a python csodálatos képességeit mutatta be, ami perlhez hasonlatos write-only nyelvvé képes tenni.

Aztán Török Zsolt Eclipse Communication Framework-ös demója is érdekes volt. Én jobban szeretem nem teletömni pluginokkal az eclipse-t és csak a szükséges minimummal beérni. Volt régebben egy érdekes demó arról, hogy hogyan lehet egyszerre ketten dolgozni egy editoron ECF segítrségével. Na az konkrétan nagyon jó volt.

Oláh Bence: Developing GWT application using Eclipse IDE. Live demóval fűszerezett prezentáció. Valami forráskód formázáson emélkszem hogy 4-5 percre fentakadtunk. Hát igen, a sok anon inner class nem teszi mindig olvashatóbbá a kódot, főleg ha az anon inner classban van egy anon inner class.

Még az XText-et kiszúrtam, mint lehetséges érdeklődésem tárgyát, de alaposan utánna kell néznem a neten.

ingyen spamblockerek versenye

Összedobtam egy nem túl fair ls tudománytalan tesztet, ami 3 publikus és ingyenes comment-spam szűrő szolgáltatást hasonlít össze a google címemre érkező spam segítségével.

Tessék hát...

[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.todomap.spamegg.AkismetSpamFilterTest
[INFO] Total messages:354
[INFO] gmail spam considered ham:230
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 282.074 sec
[INFO] Running org.todomap.spamegg.TypePadFilterTest
[INFO] Total messages:354
[INFO] gmail spam considered ham:213
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 313.741 sec
[INFO] Running org.todomap.spamegg.LinkSleeveSpamFilterTest
[INFO] Total messages:354
[INFO] gmail spam considered ham:0
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 196.878 sec

Szóval röviden összefoglalva az eredményt a linksleeve nemcsak a leggyorsabb, de a leghatékonyabb is. Elég gyanúsan lógott ki a sorból, ezért teszteltem kézzel beírt adatokra is, azokat nem szűrte ki. Szóval furcsa, de tényleg jónak tűnik. Az akismet és a typepad ugyanazt a interface-t használa, lehet hogy valami számukra nagyon fontos adatot nem postolok el, amitől javulna a teljesítményük.