Guice kísérlet

Sunday, August 31st, 2008 | Uncategorized | No Comments

Van egy régi projektünk a cégnél, egy EJB3-at tesztelő Unitils modul (nemrég kijött a Unitils 1.1, ami JPA-t támogat, de a mienk a beaneket is injektáltja, igaz, csak annyira van implementálva, amennyire nekünk kellett).

Ezt használva körülbelűl így néz ki egy tesztünk:

@RunWith(UnitilsJUnit4TestClassRunner.class)
public class EJBInjectionTest {
 
@EJB
SampleSessionLocal bean;
 
@Test
public void testSessionBeanInjected() {
 
}
 
}

Azaz a teszt futása előtt injektálja a példányosított EJB-t, valamit az EJB-be is injektálja a függőségeket az EJB specifikáció szerint. (Mint már írtam, korántsem teljes implementáció.) Pazar cucc, megy is annyira, amennyire nekem kell.

Régi álmom volt azonban, hogy egyszer annyira összepofozzam, hogy kiadható legyen. Az volt a terv, hogy az injektálásokhoz Google Guice-t fogok használni, mert már rég akartam vele foglalkozni. Egyszer már át is futottam a doksiját, és úgy tűnt minden megoldható benne.

Most azonban, ahogy nekiveselkedtem, határozottan úgy érzem, hogy a Guice alkalmatlan lesz a feladatra. Azt akarom elérni, hogyműködjön mondjuk egy ilyen:

@PersistenceContext(unitName="Test2PU")
EntityManager em2;

Sajnos azonban a Modul összeállításakor sehogy sem tudok hozzáférni az annotáció paraméteréhez:

binder.bind(EntityManager.class).annotatedWith(PersistenceContext.class).toProvider(new EntityManagerProvider(directory, null));

Tags: , ,

Next Season

Wednesday, August 27th, 2008 | Uncategorized | No Comments

Vissza a satupadhoz. A legaktuálisabban futó dolgok:

1. Indul a JUM második évadja, lassan beindul a szervezés. Előadókat keresünk villám- és nagyelőadás kategóriákban.

2. Nyáron elég sokat szöszöltem egy CLDC 1.0/MIDP 1.0 programmal (ne nevess, az én telefonomon csak ez fut), ami a BKV menetrendet jeleníti meg, és útvonaltervet számol. (Helló Dijkstra). Csak a környékbeli buszok/villamosok vannak bent (mintegy 10-12 járat), de azokra meglepően használható sebességgel számol. Sajnos a BKV most variálja át a teljes menetrendet, szeptember 6-ig várni kell, hogy újra érvényes változatot tudjak buildelni. Addig pár apró hibát ki kell javítani, és majd a menetrendeket frissíteni.

Úgy tűnik simán el tud futni pl. egy teljes éjszakai menetrend egy primitív mobilon is (egy Symbian-on, meg talán a teljes is)

3. Véletlenül hozzájutottam az
Effective Java második kiadásához Joshua Bloch-tól. A Java One-on állítólag ez volt az egyik legkeresettebb könyv, és az első néhány lap után tényleg izgalmasnak tűnik. Remélem marad időm tovább jutni benne.

Tags: , ,

GregorSamsa

Thursday, July 17th, 2008 | Uncategorized | 1 Comment

/**
     * As Gregor Samsa awoke one morning from uneasy dreams he found himself
     * transformed in his bed into a gigantic insect. He was lying on his hard,
     * as it were armour plated, back, and if he lifted his head a little he
     * could see his big, brown belly divided into stiff, arched segments, on
     * top of which the bed quilt could hardly keep in position and was about
     * to slide off completely. His numerous legs, which were pitifully thin
     * compared to the rest of his bulk, waved helplessly before his eyes.
     * "What has happened to me?", he thought. It was no dream....
     */
    protected final static String DEFAULT_TRANSLET_NAME = "GregorSamsa";

(Részlet a hatos JDK-forrásából (Igazából Apache-Xalan örökség, de benne van))

Tags: ,

Sun fejlesztői nap (aka. Open Source konferencia)

Tuesday, June 17th, 2008 | Uncategorized | 2 Comments

