GAE/J+AspectJ

先日、下記の書籍を買ってGAE/Jを始めてみました。

Google App Engine for Java [実践]クラウドシステム構築 (WEB+DB PRESS plus) (WEB+DB PRESSプラスシリーズ) (WEB+DB PRESS plusシリーズ)

Google App Engine for Java [実践]クラウドシステム構築 (WEB+DB PRESS plus) (WEB+DB PRESSプラスシリーズ) (WEB+DB PRESS plusシリーズ)

GAE/JではWebフレームワークやコンテナを使用することができますが、そんなに大掛かりなものを作るつもりもないので、取りあえずAspectJだけ動かすことができるか確認してみました。ServletAspectをWeavingしてみます。

手順は以下のとおりです。

  1. AJDT(今回は2.0.1)をインストール
  2. Web Application Project(GAE/Jのプロジェクト)を作成
  3. パッケージエクスプローラ等でプロジェクトを選択後、右クリック→「Convert To AspectJ Project」を選択
  4. aspectjrt.jarをWEB-INF/libにコピー
  5. アスペクトを書く
  6. 開発環境で動作確認
  7. *.appspot.comにアップ

[WeavingされるServlet]

import java.io.IOException;
import javax.servlet.http.*;

@SuppressWarnings("serial")
public class Life_cycleServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		resp.setContentType("text/html");
		resp.getWriter().println(getString());
	}
	
	public String getString(){
		return "Hello, world";
	}
}

[Aspect]

public aspect TestAspect {

	pointcut goCut(): execution(String getString());

	Object around(): goCut(){
		return "before<br/>" + proceed() + "<br/>after";
	}
}

[結果]

before
Hello, world
after 

ということで、問題なく動きました。