20
Jul 10

NetBeans, Wicket, EJB und InvalidClassExceptions

Dass es zuweilen – insbesondere zu Beginn – richtig frustrierend sein kann mit J2EE zu arbeiten wird sicherlich kaum jemanden überraschen.
Momentan verwende ich in einem größeren Projekt – auf Empfehlung von mehreren Freunden – Wicket für den Web Layer und EJB3, mit dem ich inzwischen schon etwas Erfahrung habe, im Business Layer. Komplettiert wird das ganze durch JPA – aber das soll erstmal nichts zur Sache tun.

Nachdem ich vor kurzem die ersten Teile der Anwendung soweit hatte, dass man sie auch als ganzes testen konnte, ist mir aufgefallen, dass sporadisch InvalidClassExceptions geworfen wurden. Zunächst hab ich mir nicht viel dabei gedacht und das Problem ein Weilchen aufgeschoben. Am Anfang konnte ich es auch nur mit abgelaufenen Sessions in Verbindung bringen.

Dummerweise ist es mir dann einige Zeit später auch in einem anderen Zusammenhang passiert – ich hatte einfach nur einen Link angeklickt. Nach kurzem Googlen stieß ich dann auf das Issue WICKET-2416, was ziemlich genau das Verhalten meiner Anwendung beschrieb. Einen Link anklicken, die Browser Back-Funktion verwenden, einem weiteren Link folgen und schon trat die Exception auf.
Wicket verwaltet für jede Seite ein Objekt, welches serialisiert wird um einen Zustand über mehrere Requests hinweg aufrecht zu erhalten – beim Deserialisieren eines Seitenobjekts mit einer EJB-Referenz trat der Fehler auf.
Das genannte Issue interpretierte ich nun zuerst so, dass Glassfish, der von mir verwendete Application Server, unterschiedliche Classloader für den EJB und den Web Layer verwendet und Klassen, die mit dem EJB Loader geladen wurden für den Web Layer nicht sichtbar sind, selbst wenn sie Teil des gleichen EAR sind – das, was ich vorhatte wäre also völlig unmöglich.
Das brachte mir einen Tag mit wenig Produktivität und viel Verzweiflung ein, an dem ich mich schon darauf einstellte auf JBoss zu wechseln.

Nachdem ich die Sache dann überschlafen hatte widmete ich mich heute morgen erneut dem Problem – so leicht wollte ich die bisherige Arbeit, die ansonsten auch wunderbar funktionierte, nun doch nicht aufgeben.
Die Lösung auf die ich nach ausgiebigem Googlen dann kam war dann leider auch relativ simpel: Es ist völlig normal, dass die Klassen aus dem EJB Modul nicht sichtbar sind – und eigentlich auch überhaupt nicht Wicket-spezifisch. Deshalb benötigt das Web Modul eine Klassenbibliothek mit den Bean Interfaces und Entities.
Nachdem ich eine solche erstellt und eingebunden hatte war ich die Exception los – mit ein paar Änderungen im ant Script war die Sache auch relativ schnell automatisiert.

Der Eröffner des erwähnten Issues kam auf das Problem wohl nur aus dem Grund, dass er Wicket als domänenweite Bibliothek in Glassfish hinzugefügt hatte (die wohl wiederum mit einem dritten Classloader geladen wird?).

Ein paar Fragen bleiben aber:

Wenn die Klassen generell nicht sichtbar sind – warum funktionierte denn der ursprüngliche Lookup überhaupt? Die Exception trat nur bei der Deserialisierung auf.
Außerdem erstellt NetBeans standardmäßig eine .jar für das EJB Modul, die es dem Web Modul als Abhängigkeit hinzufügt und auch mit ihm packaged – auf den ersten Blick sah es für mich auch so aus als ob diese alle nötigen Klassen bereits enthält.

Etwas Verwirrung bleibt – vielleicht klärt mich ja jemand auf, aber wie dem auch sei bin ich nun erstmal zufrieden dass es funktioniert ;)


13
Mai 10