Előszőr is a szervezésről. A biciklivel érkezők pólót kapnak, őrzött biciklitároló, a parkban kint sörasztalok kávézás/ebéd idejére, a szünetekben kivetítőkön JavaOne videók, stb. Lehet, hogy én könnyen megvehető vagyok, de mindenesetre néhány ilyen ötlet után már azt érzem, hogy itt nem csak egy éves rutinrendezvényről van szó, hanem a szervezők tényleg leültek gondolkodni, hogy mivel tudnák jobbá tenni a rendezvényt. Kis dolgok, de mintha fontos lenne az egész, hogy ott vagyok. Én ugyan a tavalyi hasonló rendezvényen voltam előszőr, de azt az idei magasan felülmúlta.

Az előadások. Ide persze jön a szokásos mantra. Kezdek rájönni, hogy nem az előadásokkal van a baj, hanem velem. Én nem a tipikus konferencia előadásokat szeretem, hanem a technológiai szőrözéseket, amikre viszont nem az ilyen konferenciá való, hanem inkább a JUG találkozók. Pl. az általános MySQL előadás helyett sokkal szívesebben hallgattam volna olyan előadást, mint pl. a Boros Péter tartott a Solaris virtualizációjáról (Ami a sok kérdés alapján nem csak nekem jött be megint).

(Kitérő: Arra jöttem rá, hogy engem egyáltalán nem zavar, ha nem tudom, hogy pontosan hogy néz ki az i386 architektúra, és hogy működik a privilégium szintek közötti átjárás. Nem kell minden részletében elmagyarázni. Az előadásból kb. így is megtudom, hogy mire megy ki a játék és mi lehet a probléma. A logikája a dolgoknak átjött. Talán jobb is néha a közönség ismeretanyagának fölé lőni mint alá.

Vagy nem.)

A másik, aminek mindeképpen utána kéne nézni az a DTrace Advanced Visualisation Environment (DAVE), amit Simon Ritter demózot, de egyelőre még nem találtam meg a letölthető forráskódját. Aki nem lett volna ott, ez egy Swing-es alkalmazás, ami egy Java programból DTrace-el kigyüjtött infókat vizualizálja. A Demóban pl. egy gráfot láttunk, ahol a csúcsok az osztályok függvényei voltak az élek pedig a hívás láncolat. (Plusz egyéb infók, hogy mit hányszor).

A Kaukázus koncert meg méltó zárása volt a napnak. Mert igen, én kalapot emelek, ha az egyik legnagyobb IT cég meghív egy zenekart, aki köztudottan globalzicáció és kapitalizmus kritikájú számokat (is) ad elő. Mintha tényleg nem csak üzlet lenne az Open Source, hanem valami más is. És igen, csak jobb lett a hangulat, hogy amíg a JAVA nagy része fent ült a lelátón, a + YOU pedig bement a zenekar elé táncolni.

Most pedig belinkelek egy YouTube videót, mert az nem is blog, aki nem is tesz meg. Mégha nem is ez a kedvenc számom, hallgassatok Kaukázust.




Disclaimer: amikor nincs más választásom biciklivel járok munkába (és legtöbsször nincs más választásom), és jó párszor hallgatok a Kaukázust (és legtöbbször jópárszor). DE: egy volt kolegának is ez nap volt az apropó, hogy kölcsön kérjen egy biciklit és tekerjen a városba, és a koncert után fogadkozott, hogy másnap letölti. Igaz, egy másik kolega viszont csak délelőtt volt, de pont a konkrétumokat hiányolta az előadásokból, meg az új infókat.

Jazoon or not Jazoon

Wednesday, June 4th, 2008 | Uncategorized | 3 Comments

Ha jól számolom 17 nap múlva kezdődik a Jazoon, ami a JavaPolis mellett a másik legnagyobb Java-s konferencia Európában. Azonban míg tavaly a munkahelyem hívott meg a TSS Symposium-ra, most ha mennék az utazást/szállást mindenképpen fizetnem kéne (a regisztrációra JUM révén lehetne kedvezmény kapni).

Úgy hogy most azon gondolkozom megérne-e nekem egy utazást egy ilyen esemény. Érdemes-e egyáltalán konferenciára járni? Mondanak ott olyat, amit nem lehet megtudni jóval előbb blog-okból és demókból (vagy utána a publikált fóliákból/videókból)?

A tapasztalatom az, hogy az ilyen eseményeken, általában általános bevezető jellegű előadásokat tartanak, ami akkor jó, ha még semmit nem hallottál a témáról, de továbbképzésnek sokkal kevésbé alkalmas. Persze nem jártam még olyan sok Java konferencián (az igazat megvalva még csak egyen voltam), nem tudom általában milyenek.

Nézzük előszőr is a programot, mire mennék el:

Első nap:

