谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

Re: S2JFaceのいけてないところ

まぁ、書きっぱなしだと何なので。
非同期処理が弱いトコロは、Interceptorで解決できるかな、と思います。


Actionメソッドの実行(invoke)前後に
S2JFaceが行なっている処理(ウィジットバインディングとかExportValueとか)を、
いっそまるごとInterceptor化してしまう。


そうすれば、Actionを作成する開発者は、
メソッドがS2JFaceから呼び出されるのか、
別クラス(別スレッド)から呼び出されるのか、
意識しない実装が出来るわけですよね。


妄想的には、開発者はこんな感じのコードを書くだけで良い。

@EventListener(id = { "menuSearch", "toolSearch" })
public void searchEmployee() {
    List<EmployeeDto> result = (List<EmployeeDto>) windowManager
            .openModal("org/seasar/jface/example/employee/search.xml");
    if (result != null) {
        employees = result;
    }
}

@AsyncEventListener
public void refreshEmployee(List<EmployeeDto> list) {
    employees = list;
}

AsyncEventInterceptorみたいなのを作成して、
既存のS2JFaceのクラスを呼び出して処理すれば良いのではないでしょうか。