java

mvn assembly:assemblyとjava.lang.IncompatibleClassChangeError

mvn assembly:assemblyで作成したファイルをjava -jarで実行すると以下の例外が出る、という事象に悩まされてました。 Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class at java.lang.ClassLoader.defineClass1(Nati…

JDK6をソースコードからビルド

jvmのgcまわりの挙動を確認する為、CentOS上でJDK6のソースコードを取得してビルドしてみました。基本的な流れは以下のページを参考にしています。「Compile Hotspot JDK from Source Code」 http://konpairu.net/blog/archives/139ビルドするのに色々躓きま…

Mockito+PowerMockでStringのmockを作る

文字列のハッシュ衝突時のテストケースを書くことになりましたが、いつも使っているMockitoはfinal classのmockを作ることができません。調べてみたところ、PowerMockというモジュールを使うことによって、MockitoのAPIを用いてfinal classのmockを作ること…

JMongoStore - a Store class to persistent sessions of Tomcat to MongoDB.

永続化するオブジェクトグラフの構成がある程度固いようであれば、ORMを使ってRDBMSに保存するというアプローチで良いと思いますが、グラフの構成が変動しやすい場合は、変更の都度スキーマ定義を更新することになるので結構面倒です。例えばHTTPSessionのよ…

MongoDBとmorphia

mungbeanはPOJOに何も手を加えなくても保存できそうで良かったのですが、残念ながら現状では複数のPOJOを一度に扱うことができないようです。"Third Party Frameworks and Libs"に戻って、mungbeanと同じくPOJO Mappersカテゴリであるmorphiaというライブラ…

MongoDBとmungbean

sessionに格納するkey-valueのように、保存する要素の変動が多いオブジェクトを簡単に突っ込めるKVSを探していて、MongoDBに行き着きました。が、標準のJava DriverのAPIがイマイチなので、"Third Party Frameworks and Libs"で紹介されているライブラリを使…

abstract pointcutとweavingのスイッチ

GAE/Jで永続化層にJDOを使ってきたのですが、GAE/Jを良く知る為にLow Level APIも試してみたい。そこで、AspectJを使って永続化層をうまく切り替えられないものかな、と。ある永続化層を選択した場合のみweavingされるようなadviceを定義できれば、例えばJav…

annotation-style in AspectJ

AspectJでは、pointcutやadviceを記述する際にJavaを拡張した記法を用いますが、AspectJ5からはAnnotationを用いてpointcutを定義し、advice側でもAnnotationを用いてpointcutを指定することができます。具体的には、以下のようなコードになります。 @Aspect…

Asynchronus Method Call Using AspectJ

非同期と継続と私 - 技術日記@kiwanamiを読んでいて、関数呼び出しを非同期化するのに、(funcall cc n)を(deferred:call cc n)に変更するだけで簡単にできるのが羨ましかったのでちょっと作ってみました(というだけです…)。 実装 @Retention(RetentionPolic…

JUnit Test with JDO

オブジェクトの永続化の際にキーの自動生成あたりで躓いてしまい、Unit Testを書くことに。 普通に書いて動かしてみたら、 java.lang.NullPointerException: No API environment is registered for this thread. at com.google.appengine.api.datastore.Data…

Transaction Coordination using AspectJ

一度AspectJを使い出すと、アスペクト側に切り出したい処理を色々と思いつきます。GAE/Jのアプリの中でアスペクトに切り出したいと最初に思いつくのは恐らく、PersistenceManagerを取得する処理でしょう。トランザクションの部分とともに、アスペクトを用い…

building mock environment using AspectJ

前回から大分時間が空きましたが、少し余裕がでてきたので、GAE/Jでアプリケーションを作って遊んでおります。作っていく中でunit testを書いたりするのですが、どうせ遊びならこのあたりも好き勝手に書いてみたいと思うわけです。前回のエントリにあるよう…

GAE/J+AspectJ

先日、下記の書籍を買ってGAE/Jを始めてみました。Google App Engine for Java [実践]クラウドシステム構築 (WEB+DB PRESS plus) (WEB+DB PRESSプラスシリーズ) (WEB+DB PRESS plusシリーズ)作者: (株)グルージェント出版社/メーカー: 技術評論社発売日: 200…

Java言語で学ぶデザインパターン入門【マルチスレッド編】

以前、仕事でマルチスレッドで動くアプリケーションを開発していたのですが、同期化の部分が思っていた以上に難しく、改めて勉強しなおせねば、と思っていました。特に困難なのは、どういう構造で同期を取るのが良いかを決めること。同期を取る部分はもちろ…