Seekuh ab 20

Es ist kaum zu glauben aber nach einiger Überwindung habe ich gestern gemeinsam mit dem andy den Go Spieleabend in Konstanz besucht!

Dieser findet jeden Mittwochabend ab 20 Uhr in einem Nebenraum der “Seekuh” in der Konzilstraße statt. Zwar war man zunächst nicht auf diesen riesigen Andrang vorbereitet und es gab nicht genug Bretter, aber das ist ein Problem was sich in Zukunft lösen lässt ;)
Insgesamt waren wir zu siebt und es war – trotzdem ich direkt mal wieder zweimal verloren habe – eine sehr nette Atmosphäre. Vielleicht schaffe ich es ja nun mal dadurch etwas länger am Go dranzubleiben und nicht nur jedes Jahr mal ein paar Partien zu spielen :)


27
Apr 10

Das Seepferdchen mag ich nicht!

…so erklang das wunderschöne, nur aus dieser Zeile bestehende, Lied. Das kleine Mädchen – mir gegenüber im Zug – sang es energisch in einer Endlosschleife.
Aber fangen wir besser vorne an. Es gibt Dinge in meinem Leben, die tue ich äußerst selten: Zum Beispiel mehr als 100km weit weg fahren oder Blogeinträge verfassen. Was würde also näher liegen als diese beiden Aktivitäten zu kombinieren?

Continue reading →


16
Jan 10

Android

Da ich mir vor kurzem das Motorola Milestone zugelegt habe, habe ich mich die letzten Tage ein bisschen mit der Entwicklung für die Android Plattform beschäftigt.
Überraschenderweise ging das dann – auch dank passendem NetBeans Plugin – deutlich einfacher als gedacht.
Da ich bisher nur eine, relativ teure, Go App gefunden hatte, dachte ich mir dann dass eine Alternative dazu vielleicht nicht ganz sinnlos wäre.

Etwas negativ beeinflusst wurde diese Motivation aber wieder vor zwei Tagen als ich entdeckte, dass der Macher von KGS, einem zumindest im deutschen Raum sehr beliebten Go-Server, auch einen Android Client entwickelte. Allerdings soll dieser auch sehr teuer und copy-protected werden und das Bedienkonzept hat mich von den bisherigen Erklärungen auch nicht wirklich überzeugt.
Damit war für mich dann erstmal klar, dass meine App – mit dem klangvollen Namen IgoDroid – kostenlos unter der GPL releast wird. (Unter der Voraussetzung, dass meine Motivation so lange anhält – das ist leider immer ein kleines Problem bei mir wenn ich Projekte alleine und aus eigenem Antrieb mache…)
Das ermöglicht mir dann auch einige Anleihen bei anderen Projekten zu machen. So wird z.B. der SGF Parser von GoGui verwendet.

Featuremäßig ist geplant, dass die App auch völlig unbedarften Neulingen zunächst die Regeln demonstrieren kann und dann ein Online- (wahrscheinlich via IGS/NNGS, da diese im Gegensatz zu KGS ein offenes Protokoll verwenden) oder Offline-Spiel gestartet werden kann mit der Möglichkeit SGF Dateien mit Spielaufzeichnungen zu speichern und zu laden.
Es werden unterschiedliche Brettgrößen (vorerst 9×9 und 19×19) unterstützt werden, wobei mittels Multitouch oder Menüoption rein und rausgezoomt werden kann.

Was fehlt noch zum ersten Release? Etwas Content für die Go-Einführung, der Onlinemodus und das ganze grafisch zumindest noch ein bisschen hübscher zu gestalten. Vielleicht gibts ja bald mal eine Beta.
Langfristig würde mir evtl. noch ein Tsumego Modus zum Lösen von Go-Problemen gefallen. Eine AI kommt wohl eher nicht in Frage. Vielleicht hat ja meine umfangreiche Leserschaft noch Ideen! ;)

Momentan sieht es so aus:


20
Jul 09

Aishite!

Nur nach Gehör olol o.o”

