Curl ® API では、Curl アプレットの外部のリソースにアクセスする様々なツールを提供しています。リソースには以下のものが含まれます。
Web アプリケーションでは、クライアント マシンに少量のデータを格納することにより向上したユーザーエクスペリエンスを提供することができます。多くの Web アプリケーションは HTTP cookie を使用して、ユーザー名またはID、セッション ID、ユーザー パフォーマンスといったものや、あるいはゲームのハイスコアなどのアプレットの設定情報を格納しています。
Curl のアプレットでは、HTTP cookie を使用できます。「
HTTP Cookie へのアクセス」 を参照してください。また、Curl API では、クライアント側 パーシスタント データも提供しています。これは、より強固な、Curl 特有の少量のデータを格納するメカニズムです。
クライアント側パーシスタント データでは、アプレットの権限のステータスに関係なく、またユーザーの操作なしにアプレットがデータを格納することができます。セキュリティ上の理由から、Curl のアプレットは、以下のように制限された状況下でのみクライアント ファイル システムのファイルの読み込み、または書き込みが可能です。
アプレットへのセキュリティ制限の詳細については、「
セキュリティ」のセクションを参照してください。
クライアントのパーシスタント データの格納メカニズムは、これらのセキュリティ制限の範囲外で機能しています。格納されるデータは、サイズ、型および保存期間が限られています。データはアプレットによって作成された
Repository に格納されています。RTE はクライアント マシンのディスク上のスペースにデータの格納場所を見つけ、データを格納しファイルから読み込むことができるフォーマットにデータを変換します。
クライアントのパーシスタント データは、特権アプレットおよび非特権アプレットのどちらのアプレットでも使用可能で、また単一のアプレットに制限することも、いくつかのアプレットで共有することも可能です。また、単一のアプレットは複数のリポジトリからのデータアクセスが可能です。
注意: アプレットがパーシスタント データをロードするのは起動時だけですが、書き込みはいつでも可能です。
この制限の結果、クライアントのパーシスタント データはアプレット間の設定やステート情報を共有するには便利ですが、アプレット間の内部プロセス コミュニケーションのメカニズムにはなりません。同一のパーシスタント データの格納への書き込みや更新結果のロードによって複数のアプレットが情報の受け渡しをすることはできません。アプレットをシャットダウンして再スタートしない限り、内部プロセス コミュニケーションにパーシスタント データを使用することはできません。アプレットは
AppletData メカニズムを通じてサブアプレットと通信することができます。「
子アプレットと JavaScript サポート」を参照してください。
プライベート パーシスタント データは、1 つのアプレットのみアクセス可能なリポジトリに保存されます。これは最も単純な形式のパーシスタント データです。他のアプレットはリポジトリにアクセスできないので、データに対する特定のリポジトリを識別する必要はありません。RTE は、アプレットの URL に基づいた既定の識別子が使用します。
persistent-data プロシージャを使用して、プライベート データ リポジトリを作成します。このプロシージャは、リポジトリでデータを読み込んだり保存したりしようとする前に、全てのコード ブロック外、つまりソースファイルのトップレベルで呼び出す必要があります。
このプロシージャはいくつかのリポジトリ パラメータを定義します。
- comment はパーシスタント データに格納されたメッセージです。comment パラメータを使用して、リポジトリに何が保存されているかを記述できます。
- duration はリポジトリへの最終アクセスからこれを削除するまでの RTE の待機時間です。この有効期限によって、未使用期間の長いリポジトリがユーザーのシステムに散乱するのを防ぎます。この期間は、保存するデータ型、およびエンド ユーザーがアプレットを実行する予想頻度に基づいて指定します。有効期限は、1 日単位に切り上げられます。
- max-size は、リポジトリに保存するデータの最大バイト数です。
たとえば、次の persistent-data の呼び出しは、ユーザーの好きな色を最長90日間保存するのに使用する小さなリポジトリを定義します。
{persistent-data
"Store your favorite color",
duration=90days,
max-size=1024
}
パーシスタント データ識別子(PDI)ファイルの
persistent-data の呼び出しを行うことで、複数のアプレットが共有できるパーシスタント データ リポジトリを作成することができます。このファイルは
persistent-data への呼び出しのみが含まれます。PDI ファイルはヘラルドを持たないソース ファイルで、拡張子は
.scurl です。この機能により、複数のアプレットが起動時のユーザー設定などの情報にアクセスできます。
PDI ファイルは、ホストからダウンロードされたアプレットの場合はサーバー上に保存され、ローカル ファイル システムからロードされた特権アプレットの場合はディレクトリに保存されます。
アプレットが特権を与えられているかどうかによって、アプレットが共有できるデータ リポジトリにいくつかの制限があります。
- 特権アプレットはすべての共有化されたデータ リポジトリにアクセスできます。
- HTTP ホストからロードされたアプレットは、共有データ リポジトリを定義する PDI ファイルの親または子ディレクトリ内にある場合はパーシスタント データを共有できます。詳細は「PDI ファイルの場所」を参照してください。
- ローカル ファイル システムからロードされたアプレットはパーシスタント データ リポジトリを共有できません。これはローカル アプレットの関連付けやデータ共有の許可を判定する方法がないためです。
特権が与えられていないアプレットがパーシスタント データ リポジトリを共有する必要がある場合は、そのアプレットをサーバー上に配置する際、リポジトリを定義する PDI ファイルと以下のどれかの関係である必要があります。
- アプレットのソース ファイルは PDI ファイルと同じディレクトリにあること。
- アプレットの親ディレクトリが PDI ファイルを含むディレクトリの上位にあること。
- PDI ファイルの親ディレクトリがアプレットのソース ファイルを含むディレクトリの上位にあること。
RTE は、特定の PDI ファイルを使って各アプレットが起動する時にこの制約を強制します。
注意: 次の例では、ロケーションは仮定ですが、その関係は実際のものです。
たとえば、アプレットが http://www.your-server.net/content/demos/example.curl にあるとします。
- アプレットは http://www.your-server.net/content/repository1.scurl で定義されたリポジトリにアクセスできます。これはアプレットを含むディレクトリで、demos の親ディレクトリである content にアプレットがあるからです。
- アプレットは http://www.your-server.net/content/demos/leaf1/leaf2/repository2.scurl によって定義されたリポジトリにもアクセスできます。これはアプレットを含むディレクトリである demos が PDI ファイルを含むディレクトリの上位にあるからです。
- アプレットは http://www.your-server.net/content/info/repository3.scurl によって定義されたリポジトリにはアクセスできません。これは、アプレットが demos の直接の親でも子でもない info にあるからです。
PDI ファイルのサーバー上の場所は、クライアント マシン上のデータの保存場所とは関係がありません。PDI ファイルの場所が関係するのは、リポジトリにアクセスできるアプレットを決定するときのみです。
let pref-data:Repository =
{get-persistent-data-repository
pdi-name="http://www.your-server.net/demo/pref-data.scurl"
}
以下のプロシージャで、パーシスタント データ リポジトリのデータを操作できます。
パーシスタント データ リポジトリには、以下のような特定のデータ型のみ保存できます。
- null
- プリミティブ データ型 :
- 以下のような定義済みの数量
- String
- 以下のコレクション(先に述べたデータ型のみを含む場合のみ)
パーシスタント データ値を取り出すには、必要なデータを識別するキーを
get-persistent-data に渡します。このプロシージャは、保存したオブジェクトを含む
any 型を返します。オプションのパラメータ
error-if-missing? を
false に設定すると、キーがリポジトリ内のエントリと一致しない場合に
null が返されます。パラメータを設定しない場合、キーがエントリと一致しないときには
KeyNotFoundException をスローします。通常、プロシージャが
null を返したかどうかを判定するよりこの例外をキャッチする方が簡単です。
プライベート パーシスタント データ リポジトリから値を取得および保存する例を次に示します。このセクションを初めてロードするときは、実行 を数回クリックしてリポジトリの値が増加するのを確認してください。
特権を与えられていないアプレットは、アクセスできるリポジトリの制限に加え、以下のような制限を受けます。
- アプレットは最高 20 までのデータ リポジトリを開くことができます。
- それぞれのデータ リポジトリは 256K までに制限されます。
エンド ユーザーがアプレットから離れてブラウズしている間は、アプレットが一時停止状態になります。つまり、ユーザーが (通常はブラウザの[戻る]ボタンを押して) アプレットに戻らない限り、アプレットは再び動作しません。ユーザーが再度アプレットに戻らない場合、アプレットは最終的に消滅してメモリから削除されます。アプレットが一時停止のときにコミットされていないパーシスタント データがある場合、そのデータは保存されない可能性があります。
たとえば、次のコードをアプレットに追加できます。
|| Ensure data gets committed
{on-applet-suspend
|| Commit the private data store
{commit-persistent-data}
|| Commit a shared data store
{commit-persistent-data repository=pref-data}
}
パーシスタント データは永久には保存されません。PDI の duration パラメータで指定された時間内にリポジトリにアクセスされなかった場合、RTE はリポジトリを削除し、スペースが解放されます。さらに、クライアント マシンに保存されているため、パーシスタント データを完全に制御することができません。たとえば、エンドユーザーがハードディスクを交換した場合、パーシスタント データは消滅します。これらの理由により、パーシスタント データ リポジトリは、永久に維持しなければならないデータを保存する場所として、適切ではありません。
Copyright © 1998-2019 SCSK Corporation.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of SCSK Corporation.
that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of SCSK Corporation.