Az első előadás-körben nincs olyan, ami nagyon csábítana a pontos érkezésre. OpenID és GWT, de ezekről már túl sok előadást hallottam. A következő kör már többet ígér: szó lehet SAML-ról, amivel régóta szertnék részletesebben foglalkozni, de a buzzword gyanús Scala, Ruby, Erlang vs. Java tematikájú előadás is izgalmas lehet.

Aztán ismét nehéz választani. Jobb híján egy DSL vagy egy Comet előadásra ülnék be valószínűleg. Végül a nap zárásaként egy Swing Application Framework teljesen jó választásnak tűnik.

Második nap:

Itt már újra a bőség miatt nehéz a választás. A Parleys.com-os előadás (JavaFX, Flex, AIR) állítólag már a J1 en is nagyon jó volt, de az Agile Testing-en kívül mindegyik érdekel (Spring 2.5, JAX-RS, JBI ). Utána egy JCR 2.0 lenne a választott. Aztán megint jobb híján ülnék be a Glassfish v3 Integration Profile-ra. A következő lehet a WS-TX, és utána megint semmi. Esetleg a JavaFX vége.

Harmadik nap:

Az első két előadást azt hiszem a Grails-es duplával tudnám legkielégítőbben letudni.
A délután meg valószínű Java Puzzlers és eBay architectura lenne benne.

A választék tehát közepesen erős. És vannak még a BOF-ok, amikre azonban még mindig lehet jelentkezni, ezért semmit nem lehet róluk tudni, pedig azok még jók szoktak lenni.

Annyira azonban nem erős, hogy egyértelműen eldöntse a kérdést: megéri-e a pénzt és a fáradságot, vagy inkább vegyek ki helyette egy hét szabadságot, és csináljak meg végre néhány régen tervezett prototípust…

Toplink bug II.

Wednesday, May 28th, 2008 | Uncategorized | No Comments

Újabb szép Toplink Essentials bug vett el egy (eddig) egy napot a projektünkből. Prototípus projektet még nem sikerült csinálni, de jól reprodukálható, és ismét a leszármaztotott osztályok mint entitások körül van a gikszer, csak most a belső cache táján. A szépségét jól jelzi az, hogy ha a tesztelés két lépése között újraindítom a Glassfish-t, akkor minden megy, ha nem, akkor OptimisticLocking exceptiont kapok. Előtte mg utána csak persiste és find-van, de a find hol a szülő, hogy a gyerek entitásra keres rá.

A workaround egyelőre a Toplink level 2 cache-nek kikapcsolása:

<property name=”eclipselink.cache.shared.default” value=”false”/>

De most épp valami hasonló hiba néz ki a kódból, amit még nem derítettünk fel, úgyhogy lehet, hogy ez se segít. Egyébként EclipseLinke M7-tel a helyzett ugyanez. Lehet, hogy Hibernate JPA-val is ki kéne próbálni, de az meg a kissé bonyolult entitás struktúránkba hal bele (Bizonyos dolgokat annotációval, másokat XML-ből állítunk be).


WTF: Interface Equinox módra

Monday, May 19th, 2008 | Uncategorized | 3 Comments

Sajnos az OSGi nem tartalmaz szabványos interface-t a konzol szolgáltatásokra. Konzolja azonban szinte minden OSGi frameworknek van, és általában ezeket valahogy ki is lehet terjeszteni, hogy saját parancsaiddal bővítsd a rendszert.

A Felix-ben pl. a SehllSerivce-t kell implementálni:
public interface ShellService
{
public String[] getCommands();
public String getCommandUsage(String name);
public String getCommandDescription(String name);
public ServiceReference getCommandReference(String name);
public void executeCommand(
String commandLine, PrintStream out, PrintStream err)
throws Exception;
}

Ez a dokumentáció nélkül is körülbelül érhető. De hogy csinálja mindezt az Equinox?

Nos előszőr is implementálni kell egy CommandProvider interface-t. Ezek után pedig minden metódus, ahol a metódusnév _-al
(aláhúzással) kezdődik automatikusa a konzolból is elérhető parancs lesz. Az én konzervatív OOP-s lelkemnek ez már határeset.
Jó, jó, legyen egyszerű, de nem gányolás ez kicsit?


Java PDF2HTML

Thursday, May 15th, 2008 | Uncategorized | No Comments

A mai nap egy régi XSL-FO-s rendszert kellett volna újraéleszteni az új környezetbe, hogy HTML-t PDF-en keresztül tegyünk szépen nyomtathatóvá.