a kono deai ha
yuumei ka mo
daremo karemo
SO DREAMS COME TRUE

guuzen yorimori aru de
nanika gagaware de

TO BE (Hey!) TO BE (Hey!)

usomitai yo mou sukoshi de todoku
(ima sugu)

YOURSELF (Hey!) YOURSELF (Hey!)

tsuiteiku yo machigatte mite no OK!
(OK!)
OK!
(OK!)
Hey!
(Hey!)
You! miteru ne

aishite FOR YOU
naritai mirai ha koto ni ii yo
kanjite FOR YOU
nareru kamokana dekiru yo ima nara
mata jishuumanai kedo

u kono deai ha
kakumei to mo
anata jishuu ga
MEGA WISH
akogare yori mo chikakute
kagayaite kureru

zettai (Ho!) zettai (Ho!)
ima shikanai yo

hashireru dake hashirou (gengai)

ALRIGHT (Ho!) ALRIGHT (Ho!)
totsumuiteyo
tererai de hora
OK!
(OK!)
OK!
(OK!)
Hey!
(Hey!)
You! mitaiyo de

aishite FOR YOU
narenai mirai ha iranaide yo
kanjite FOR YOU
anata shikanori naraisshou ni itai
mata okorarechau kedo

TO BE (Hey!) TO BE (Hey!)

usomitai yo mou sukoshi de todoku
(ima sugu)

YOURSELF (Hey!) YOURSELF (Hey!)

tsuiteiku yo machigatte mite no OK (OK!)
OK!
(OK!)
Hey!
(Hey!)
You! miteru ne

aishite FOR YOU
naritai mirai ha koto ni ii yo
kanjite FOR YOU
nareru kamokana dekiru yo ima nara
mata jishuumanai kedo

aishite FOR YOU
naresou mirai ha kawaru hazu yo
kanjite FOR YOU
ashita no ima ha kyou docchigau hazu
mata akogarechau kedo


20
Jul 09

Super Driver (Full)

So ähnlich vielleicht!

Day by Day うんざりだよね だから
day by day unzari dayo ne dakara
堂々と断っちゃう 君になりなよ
doudou to kotowacchau kimi ni nari na yo
Oh,my Boy きっぱりしなきゃ 嘘に
Oh,my Boy kippari shinakya isshou ni
付き合ってられないよ 狭い世界で
tsukiatte rarenai yo semai sekai de

自分で見つけた My Sense 好きになって当然!
jibun de mitsuketa My Sense suki ni natte touzen
くだらないやり方蹴って 全てはあたしが決める!
kudaranai yarikatakette subete ha atashi ga kimeru
(I say,I say,My Heaven!)

Super Driver 突進!任せて 
Super Driver tosshin! makasete
なんてったって前進!
nantettatte zenshin
不可能(Don’t you stop me!)
fukanou
飛び越えて Take it easy,GO!
tobikomete Take it easy,GO!
大勝利って 突貫!
daishouritte tokkan
もちろん どうなったって 快感!
mochiron dounattatte kaikan
反省会?(Get Back to FIGHT!)
hanseikai?
それよりさ 急いでよ
soreyorisa isoide yo
あれもこれも未体験
aremo koremo mitaiken
いつだって突然
itsudatte totsuzen
まるでまるで未経験
marude marude mikeiken
それがどうしたの?
sore ga doushita no?

Upside Down トンデモ価値観だけど
Upside Down tondemo kajikan dakedo
悶々と 考えた 自分って偉い
moumotto kangaeta jibunttererai
Oh My own ちゃんと向き合う 目だよ
Oh My own chantomukiau medayo
適当に馴れ合ってダマされないわ
ukitouni nareatte damosarenai wa
一人を怖がるなんて彼もちょっと寂しい
hitori wo koegaru nante daremo chotto sabishii
「面白い作戦ね」って笑顔のあたしが最高!
omoshiroi sakusenette egao no atashi ga saikou
(You should,You should be correct!)
能天気な接近しかけて
no tenki na sekishikakete
飽きちゃったんだ 最近
akukichattanda sakin
不自由 (Well,Go to ride on!)
fujiu (Well,Go to ride on!)

