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のインターセプターとして自前で実装することもできると思います。
まあ、実装したとしても何に使うんだ?という問題はあるけれども(-_-)