Biztos ami biztos előtte azért körbenéztem, és azt találtam, hogy létezik egyszerűbb megoldás is. Pl. az xhtmlrenderer pont tudja ezt iText-en keresztül.

Van hozzá egy jó részletes cikk, és azt kell mondanom, hogy tényleg működik. A prototípus probléma nélkül csinálja a dolgát (pedig még némi iText varázslattal meg van bonyolítva).

Szóval eddig jó, remélem a UseCase-ek implementálása közben is ugyanilyen elégedett leszek.

JUM számvetés

Wednesday, May 14th, 2008 | Uncategorized | 2 Comments

Egyéves a JUM: hazánk leg Java User Group-osabb Javas rendezvénysorozata. Egy év alatt hat alkalom, 21 előadás (ha jól számoltam): a mérleg pozitív. A továbbiakhoz azonban nekem mindeképp igényem lenne egy számvetésre, hogy hol mit kéne jobban csinálni. Vitaindítónak az alábbiakban foglalom össze saját észrevételeimet.

Helyszín: erre szerintem nem lehet panasz. Krisztiánnak sikerült mindig előre pontosan mindent elintézni, csak újfent megköszönni lehet a Sztakinak a támogatást.

Lebonyolítás: itt már van mit javítani. Szerintem nagyon hiányzott alkalmanként egy moderátor aki:

  1. elmondja az elején a napirendet
  2. utána betartatja (ne legyen túl hosszú szünet, esetleg ne legyen egyáltalán, maradjon feszes a program)
  3. Az előadásokat is moderálja, leállítja, ha nagyon túlfut az időből stb.

Valahogy úgy alakult, hogy ilyen nem volt (eleinte aki csinálhatott volna ilyet, az elő is adott, később meg nem alakult ki). Szerintem szükség volna rá, akár úgy is, hogy minden alkalommal más válalja el.

Az hogy beálltunk a kéthavonta fix időpontra az mindenképpen okos dolog volt.

Előadások: ez szerintem az egyik legfontosabb kérdés. Az eredeti elképzelés valami unconference jellegű dolog volt, ahol:

  1. mindenki előadhat, aki jelentkezik
  2. hangsúlyosan saját tapasztalatokról kell beszélni (vér, verejték, izzadság)

Sajnos azonban a rendszer nem vált be teljesen. Egyrészt nehéz volt jelentkezőt találni. Aztán kiderült az is, hogy ha valakinek komoly tapasztalata van egy témában, az még nem biztos, hogy jól el is tudja mondani azt. Néha még az is eszembe jut, hogy olyan emberből akit én elképzeltem, talán nincs is olyan sok.

A legfontosabb szerintem amin változtatni kell az az előadásól színvonala. Bármit is jaívtunk a többi pontnál, ha nincsenek színvonalas/profi előadásaink, akkor nem érdemes csinálni. Nem érdemes közönséget szerezni, stb.

Több út is van:

  1. A JUG-ok szerte a világban általában egy hosszabb meghívott előadóval dolgoznak alkalmanként.
  2. A mi eredeti célkitűzésünkhez, ami sokkal inkább unconference jellegű volt, jobban passzol a több rövidebb előadás.
  3. Ennek a másik oldala a Meetup jellegű tízperces előadás, ami bizonyos esetekben adekvát lehet (ezt Kocka próbálta megjeleníteni), de egy ismeretlen technológia előnyeit, hátrányait, és a róla szerzett tapasztaltokat, szerintem nem lehet hatékonyan tíz perc alatt elmondani.

Nem látom igazán még megfelelő módszert. Volt olyan ötletem is, hogy a résztvevői, bemutató előadásokhoz kötelező legyen prototípust csinálni (Kocka legjobb előadása szerintem a legutóbbi Flex-es volt, amihez már előzőleg publikálta a prototípust). Ha van prototípus, sokkal könnyebb bemutatni, az egy biztos vezérfonal. De létezhetnek olyan elméletibb témák, amihez lehetetlen prototípust csinálni.

Szerintem azt is jó lenne, hogy ha megkeresnénk azokat a magyar fejlesztőket, akik nemzetközi OS projektekben dolgoznak, és őket meghívnánk, hogy beszéljenek a saját projektjükről (meglepően sok ilyen van).

Lehetne esetleg valami szavazás/feedback-et csinálni alkalmanként, de ha mondjuk a 20 résztvevő harmada kitölt egy kérdőívet, az már nem biztos, hogy számottevő minta.

