- PR -

Webサービスクライアント(Swingアプリ)

1
投稿者投稿内容
kuromaku
会議室デビュー日: 2005/05/11
投稿数: 4
投稿日時: 2005-05-11 09:35
IBM Rational Web Developer V6 を使ってJavaによるWebサービスとWebサービスクライアントを
開発しています。

構成としまして、サーバ側のWebサービスにWebサービスクライアント(Swingアプリケーション)がアクセスするという形態を考えています。


Rational Web Developer V6 を使って開発したSwingアプリケーションにWebサービスクライアントの機能を持たせる場合、実行に必要なjarファイルはどれでしょうか?


【作成方法】
「Webサービス」→「クライアントを生成」のウィザードを使って、「Javaプロキシー」(Java)を作成。このとき、「クライアント・サイド環境の選択」で「Webサービス・ランタイム」は「IBM WebSphere」、「サーバー」は「WebSphere V5.1テスト環境@localhost」、「J2EEバージョン」は「1.3」、「クライアント・タイプ」は「Java」を選択。
生成されたProxyクラスを使って自作したSwingアプリケーションからWebサービスを呼び出して実行。


この方法で、Rational Web Developer V6 上で「実行」はできます。これをjarファイルとして配布できる形式にまとめたいのですが、ただエクスポートしただけでは、WebSphere特有のjarファイルが含まれてくれないため、実行時にjava.lang.NoClassDefFoundErrorが発生します。


内容としては、{$WAS_HOME}/lib 配下にあるたくさんのjarファイルのどれかに含まれるクラスが無いと言われているのですが、1つだけでは無いため、どのjarファイルに実行に必要なjarファイルがあるのかわかりません。


そもそも、作り方、間違っているでしょうか??
kuromaku
会議室デビュー日: 2005/05/11
投稿数: 4
投稿日時: 2005-05-11 16:47
総当りで調査したところ、
{WAS_HOME}/lib 配下の以下とIBM JDKの{JAVA_HOME}/jre/ext/配下にあった以下のJarファイルにクラスパスを通すと配布できる形で実行できました。

bootstrap.jar
commons-discovery.jar
commons-logging-api.jar
ffdc.jar
j2ee.jar
jaxrpc.jar
ras.jar
webservices.jar
wsdl4j.jar
wsexception.jar
xerces.jar


しかしながら、こんなにたくさんのJarファイルが必要なのは少々煩雑です。
WebSphere上で動くWebサービスに対して、簡単にSwingアプリケーションからでも
Webサービスへアクセスする方法は無いのでしょうか?




山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-05-11 16:58
サポート窓口に問い合わせてみては?
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-05-11 17:18
「Webサービス・ランタイム」に WebSphere ではなく、他の選択肢
(製品がないので英語版のデモを見ましたが、Apache Axis あたりが選べたように見えます)
を選べば、それを参照するコードが生成されると思います。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2005-05-11 21:02
こんばんは。

以前、Apache Axisを使用して、SwingベースのWebサービスクライアントを作成してみた
ことがありますが、やはりjarファイルが大きいせいか、起動に時間がかかるようです。
(ただし私の場合はアプレットですが・・・)

アプリ起動の速さが要求されるようであれば、
サーバとSwingアプリケーションの間の通信は、別の方法が良いようですね。
私の場合は、Webサービスを諦め、URLConnectionで作成しました。
コーディングが鬼のようです。(^^;

kuromaku
会議室デビュー日: 2005/05/11
投稿数: 4
投稿日時: 2005-05-13 09:56
インギさん、にしざきさん、ひらさん、ありがとうございます。

にしざきさんからいただいたアイディアを元に試してみましたところ、
「Webサービス・ランタイム」を「Apache Axis1.0」にしてみたところ、
「クライアント・タイプ」は「Web」に固定されてしまいうので、仕方なく、動的WebプロジェクトにJavaプロキシーを作成しました。

作成されたJavaプロキシーのソースに使用されているコードはWebSphere特有のコード
は一切無く、Apache Axisのほうのクラスを使用して書かれていました。

これをjarファイルとしてexportしてみると、必要jarファイルは
「WEB-INF/lib」のディレクトリに入ってしまいますが、必要なjarファイルだけを取り出すことができました。
マニュフェストファイルを自分で作り、パッケージングして実行してみたところ、
正しく実行できました。


参考までに、
WebSphereのlibより抜き出した必要jarファイルの合計ファイルサイズ:約4Mちょっと。
Apache Axisのランタイムを使用した場合の必要jarファイルの合計ファイルサイズ:約2Mほど

ファイルサイズが半分に減りました。


これでJavaプロキシーの作成はなんとか簡単にできそうですが、
パッケージングの作業は自作でantのbuild.xmlでも作って対応するしかなさそうです。

ひらさんの言っていられた速度についてですが、まだそんなにロジックを入れてないせいだと思いますが、起動時間は今のところそんなに気になりません。普通のWindowsアプリ(例えばNetscape7x系の簡易起動ナシのものにくらべるとむしろ早い)と同等と感じます。

MSの.NETなんかで作ったWebサービスで通信するスマートクライアントとさほど速度が変わらない気がします。実行ファイルのファイルサイズは圧倒的にスマートクライアントのほうが小さいですが。


みなさん、ありがとうございました。
他にもSwing+Webサービスやっておられる方、おられませんか??

1

スキルアップ/キャリアアップ(JOB@IT)