- - PR -
CORBA呼び出しを切断する方法
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-04-16 21:09
JavaでCORBAを使っているのですが、その中で、一定時間過ぎても
リモート呼び出しの応答がない場合、通信を切断するという用件が ありまして、一定時間を計る方法はTimerTaskを使えばいいことが わかったのですが、 CORBA呼び出しを切断する方法がわかりません。 何かヒントとなるものでもいいので、教えて下さい。 |
|
投稿日時: 2004-04-17 07:49
使用しているCORBAの実装系によって対応方法が変わります。どのCORBAを使っていますか?
CORBA 2.4以上であれば、QoS Messaging機能が追加されておりクライアント・タイムアウトが使用できます。 そうでなければ、アプリケーションでタイムアウトを実現する必要があります。 #「通信の切断」が具体的に何をどうすることを指しているのか、にもよりますが・・・ |
|
投稿日時: 2004-04-17 17:31
ご返答ありがとうございます。
CORBAの実装系は日立のTP Brokerです。バージョンは 今はちょっとわからないので会社に行って調べてみます。 CORBA 2.4以上であることを願います。 今回ゲートウェイの開発をすることになったのですが 今までWebの開発ばかりだったので不安を抱えていたので すが、なんとかやっていけそうな気持ちになりました。 |
|
投稿日時: 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