(Itt azért megjegyezném, hogy voltak nagyon jó előadások is, és talán nem volt olyan alkalom, hogy ne lett volna olyan, ami miatt ne lett volna érdemes elmennem, de ez, úgy érzem, még kevés).

Infrastruktúra: A másik olyan pont, amit nem kezeltünk elég jól. Van egy honlap (jum.hu), de nem mindig frissült elég gyorsan. Van rajta hírlevlél, ami nem mindig ment ki időben. A fóliákat nem szedtük össze, a videók bár elkészültek, nem kerültek fel sehová, stb. Ezeken mindenképpen változtatni kell.

Marketing:
Eddig azt hiszem javaforum-on, és a java listán volt hirdetve, és így körülbelül 15-20 ember jött el egy alkalomra (ritkán több, néha kevesebb). Kérdés, hogy fontos-e, hogy többen legyünk, kell-e a hirdetésre nagyobb energiákat fektetni.

  • Egyrészt, ha a tapasztalatok megosztását önmagában hasznosnak tartjuk, akkor elvileg ha csak öten vagyunk az is jó.
  • Másrészt ha akarunk hívni meghívott előadókat, akkor illik legalább valamennyi közönséget prezentálni. (Ajánlkozott előadó külföldről is, de 20 ember miatt talán kicsit túlzás idehívni).

Itt is lehetnek ötletek, pl. a Java fejlesztő bázissal rendelkező cégek vagy egyetemek megkeresése.

A javaslat: A következő alkalom (május 21) nem lennének Java-s előadások (itt nem részletezett szervezési okok miatt se), hanem helyette a fenti témákról lenne egy hogyantovább vita/beszélgetés/ötletelés. Ezt ugyanúgy meghirdetnénk, mint bármelyik más alkalmat (mindenki jöjjön, akit érdekel egy kicsit is a rendezvény/egy működő magyar JUG jövője). Viszont most vissza kell jelezni, mert a létszám függvényében szerzünk termet. Ha kevesen vagyunk, akkor esetleg vendéglátó ipari egység is szóbe kerül, de ott is az elején szigorú napirend szerinti megbeszélést tartunk a jövő évről. Tehát aki jönne, az íron egy levelet az info kukac jum pont hu-ra, és jövő hét elején kitaláljuk a helyszínt.

További OSGi tapasztalatok

Monday, May 12th, 2008 | Uncategorized | 6 Comments

OSGi-val való további ismerkedés keretében csináltam egy remek Jabber / XMPP OSGI kozol bundle-t. A lényege, hogy nem csak op rendsze parancssorából indított OSGi framework konzoljából pásztorolhatjuk a framework konzolját, hanem Jabberen keresztül is. (Bundle-k listázása, leállítása, stb.)

Egy érdekes dolog, hogy konzolos parancsokhoz nincs szabványos OSGi interface, ezért az összes framework külön talált rá megoldást (én eddig a Felix és az Equinox alá implementáltam a bundlet). Ebben az a szép, hogy a pluginem kódja, az Equinox és a Felix bizonyos osztályaitól is függ fordítás szinten, de futás szinten csak akkor fog ráfutni olyan kódra, ahol Felix specifikus osztályokat használok, ha létezik olyan beregisztrált service (a servicek String névre vannak regisztrálva, a létezés az osztály nélkül is ellenőrizhető). Azt kell mondjam, az OSGi koncepció működik.

Fejlesztéshez a pax-construct maven plugint használtam (Ami használja a Felix bundle plugin-t is). Viszonylag kis szívás volt vele, csak egyszer kezdtem el debugolni, de akkor is kiderült, hogy felesleges volt, a Felix bundle dokumentációját kellett volna jobban átnyálazni. A fenti Classloader-es trükhöz kell ugyanis finomhangolt Import-Package leírót gyártatni, hogy a framework függőségek csak opcionálisak legyenek.

(Zárójeles megjegyzés: amilyen csapnivaló volt a NetBeans 6.1 Beta Maven pluginje, a végleges annyira meggyőző. Pl. most már olyat is tud, hogy ha egy ismeretlen osztályt lát, akkor egy klikkre felajánlja a központi repository-ból azokat az artifactokat, amik tartalmaznak ilyen nevű osztályokat. És mivel már a Glassfish 3 TP és az OpenESB 3 fejlesztés is Maven-be megy, úgy hogy a NetBeans Maven támogatás csak jobb lesz ennél.)

Szóval jó kis játék volt, lehet hogy feltolom Google Code alá. Szinte ugyanannyi ott projektet létrehozni, mint a saját szerveren belőni SVN-t.

Blogroll