複合アプリケーション - 設計と管理


複合アプリケーションでデータ型を使用する
IBM(R) Lotus Notes(R)、Lotus Expeditor、WebSphere Portal の複合アプリケーションは、プロパティブローカー機能を利用して他のコンポーネントと通信します。プロパティブローカーを使用すると、疎結合コンポーネント間での通信が可能になります。疎結合コンポーネントは、処理単位の大きいコンポーネントをさまざまなアプリケーションに再利用できるようにするため、サービス指向アーキテクチャ (SOA) では重要となります。これにより、必要に応じたアプリケーションを構築できるようになります。

コンポーネント間の通信は、プロパティ、アクション、関連付けによって行われます。ソースコンポーネントは、名前、データ型、値を持つ出力プロパティを発行します。ターゲットコンポーネントは、入力プロパティを持つアクションを提供します。

2 つのコンポーネントが通信を行うための関連付けを定義するには、出力プロパティのデータ型とアクションの入力プロパティのデータ型が一致しなければなりません。出力プロパティとアクションは、コンポーネントの一部として定義されます。

コンポーネント間の関連付けは、疎結合を行う複合アプリケーションのレベルでのみ定義されます。コンポーネントインターフェイスは WSDL (Web サービス記述言語) ファイルによって定義されますが、Web サービスとして呼び出されるわけではありません。

WSDL では、プロパティ、アクション、データ型の定義を行います。データ型については、組み込みのものを使用することも、特殊なデータ型を独自に定義することも可能です。組み込みデータ型は W3C http://www.w3.org/TR/xmlschema-2/#built-in-datatypes で定義されています。たとえば、文字列表現に使用する「xsd:string」(http://www.w3.org/TR/xmlschema-2/#string) のようなデータ型があります。

これらのデータ型は、別のプログラミング言語のデータ型/クラスとバインドされます。たとえば、W3C データ型は JAXB 2.0 によって Java データ型とバインドされます。つまり、xsd:string データ型は java.lang.String データ型とバインドされることになります。同様に、NSF や LCD (Lotus Component Designer) のコンポーネントタイプについても、LotusScript や JavaScript とのバインディングがあります。

また、WSDL では、ユーザー独自の特殊データ型を定義することもできます。次の例で、このポイントについて説明します。

<types>

<xsd:schema targetNamespace="http://com.ibm.propertybroker.standardtypes">

<xsd:simpleType name="mailTo">

<xsd:restriction base="xsd:string"/>

</xsd:simpleType>

</xsd:schema>

</types>



上記の例の mailTo データ型は現在、Lotus Notes の Mail コンポーネントで使われています。このデータ型を使用すると、新しいメールを表示して、複数のフィールドを事前に生成するアクションをトリガーできます。

メモ このデータ型は複雑であり、http://ftp.isi.edu/in-notes/rfc2368.txt で定義された独自のセマンティクスと構文を持ちます。

組み込みデータ型にも特殊データ型にも、長所と短所があります。特殊データ型を使用すると、異なるコンポーネント間の連係がより複雑になり、ときには不可能になることもあります。たとえば、あるベンダー提供のコンポーネントが「mailTo」と呼んでいるデータ型を、別のベンダー提供のコンポーネントが「rfc2368Type」と呼ぶ場合、これらのコンポーネントが実際には同じセマンティクスと構文を使うとしても、これらのコンポーネントを関連付けることはできません。別の例として、あるコンポーネントが特殊データ型「url」を発行するのに対し、別のコンポーネントが URL では「xsd:string」しか受け入れないという場合もあります。

この場合、コンポーネント間の連係をうまく保つには、データ型の使用の意味での「最小公倍数」を使用する必要があります。つまり、各コンポーネントが組み込みデータ型のみ(できるだけ「xsd:string」のみ)を使用するようにします。ただし、「xsd:string」のみを使用することの問題点もあります。それは、アクションが特定のプロパティを処理できない場合でも、すべての出力プロパティとアクション間の関連付けを定義できるという点です。

たとえば、特殊データ型「mailTo」を使用せずに、URL を発行するコンポーネントと、Mail コンポーネントのアクション「新規メールの作成」を関連付けることは可能ですが、これを行っても意味がありません。「xsd:string」しか使用しない場合、アセンブリツール (Composite Application Editor と Portal Application Template Editor) はどの関連付けが実際に可能なのかを判断できず、各アクションは理解できないプロパティを使った呼び出しまで処理しなければならなくなります。

組み込みデータ型と特殊データ型によるこれらの問題を回避するには、次のガイドラインに従ってください。


データ型の異なる 2 つのプロパティ (1 つは「xsd:string」、もう 1 つは特殊データ型) を発行することもお勧めします。すべてのアクションを 2 回 (入力データ型として「xsd:string」を使って 1 回、特殊データ型を使ってもう 1 回)指定することも可能です。ただしこの場合でも、すべてのプロパティとアクションが「xsd:string」として表示されます。*