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

Swing Application Framework その6:セッション管理


Swing Application Frameworkによるセッション管理

フレームワークはアプリケーション終了時のセッション保存と、次回起動時のセッションの復元の機能を提供します。ここでのセッション状態は、アプリケーションのグラフィカルウインドウの設定内容で、フレームの位置とサイズや、タブの選択状態などのグラフィックプロパティです。

SingleFrameApplicationのセッションサポート

SingleFrameApplication はデフォルトでセッションの保管をサポートしています。Application のサブクラスからアプリケーションを作成した場合は、セッションの保管は自動的には行われませんが、実装は簡単です。

  String sessionFile = "sessionState.xml";
  ApplicationContext ctx = getContext();
  JFrame mainFrame = getMainFrame();

  @Override protected void startup() {
    //...
   try {
     ctxt.getSessionStorage().restore(mainFrame, sessionFile);
   } catch (IOException e) {
      logger.log(Level.WARNING, "couldn't restore session", e);
    }
  }

  @Override protected void shutdown() {
    try {
      ctxt.getSessionStorage().save(mainFrame, sessionFile);
  } catch (IOException e) {
    logger.log(Level.WARNING, "couldn't save session", e);
  }

セッション状態の復元は、ApplicationContext クラスから SessionStorage を取得して、restore メソッドを使用します。セッション状態の保存は、同様に save メソッドを使用します。

LocalStorage

セッションストレージは LocalStorage クラスに依存しています。LocalStorage クラスは、SessionStorage から使用され、セッション状態の保存と復元機能を提供します。また、LocalStorage クラスは JavaBeans コンポーネントXMLドキュメントとして簡単に永続化するために使用することができます。

 @Action
 public void loadMap() throws IOException {
    Object map = ctxt.getLocalStorage().load(file);
    listModel.setMap((LinkedHashMap<String, String>)map);
    showFileMessage("loadedFile", file);
 }

 @Action
 public void saveMap() throws IOException {
    LinkedHashMap<String, String> map = listModel.getMap();
    ctxt.getLocalStorage().save(map, file);
    showFileMessage("savedFile", file);
 }

ApplicationContext から取得した LocalStorage を経由して、XMLファイルの load と save が行えます。