読者です 読者をやめる 読者になる 読者になる

この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

Struts2で継続(Continuation)

Struts2

XWorkのActionSupportクラスのJavadocを見ていたら発見してしまったのです。
継続をサポートしているということを。


どのように実装しているか大変興味を持ったので、早速ソースを見てみると、

/**
 * <!-- START SNIPPET: pause-method -->
 * Stops the action invocation immediately (by throwing a PauseException) and causes the action invocation to return
 * the specified result, such as {@link #SUCCESS}, {@link #INPUT}, etc.
 * <p/>
 * <p/>
 * The next time this action is invoked (and using the same continuation ID), the method will resume immediately
 * after where this method was called, with the entire call stack in the execute method restored.
 * <p/>
 * <p/>
 * Note: this method can <b>only</b> be called within the {@link #execute()} method.
 * <!-- END SNIPPET: pause-method -->
 *
 * @param result the result to return - the same type of return value in the {@link #execute()} method.
 */
public void pause(String result) {
}


…え?何も書いてない?( ゚д゚)ポカーン


こちらによると、どうやらバイトコードをいじっている模様です。
ただし「現在のステータスはexperimentalだから実案件で使うのはやめとけ」だそうです。


限定的な継続でよければ(ループをサポートしないとか)CGLIBあたりを使って、Struts2のインターセプターとして自前で実装することもできると思います。
まあ、実装したとしても何に使うんだ?という問題はあるけれども(-_-)