まぁ、書きっぱなしだと何なので。
非同期処理が弱いトコロは、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のクラスを呼び出して処理すれば良いのではないでしょうか。