パーシスタントデータ

Web アプリケーションでは、クライアント マシンに少量のデータを格納するために HTTP cookie を使用して、ユーザー名またはID、セッション IDなどの設定情報を格納しています。Curl アプレットもHTTP cookie を使用できます。さらにCurl API ではクライアント側 パーシスタントデータという小さなサイズのデータを格納する機能を提供しています。

では、具体的にサンプルを見ていきましょう。

プライベートパーシスタントデータ

これは、1つのアプレットのみからアクセス可能なパーシスタントデータです。これらを扱うためにまずは管理のためのリポジトリをpersistent-dataというプロシージャにより作成する必要があります。この際に有効期限等を設定することもできます。

{persistent-data
    “my persistent data.”,
    duration = 90days,
    max-size = 1024
}

リポジトリ作成後、以下のようにパーシスタントデータを取得(set-persistent-data)やセット(get-persistent-dataプロシージャ)することができます。

    let date:#String = {get-persistent-data
                           “last-visit”,
                           error-if-missing? = false}
    {output date}
    || set persistent data and commit.
    {set-persistent-data “last-visit”, {format “%s”, {DateTime}}}
    {commit-persistent-data} 

扱える型としては、null、プリミティブ形、String、FastArray-of、Array-of、HashTable-ofなどがあります。(詳細はCurlヘルプを参照ください。)set-persistent-data後、値をコミットするためにcommit-persistent-dataプロシージャを実行する必要があります。注意事項として、アプレットは最大で20までのリポジトリと256Kまでのデータしか扱うことができません。

共有パーシスタントデータ

パーシスタントデータ識別子(PDI)ファイルの persistent-data を呼び出すことで、複数のアプレットが共有できるパーシスタント データ リポジトリを作成することができます。これを利用するには、共有のscurlを作成し、その中でpersistent-dataプロシージャを呼び出す必要があります。

|| create repository
{persistent-data
    “shared persistent data”,
    duration = 90days,
    max-size = 1024

一方、各アプレットでは、パーシスタントデータを利用する前にget-persistent-data-repositoryプロシージャを用いてリポジトリ(Repositoryオブジェクト)を取得する必要があります。この際、上記の共有scurlのパスを指定する必要があります。
その後、プライベートと同様にget-persistent-data/set-persistent-dataを用いてパーシスタントデータを上記で取得したRepositoryオブジェクトを指定して扱うことができます。 

{let repo:Repository =
    {get-persistent-data-repository
        pdi-name = “http://localhost/share.scurl
    }
}
{do
    let date:#String =
        {get-persistent-data
            “last-visit”,
            repository = repo,
            error-if-missing? = false}
   
    {output date}
   
    || set persistent data and commit.
    {set-persistent-data “last-visit”,
        {format “%s”, {DateTime}},
        repository = repo
    }

サンプルコードのダウンロード

パーシスタントデータのサンプル