2007/02/02

Date, Calendar APIの再設計

Date、Calendarに変わる時間管理APIを策定するJSR310が開始されました。
もうこのままDate/Calendarで行くのかと思ってたけど、これで使いやすくなってくれたらうれしい。

ベースはJoda Timeというオープンソース(Apache License 2.0)ソフトウェアで、既に結構実績があるらしいです。作者がスペックリードの一人なので、かなりこれに近いAPIになるはず。

2007/02/01

Sub Labs

Sun Inner Circle Vol.44

Sunが研究中のいろんな技術が紹介されてます。ちょっと気になるのが、Project Darkstar。大規模マルチプレーヤー型オンラインゲーム用のサーバやクライアントライブラリです。クライアント・サーバ型アプリケーションの通信部分を提供してくれるフレームワークといったところ。モバイル端末も意識されてるらしい。

また、オープンソースDRMの、Project DReaMなんてのもあります。

JazzのWebサイトができるらしい

IBM、オープンソースプロジェクト「Jazz」用ウェブサイトを立ち上げへ(CNET Japan)
Jazzとは、チーム開発向けのEclipseと連動するメッセンジャーみたいなものらしい。
分散開発向けのものとしては、既にEclipseにプラグインがあったような。

開発用に限らず、いろんなアプリケーション用のコラボレーション基盤があったら便利でしょうね。

2007/01/26

[aspectj-users] ジェネリクスを使用したクラスの指定

[aspectj-users] Around advice and return type

以下、上のリンク先からの引用。
public abstract aspect Base {
pointcut matchGetA() :
call(T *.*(..));

T around() : matchGetA() {
T result = proceed();
...
return result;
}
static aspect BaseA extends Base<A> {};
static aspect BaseB extends Base<B> {};
static aspect BaseC extends Base<C> {};
}

こんな感じ。型パラメータ付き抽象アスペクトとして書いておいて、個別に具象化。
アスペクトの再利用性が高まります。

2007/01/25

新しいBloggerへの移行

新しいBloggerへ移行してみました。
これを機にAdSense付けてみたり。
もっとテンプレートとかが大幅に増えるのかと思ってたけど、そうでもないんだな。ただレイアウトの変更はものすごく楽になった。いろいろ試してみよう。

2006/12/28

今年の一言

「アスペクト指向萌ぇ」

某所で高校生にAOPを教えたんですが、最後までついてきた(めいっぱいハードル上げたのに)一人が最後に言い放った一言。

新しい世代の感覚でないと出ない言葉ですな。

2006/09/14

[aspectj-users] 特定のアノテーションを持つメソッドをもつクラスを指定したい

[aspectj-users] Annotations injection on types based on methods annotations

特定のアノテーションを持つメソッドを持つクラスを指定して、アノテーションを付加したい、って話。
WhiteDogでもこれができると@WhiteDogClassがいらなくなってちょっと楽。

結論としては、今は出来ないけど、最新版ではundocumentedなhasmethod、hasfieldってポイントカットが用意してあるらしい。

使い方は、コマンドラインオプションに-XhasMemberを指定した上で、以下のように記述:

-- 引用 --
public aspect LiftImmutability {
declare @type:
hasmethod(@Immutable * *(..)):
@Container;
}
----

まだITDを考慮してなくて正式サポートじゃないけど、これ使えるとちょっと記述の幅が広がるなぁ。
いい感じ。

2006/09/01

[aspectj-users] syntheticメソッドを指定したい

[aspectj-users] Excluding synthetic compiler methods

Javaコンパイラが生成するメソッドにsynthetic属性が付くのは周知だけど(嘘ですごめんなさい。この投稿で初めて知りました)、ポイントカットにそれを指定したいという話。
もしそこまでやるんだと、バイトコードレベルでのポイントカットをクリアにする必要性が出てくるなぁ。

投稿した人は、AspectJがsyntheticメソッドまでポイントカットの対象としていることを問題視して、それを省くために指定したいということだったんだけど、結局、その振る舞いはバグ(AspectJは本来syntheticメソッドには関わらない)で、AspectJがsyntheticをサポートすることはない(Java言語には無いので)ってことに。

[aspectj-users] クラスアノテーションとメソッドアノテーションの組み合わせ

[aspectj-users] Combination of Class Annotation and Method Annotation matching

僕の投稿なんですが。

class Base{ void func(){} }

@Annot
class Derived extends Base{
 @Annot void func(){}
}

こんなクラスがある場合、execution(@Annot * (!@Annot *).*(..))というポイントカットが、Derived.funcにマッチするのは何故?って話。

結論としては、AspectJのマッチング仕様としては正しい動作らしい。
AspectJのマッチングは、実際にはメソッドそのものではなくそのシグネチャとマッチングを行っていて、1つのメソッドは複数のシグネチャを持ち、かつアノテーション等のデジネータは上書きされるってことらしい。つまり、Derived.funcは、親クラスのfuncのシグネチャを引き継ぐため、"Base.func"と"@Annot void (@Annot Derived).func"の2つのシグネチャを持つ。で、前述のポイントカットは上書きされて"@Annot Base.func()"になるので、Derived.funcがマッチするそうな。

これをマッチさせないための対処としてはexecution(@Annot * *.*(..)) && !within(@Annot *)というポイントカットを使うこと。

なんか釈然としないので、その後も議論の継続を試みたのだけど、止まってしまった。
クラスアノテーションもオーバーライドされれば(void Derived.funcが@Annot void (@Annot Base).func()と扱われれば)、すっきりすると思うんだけどなぁ。