クラウド・ストレージの送信アダプタの使用
プロダクションでは、クラウド送信アダプタを使用してクラウド・ストレージ内のデータにアクセスできます。そのためには、ここで説明するようにカスタムのビジネス・オペレーションを作成します。ビジネス・オペレーションを作成したら、プロダクションに追加して、構成します。
アダプタを使用するビジネス・オペレーションの作成
クラウド送信アダプタを使用するには、次のようにビジネス・オペレーション・クラスを作成します。
-
ビジネス・オペレーション・クラスは、Ens.BusinessOperationOpens in a new tab を拡張するものでなければなりません。
-
クラスの ADAPTER パラメータは EnsLib.CloudStorage.OutboundAdapterOpens in a new tab である必要があります。
-
クラスの INVOCATION パラメータは、使用する呼び出しスタイルを指定する必要があります。以下のいずれかを使用します。
-
Queue は、メッセージが 1 つのバックグラウンド・ジョブ内で作成され、元のジョブが解放された段階でキューに配置されることを意味します。その後、このメッセージが処理されると、別のバックグラウンド・ジョブがこのタスクに割り当てられます。これは最も一般的な設定です。
-
InProc は、メッセージが、作成されたジョブと同じジョブで生成、送信、および配信されることを意味します。このジョブは、メッセージが対象に配信されるまで送信者のプールに解放されません。これは特殊なケースのみに該当します。
-
-
クラスでは、少なくとも 1 つのエントリを含むメッセージ・マップを定義します。メッセージ・マップは、以下の構造を持つ XData ブロック・エントリです。
XData MessageMap { <MapItems> <MapItem MessageType="messageclass"> <Method>methodname</Method> </MapItem> ... </MapItems> }
-
クラスでは、メッセージ・マップ内で名前が付けられたすべてのメソッドを定義します。これらのメソッドは、メッセージ・ハンドラと呼ばれます。各メッセージ・ハンドラは、以下のシグニチャを持っている必要があります。
Method Sample(pReq As RequestClass, Output pResp As ResponseClass) As %Status { }
ここで、Sample はメソッド名、RequestClass は要求メッセージ・クラスの名前、ResponseClass は応答メッセージ・クラスの名前です。"メッセージの定義" を参照してください。
アダプタを使用するには、メソッド・コードでビジネス・オペレーションの Adapter プロパティのメソッドを呼び出す必要があります。"BLOB の削除" と "BLOB のアップロード" を参照してください。
-
その他のオプションと一般情報は、"ビジネス・オペレーション・クラスの定義" を参照してください。
以下の例は、必要となる一般的な構造を示しています。
Class ECLOUD.NewOperation1 Extends Ens.BusinessOperation
{
Parameter ADAPTER = "EnsLib.CloudStorage.OutboundAdapter";
Parameter INVOCATION = "Queue";
Method Sample(pReq As RequestClass, Output pResp As ResponseClass) As %Status
{
Quit $$$ERROR($$$NotImplemented)
}
XData MessageMap
{
<MapItems>
<MapItem MessageType="RequestClass">
<Method>Sample</Method>
</MapItem>
</MapItems>
}
}
BLOB の削除
ビジネス・オペレーションは、送信アダプタの DeleteBlob() メソッドを呼び出すことにより、クラウド・ストレージから BLOB を削除します。このメソッドのシグニチャは、以下のとおりです。
method DeleteBlob(bucketName as %String, blobName as %String) as %Status {
}
以下はその説明です。
-
bucketName は、BLOB が格納されるバケットの名前です。
-
blobName は、BLOB の名前です。
例えば、カスタム・メソッドには次のようなものが含まれます。
Set tSC = ..Adapter.DeleteBlob(..BucketName, request.BlobName)
このコードでは、BucketName プロパティを使用してクラウド・ストレージのバケットを参照しています。削除する BLOB の名前は要求メッセージから取得されます。
BLOB のアップロード
送信アダプタは、データのソースまたはデータ型に応じて、BLOB をアップロードするための 3 つの異なるメソッドを提供しています。これらのメソッドのシグニチャは以下のとおりです。
method UploadBlobFromFile(bucketName as %String, blobName as %String, filePath as %String) as %Status {
}
method UploadBlobFromStream(bucketName as %String, blobName as %String, content as %Stream.Object) as %Status {
}
method UploadBlobFromString(bucketName as %String, blobName as %String, content as %String) as %Status {
}
以下はその説明です。
-
bucketName は、BLOB が格納されるバケットの名前です。
-
blobName は、BLOB の名前です。
-
UploadBlobFromFile() で使用される filePath は、読み込まれてアップロードされるファイルのフル・パス名です。
-
他のメソッドで使用される content は、アップロードされるデータです。UploadBlobFromStream() の場合、これは %Stream.ObjectOpens in a new tab のインスタンスでなければなりません。UploadBlobFromString() の場合は文字列になります。
例えば、カスタム・メソッドには次のようなものが含まれます。
Set tSC = ..Adapter.UploadBlobFromStream(..BucketName,
request.BlobName, request.Content)
事前構築されたクラウド・ビジネス・アプリケーション
利便性のため、インターシステムズでは、簡単なビジネス・オペレーション、EnsLib.CloudStorage.BusinessOperationOpens in a new tab を提供しています。これは、BLOB を削除し、ストリームから BLOB をアップロードする方法を示しています。サンプルのビジネス・オペレーションでは、2 つの簡単なメッセージ・クラス、EnsLib.CloudStorage.DeleteRequestOpens in a new tab と EnsLib.CloudStorage.UploadRequestOpens in a new tab を使用して、BLOB の削除とアップロードを行います。EnsLib.CloudStorage.BusinessOperationOpens in a new tab には、前述のとおり、プロパティ BucketName が含まれます。送信アダプタにはこのプロパティは含まれないため、カスタム・ビジネス・オペレーションにこのプロパティを含める必要があります。