-Beehive

休日ですが、ためた仕事のため出社。しかし息抜きにBeehive-NetUIの仕様を見てみる。。。惜しい。ベースがStrutsだからしょうがないのだろうが、型付がぬるいのと縛られるAPIが結構多いみたい。
Beehiveの一例:拡張子が「.jpf」なのを自前コンパイル(Javaソースなのに拡張子が違うのはちょっと違和感。専用プラグインPolinateへの対策かな?)

public class LoginController extends PageFlowController {
  @Jpf.Action(
    forwards={
      @Jpf.Forward(name="SUCCESS", path="success.jsp")
      @Jpf.Forward(name="FAIL", path="fail.jsp")
    }
  )
  public Forward login() {
    LoginService service = 
      (LoginService)s2.getComponent(LoginService.class);
    String result = service.login(...);
    return new Forward(result);
  }
}

同じようなのを実現するIkushipe案:12/1のから考察を進めました。機能は同じですが、Beehiveがアクションコマンドのフレームワークである一方、Ikushipeはページ指向のフレームワークとして設計しているので位置づけが異なります。また、アノテーション中の型付を厳しく、しかも不要な実装を作らないコンセプトです。このインターフェイスをインプリするものは作りません。

public interface LoginPage extends ActionPage {
  @DelegateAction(
    delegate=LoginService.class,
    handleResult={
      @HandleResult(result="SUCCESS", moveTo=SuccessPage.class),
      @HandleResult(result="FAIL", moveTo=FailPage.class)
    }, 
    handleThrow={
      @HandleThrow(throw=LoginException.class, moveTo=ErrorPage.class)
    }   
  )
  void login();
}

しかし、そうはいってもBeehiveは侮れん。とにかく全貌がすぐには分からないぐらいデカいし。