- PR -

JMSとJAX-RPCの違い

1
投稿者投稿内容
たまこ
常連さん
会議室デビュー日: 2005/01/12
投稿数: 25
投稿日時: 2005-05-23 13:57
お世話になります。

まず、作りたい処理の概要を書きます。
-----------------
クライアント(A)が違うネットワーク上のアプリケーション(B)を呼び出します。
通信はSOAPで行い、AからBへXMLを送ります。(BからAへXMLを送ることもあります。)

Bの処理ではデータベースへの書き込みを行います。
また、AからBへXMLを渡す際に、推薦されたJMSを使用しようと考えていました。

Bでのデータベース書き込みとAからBへのXML通信を、全て1つのトランザクションで管理するため、2フェーズコミットを行いたいと考えています。
-----------------

メッセージキューやSOAP、XML通信など、知識の乏しい技がいくつも出てきたので、色々と調査していると、JAX−RPCというAPIを発見しました。

JAX-RPCは面倒なことなくSOAP通信をすることができ、上記のような処理を行うためのAPIだという認識を持ちました。(トランザクション制御は除き。)

しかし、JAX-RPCとJMSの違いはよく判りません。
・もしかすると、そもそもJAX−RPCはJMSを使用したAPIなのでしょうか?
・JMSという単品のメッセージサービスでは、
 自分でSOAP通信をするソケットを開いたり、
 ポートを確保したりしなければならないのでしょうか?
・JMSのトランザクション制御をできることは「なんとなく」ですが判りました。
 (JTAのTransactionManagerを使用すると認識しています。)
 しかし、JAX-RPCのトランザクション制御はできるものなのでしょうか?
 2フェーズコミットなんて可能なのでしょうか?

・・・自分の判っていない点を再認識するために長くなってしまいました。
   もし、文章中で私の認識が間違っている点や、意味不明な点などありましたら、
   是非教えてください。

ご教授宜しくお願い致します。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-05-23 15:10
まず、JAX-RPCでの呼び出しを、通常のトランザクションに参加させるのは難しいでしょう。
Webサービスのトランザクション制御に関しては、WS-Transactionといった標準仕様が出て
きていますが、これを実用で使ったというのは聞いたことがありません。ですので、もし
準拠製品があったとしても、それなりにリスキーでしょう。

次にJMSでのメッセージ送信ですが、これでの処理は非同期になりますので、呼び出し側の
トランザクションで制御できるのは、メッセージのサブミットまでになります。メッセージの
処理については、Message-driven Beanを使うことによってトランザクション制御できますが、
このトランザクションは呼び出し側とは別のトランザクションになります。

ところで、2chでも質問していませんか? だとすると、別々に質問するのはなぜでしょうか。
たまこ
常連さん
会議室デビュー日: 2005/01/12
投稿数: 25
投稿日時: 2005-05-23 16:18
> ukさま

ご教授ありがとうございます。
確かに私は非同期処理を行いたいので、
有無を言わせずJMSを使用することになるのでしょうか。
それから、Apache Axisを用いて、XMLのやり取りをします。
ですから、B側でトランザクション制御ができるのは、
「SOAP通信上のAxisからアプリケーション(B)まで」だと認識していました。
しかし、ukさんのメッセージを読んだところ、
JMSの部分は別トランザクションになるということですので・・・混乱しています。
「2フェーズコミット」という表現が適切でなかったのかもしれませんが、
JMSとBのデータベースの同期は必ず取りたいのです。
それは不可能なことなのでしょうか。。
(前回の質問で記述しましたが、処理は非同期処理です。)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21419&forum=12


追伸:2chの書込みは私ではありませんが、
   同室にいる、私が質問をした人が、
   気を遣って調べようとしてくれたそうです。
   不快な思いをさせてしまったようで、大変申し訳ありませんでした。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-05-23 16:46
いくつか確認させてください。

・Webサービス(SOAP)を使うことは既定事項なのでしょうか
・「非同期」なのは、A(クライアント)側から見たものですよね
・また、2フェーズコミットもA(クライアント)側から見たものですよね
・最初の書き込みに「通信はSOAPで」「XMLの受け渡しはJMSで」と書かれていますが、具体的
な実装イメージがちゃんとありますか?

まず、「Webサービスを使った非同期処理で2フェーズコミットをおこなう」というのは技術的に
みて非常に高度な処理だという認識を持ってください。個人的な意見を言わせてもらえば、
もっと技術力のあるエンジニアをパートタイムでもいいからプロジェクトに入れるべきでしょう。

引用:

追伸:2chの書込みは私ではありませんが、
   同室にいる、私が質問をした人が、
   気を遣って調べようとしてくれたそうです。
   不快な思いをさせてしまったようで、大変申し訳ありませんでした。


別の人が書かれたのであれば、仕方ないでしょう。それに別に不快であったわけではなく、
質問を分散すると回答も分散するので、質問者にとっても回答者にとっても不利益だと思うので、
確認させてもらっただけです。
1

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