たぷつきません

おなかがでてきた。もうたぷついてるやん。

GAE/JでJavassist

 使える機能をうまく選択することで制限付きながらGAE/JでJavassistが扱えます。

GAEではクラスパスが無いのでルックアップがうまくいきません。サーブレットやフィルタのinit()で以下のようにクラスパスを登録しておきます。

    ClassPool pool = ClassPool.getDefault();

    pool.appendClassPath(getServletContext().getRealPath("WEB-INF/classes"));

    for (File file:
            (new File(getServletContext().getRealPath("WEB-INF/lib")).listFiles())) {
        String jarPath = file.getAbsolutePath();
        if (jarPath.toLowerCase().endsWith(".jar")) {
            pool.appendClassPath(jarPath);
        }
    }

javassist3.1から追加されたクラスのファイル書き込み(CtClassのwriteFile())はGAE内では使えないので、toClass()だけ使うようにします。
そんなわけでプールから追い出されるたびに、毎回改造処理を走らせてtoClass()を得る必要があります。