クライアント側のリスナーが標準のjavax.management.remoteコネクタを使用していると想定しています。カスタマイズをしなくても、簡単な障害検出を実装できると思います。フォールトトレランスについては、おそらくある種のクラスタリングソリューションを検討しているでしょう。
心配する必要のある接続には2つの層があります。
- MBeanServerConnection自体。つまり、サーバー側のJVM全体が終了した場合、クライアント側のプロセスはそれを知る必要があります。
- サーバーJVMと補助MBeanServerConnectionは引き続き使用可能ですが、「ホストされた」リスナー/クライアントメッセージフォワーダーサービス自体が停止/失敗/停止する可能性があります。
#1の場合、クライアントプロセスは、 addConnectionNotificationListenerメソッドを使用してNotificationListenerをJMXConnectorに登録できます。ローカル接続は、次のすべてのイベントでJMXConnectionNotificationを発行します。
- 新しいクライアント接続が開かれました。
- クライアント接続が閉じられました。
- クライアント接続が予期せず失敗しました。
- クライアント接続で通知が失われる可能性があります。この通知はクライアント側にのみ表示されます。
このようにして、クライアントはサーバーへの接続が確立されて失われたことを知ることができます。
#2の場合、これはアプリケーションに少し固有ですが、おそらく次のような単純なパターンを適応させることができます。
リスナー/フォワーダーサービスが開始したら、開始通知を発行します。停止したら、停止通知を送信します。これらの通知に登録するリスナーの2つのカテゴリは次のとおりです。
- クライアントは、サービスが開始/停止したことを知っています。
- 「停止」をリッスンしてサービスを再開できるサーバー側の「ウォッチャー」。
それは多かれ少なかれあなたが考えていたものですか?