振り切って Yes,why don’t you go!
furi kimitte Yes,why don’t you go!

大発見にバンザイ したいね
daihakken ni banzai shitaine
出来ちゃったら 万能
dekichattara ban no
想像の (Let’s go now play)
souzou no
Look into Your Eye
やるからね!
yarukarane!
それとこれはユメじゃない
soreto kore ha yumejanai
なぜかってドキドキ
naze katte doki doki
燃ゆる燃ゆるユメみたい
moyuru moyuru yumemitai
ホントにしましょう
honto nishimashou
それとこれはユメじゃない
soreto kore ha yumejanai
なぜかってクラクラ
nazekatte kura kura
燃ゆる燃ゆるユメみたい
moyuru moyuru yumemitai
さあね、どうだろうね
saa ne, doudorou ne

Super Driver 突進!任せて 
Super Driver tosshin! makasete
なんてったって前進!
nantettatte zenshin!
不可能(Don’t you stop me!)
fukanou
飛び越えて Take it easy,GO!
tobikoete Take it easy,GO!
大勝利って 突貫!
daishouritte tokkan
もちろん どうなったって 快感!
mochiron dounattatte kaikan!
反省会?(Get Back to FIGHT!)
hanseikai?
それよりさ 急いでよ
soreyori sa isoide yo

Super Driver tosetsu no yono
Feeling Feeling Sweeter

不自由 (Well,Go to ride on!)
fujiu (Well,Go to ride on!)

振り切って Yes,why don’t you go!
furi kimitte Yes,why don’t you go!

大発見にバンザイ したいね
daihakken ni banzai shitaine
出来ちゃったら 万能
dekichattara ban no
想像の (Let’s go now play)
souzou no
Look into Your Eye
やるからね!
yarukarane!

あれもこれも未体験
aremo koremo mitaiken
いつだって無理矢理
itsudatte muriyari
まるでまるで未経験
marude marude mikeiken 
これからしましょう
kore kara shimashou
(一回戦!)
あれもこれも未体験(Happy Routine Days)
aremo koremo mitaiken
いつだって突然
itsudatte totsuzen
(半回転!)
まるでまるで未経験(Honky Tonk)
marude marude mikeiken
それがどうしたの?
sore ga doushita no


27
Jun 09

Super Driver

Geklaut von: http://pastebin.com/m20b097d

Day by Day うんざりだよね
dei bai dei unzari dayo ne
だから 堂々と断っちゃう 君になりなよ
dakara doudou to kotowacchau kimi ni nari na yo
Oh my boy きっぱりしなきゃ
oo mai boi kippari shinakya
一緒に 付き合っていられないよ 狭い世界で
isshou ni tsukiatte irarenai yo semai sekai de

自分で見つけた my sense 好きになって当然
Jibun de mitsuketa my sense suki ni natte touzen
くだらないやり方蹴って
kudaranai yarikata kette
全てはあたしが決める!
subetai wa atashi ga kimeru

I say I say My Heaven!
I SAY I SAY MY HEAVEN!

Super Driver 突進! 任せて なんてったって前進!
SUPER DRIVER tosshin! makasette nante tatte zenshin
不可能取り込めて Take it easy GO!
fukanou torikomete TAKE IT EASY, GO!
大勝利!ってトッカンもちろん どうなったって快感
daishouri! tte tokkan mochiron dounattatte kaikan

風が それよりさ 急いでよ
kazega soreyori sa, isoide yo

あれもこれも未体験 いつだって無理矢理
aremo koremo mitaiken itsudatte muriyari
まるでまるで未経験 これからしましょう!
marude marude mikeiken korekara shimashou!

あれもこれも未体験 いつだって突然
aremo koremo mitaiken itsudatte totsuzen
まるでまるで未経験 それがどうしたの?
marude marude mikeiken sore ga doushita no?