Visual Studio.NETを使って、C#やVB.NETを使えば、さくさくっとWebサービスが作れます。しかし、できあがったWebサービスに対してJavaアプリケーションがアクセスにいったらどんなことが起こるでしょうか。
.NET Frameworkでスマートクライアントアプリケーションを作るうえで、データを受け渡すのにいちばん簡単なのはDataSetのオブジェクトを返すWebサービスを作り、それに対して参照設定して、クライアント側はDataGridなどサービスから受け取ったDataSetをバインディングできるコントロールのDataSourceとして設定してしまえばおしまい。
でもDataSetを返すWebサービスに対してJavaからアクセスするとどうなるかご存知ですか?.NET Frameworkで閉じた世界と異なり、Java側ではDataSetに該当するクラスはありません。そうなると、JavaアプリケーションからADO.NETのDataSetを返すWebサービスへアクセスするのはとても面倒なことになります。ということは、インターオペラビリティを考慮するなら、ADO.NETのDataSetを直接返すな!という戦略を立てるしかありません。そうなると、DataSet側のリレーショナルなデータをオブジェクトの配列に変換するといったR-Oマッピングが要求されると思います。面倒だ。なんかうまい方法はないものかと模索してみたいと考えています。
ちなみにJ2EEベースのWebサービスに.NET Frameworkを使ったクライアントがアクセスする場合は、どうなんでしょう。簡単なものなら参照設定すれば簡単にアクセスできることはわかっています。でもJava.sql.ResultSet、つまりJDBCの結果セットが返されたら・・・。結局R-Oマッピングが必要。
結論的には相互接続が必要ならば、XMLスキーマのプリミティブなデータ型を利用して独自の型は使わないようにしなければならない。開発生産性にある程度のオーバヘッドが生じるんだろうなぁ。
TechEd 2004においても「.NETとJ2EEの相互運用の実現と考慮」のセッションがあって、受講しました。紹介されていたApplicatoin Interoperability: Microsoft .NET and J2EE については、洋書を購入しました。業務上、両者は避けて通れないので、じっくり研究してみたいと思います。気が付いたことがあれば、このブログで記事として取り上げたいと思います。