XLANG-s 言語
XLANG/s は、XML、XSD、Web Services Description Language (WSDL) などのインターネット標準を使用するように設計されており、.NET ベースのオブジェクトおよびメッセージの操作に対するサポートが組み込まれています。 XLANG/s は、C# の表現機能を備えたメッセージング言語と見なすことができます。 ただし、XLANG/s と C# の間でコードを移植することはできません。
XLANG/s では、プロセスと実装を明確に区別することが推奨されています。 たとえば、ビジネス プロセスまたはプロトコルを XLANG/s で指定し、アプリケーションのローカルな側面 (データベース アクセスなど) を他の .NET プログラミング言語 (C# や Visual Basic.NET など) で実装します。
XLANG/s の割り当て構文および式構文は C# をモデルとしています。したがって、正確な構文については、C# の仕様を参照する必要があります。 XLANG/s では、ビジネス プロセスの定義に使用される高レベルのコンストラクターが多数定義されています。 XLANG/s では、文字列や整数などの低レベルのデータ型がサポートされていますが、メッセージ、ポート、関連付け、サービス リンクなどの高レベルのデータ型も定義されています。 これらのデータ型は、ビジネス プロセスに関連付けられているセマンティクスを厳密に定義するために使用され、 while や scope などのプロセス制御ステートメントによって補完されます。
XLANG/s ステートメントは、通常、 受信 や 送信などの独自に動作する単純なステートメントと、単純なステートメントまたは スコープ、 並列、 リッスンなどの他の複雑なステートメントを含むまたはグループ化する複雑なステートメントの 2 つのカテゴリのいずれかに分類されます。 XLANG/s に組み込まれているセマンティクスは、Microsoft、IBM、および BEA がビジネス プロセスのセマンティクスを定義するために公開した Business Process Execution Language for Web Services (BPEL4WS) 仕様に定義されているセマンティクスを反映したものです。
XLANG/s の主なコンストラクターは、BizTalk オーケストレーション デザイナーでオーケストレーション ダイアグラムを描画することによって生成されます。したがって、これらのコンストラクターについて理解する必要は必ずしもありません。 オーケストレーション デザイナーは、ビジネス プロセスを視覚的にデザインするための機能豊富なグラフィカル ツールです。 オーケストレーション デザイナーは、.odx という拡張子を持つ XLANG/s ファイルを生成します。このファイルのヘッダーには追加の視覚的情報が格納され、本文にはカスタム属性情報が格納されます。
注意
XLANG/s 言語は独自に開発されたもので、仕様は一部非公開となっています。 このセクションでは、この言語について、オーケストレーションを作成する際に注意するべき項目を説明します。 .odx ファイルを直接変更することはサポートされていません。
最も単純な XLANG/s プログラムでは、メッセージの種類を定義することにより、操作を開始するためのデータをオーケストレーションに提供する必要があります。 オーケストレーションは、ポート経由でメッセージを受信してから終了します。 コード例は次のとおりです。
module HelloWorldApp
{
private porttype ptPOReceive
{
oneway opPOReceive
{
HelloWorldApp.PurchaseOrder
}
}
private porttype ptPOSend
{
oneway opPOSend
{
HelloWorldApp.PurchaseOrder
}
}
private service HelloWorld
{
port implements HelloWorldApp.ptPOReceive poPOReceive;
port uses HelloWorldApp.ptPOSend poPOSend;
message HelloWorldApp.PurchaseOrder msgPO;
body ()
{
activate receive (poPOReceive.opPOReceive, msgPO);
send (poPOSend.opPOSend, msgPO);
}
}
}
上記の XLANG/s プログラムでは、module
キーワード (keyword)は XLANG/s プログラムのコンパイル単位を定義します。 プログラムで使用されるすべての型 ( porttype、 correlationsettype、 servicelinktype、 messagetype など) は、このレベルでスコープ設定されます。
ポートは、XLANG/s が送受信するメッセージを送受信できるコンストラクトであり、ポートには porttype という名前の定義済みの型があります。 porttype コンストラクトは、ポートで使用できる操作のコレクションを定義します。 これらの操作は、ポート経由での単一の有効なメッセージ交換を定義します。 porttype、messagetype、servicelinktype、または correlationsettype コンストラクトを定義する場合、XLANG/s プログラムの作成者は基本的に複合データ型定義を作成します。 これらの定義には、他の言語で行う複雑なデータ型と同じ利点があります。データ型に具体化された概念をより高いレベルに抽象化し、データ型を簡単に再利用できます。
上記の HelloWorldApp モジュールの ptPOReceive ポートは、一方向の受信ポート操作 opPOReceive で定義されています。 このサービスの HelloWorld ブロックでは、プロセスの実際の実装と、ポート変数やメッセージ変数などプロセスで使用される変数を定義しています。 このブロック内の最初の 3 行のコードでは、ポート変数 poPOReceive と poPOSend とメッセージ msgPO をそれぞれ定義します。 本文には、サービスに渡すパラメーターと実行動作を表すコードが記述されています。 入れ子になったスコープ ブロックで定義されているものを除くすべての変数は、このレベルにスコープ設定されます。 アクティブな受信である receive ステートメントは、poPOReceive.opPOReceive ポートから msgPO メッセージを受信し、オーケストレーションの新しいインスタンスを作成します。 メッセージを受信した後、send ステートメントでそのメッセージを送信ポートに送信します。 前のコードの 2 つのポート宣言では、 poPOReceive は implements 修飾子を使用し、 poPOSend では uses 修飾子を使用します。 implements 修飾子は、そのポート経由でメッセージを受信することをランタイムに通知します。 uses 修飾子は、そのポート経由でメッセージを送信することをランタイムに通知します。