- PR -

CORBA呼び出しを切断する方法

1
投稿者投稿内容
やまろう
常連さん
会議室デビュー日: 2003/10/13
投稿数: 35
お住まい・勤務地: 埼玉・東京
投稿日時: 2004-04-16 21:09
JavaでCORBAを使っているのですが、その中で、一定時間過ぎても
リモート呼び出しの応答がない場合、通信を切断するという用件が
ありまして、一定時間を計る方法はTimerTaskを使えばいいことが
わかったのですが、
CORBA呼び出しを切断する方法がわかりません。

何かヒントとなるものでもいいので、教えて下さい。
ToGo
常連さん
会議室デビュー日: 2002/03/16
投稿数: 46
投稿日時: 2004-04-17 07:49
使用しているCORBAの実装系によって対応方法が変わります。どのCORBAを使っていますか?

CORBA 2.4以上であれば、QoS Messaging機能が追加されておりクライアント・タイムアウトが使用できます。
そうでなければ、アプリケーションでタイムアウトを実現する必要があります。

#「通信の切断」が具体的に何をどうすることを指しているのか、にもよりますが・・・
やまろう
常連さん
会議室デビュー日: 2003/10/13
投稿数: 35
お住まい・勤務地: 埼玉・東京
投稿日時: 2004-04-17 17:31
ご返答ありがとうございます。

CORBAの実装系は日立のTP Brokerです。バージョンは
今はちょっとわからないので会社に行って調べてみます。
CORBA 2.4以上であることを願います。

今回ゲートウェイの開発をすることになったのですが
今までWebの開発ばかりだったので不安を抱えていたので
すが、なんとかやっていけそうな気持ちになりました。
やまろう
常連さん
会議室デビュー日: 2003/10/13
投稿数: 35
お住まい・勤務地: 埼玉・東京
投稿日時: 2004-04-19 11:42
残念な話なのですが、Qosを利用することは出来なそうです。
TP Brokerは内部的にBorlandのVisi Brokerを使用しているのですが、
そのVisi Brokerのバージョンが3.3のため、Qosをサポートしていません
でした。CORBA2.0準拠だそうです。4.XからQosサポートだそうです。

そこで、「アプリケーションでタイムアウトを実現する」ことを
考えたのですが、まずはじめに考えたのが、
CORBAのリモートメソッドを呼び出す処理をスレッドクラスに実装し、
そのスレッドを起動してからjava.util.TimerTaskで時間を計り
時間が来たらそのスレッドをKillというものなのですが、Threadを
強制的にKillする方法が見当たりませんでした。Thread#destroyは
未実装だそうです。実装したとしても安全ではないそうです。

次に考えたのが、CORBAのリモートメソッドを呼び出す処理を
別プロセスとして起動し、時間が過ぎたらそのプロセスをKillと
いうものです。プロセスを実装したクラスのpublicメソッドに
System.exit()を書いて、それを呼べば出来ると考えています。

しかし、この方法では別プロセスに渡す引数や、逆にリモートメソッドの
戻り値等をファイルやDBに格納するかSocket等でプロセス間通信で
引き渡さなければなりません。とても効率が悪く実装の手間も
かかってしまいます。

どうのように「アプリケーションでタイムアウトを実現する」機能
の実装をすれば良いでしょうか?

「通信の切断」が何をどうすることを指しているのか、
ということですが、TCPの接続が切れている(netstatコマンドで
見た時に通信が切れている)という要件です。

どうかよろしくお願いします。
1

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