8

Glassfish 3.1.2.2、MySQLデータベース、およびSwingクライアントアプリケーションを備えた3層アプリケーションがあります。データベースサーバーのクラッシュを処理することはどういうわけか可能ですか?

アプリケーションの実行中にMySQLサービスを停止しようとしました。次に、ファサードセッションBeanの1つを介してデータベースにアクセスしようとするたびに、javax.ejb.EJBAccessException例外が発生します。

データベースが現在ダウンしていることをユーザーに通知したいと思います。さらに、データベースが再び稼働するまで、アプリケーションを一種の「スリープモード」に設定したいと思います。

そのようなシナリオを処理するための良い(そしておそらく簡単な)アプローチは何でしょうか?

よろしくお願いします!

4

2 に答える 2

31

A) 自動リカバリ/再接続用にGlassfish接続プールを構成していることを確認してください

Glassfish JDBC 接続プール構成で、次の値を設定します。

  • 属性:is-connection-validation-required, validate-atmost-once-period-in-seconds, connection-creation-retry-attempts, connection-validation-method, connection-creation-retry-interval-in-seconds, ping

Glassfish 構成 jdbc-connection-pool プロパティー
Glassfish 管理者 - create-jdbc-connection-pool サブコマンド

手順:

  1. Glassfish が実行されていると仮定すると (たとえば、[サーバー] を開いて [Glassfish] を右クリックして、[Netbeans サービス] タブでサーバーを起動する)、ドメイン管理サーバーが実行されている必要があります。
  2. Web ブラウザーで Admin Console を開きます http://localhost:4848 (または、インストール時に指定したポートを使用します。
  3. 左側の Common Tasks メニューで Resources -> JDBC を開き、JDBC Connection Pools をクリックします。
  4. 接続プールの POOL NAME をクリックします (または、[新規] ボタンをクリックして新しいものを作成します)。
  5. [詳細] タブを選択して次のように入力します。
  6. 最大 1 回の検証: (例: 60) 秒単位
  7. 作成の再試行回数: (例: 3)
  8. 再試行間隔: (例: 10) 秒単位
  9. 接続の検証: (チェック) 必須
  10. 検証方法: (例: 自動コミット)
  11. 必要に応じてその他の高度なプロパティ
  12. [全般] タブを選択して次のように入力します。
  13. ピン(ティック)
  14. 必要に応じてその他の一般的なプロパティ

B) アプリケーション エラー処理 / DB 監視とアラートの実装

  1. 必須: 「インフラストラクチャ レベル」の致命的なユーザー エラーをトラップし、サポート スタッフに警告します。

    致命的なエラーが発生したときに通知を送信し、そのメソッドを呼び出す単純な JMX クラスを作成します。通知を送信する JMX MBean クラス。JMX モニター コンソールを使用してサーバーの状態を監視できます。これらのコンソールの一部は電子メール アラートを送信し (JManage や RHQ など)、HTTP/AJax または他の言語からアクセスするためのブリッジがあります ( Jolokiaは javascript/perl/Java API を使用できます)。 JMX 通知にアクセスします)。

    Google カレンダー APIを使用してエラー メッセージを送信し、スタッフの Google カレンダーをサポートします (1 ~ 2 分後)。次に、電子メール/SMS 通知を送信するように Google カレンダーを構成します。エラー アラートは、ほぼリアルタイムでサポート スタッフに直接送信されます。これは Google の使用制限の対象となります (1 日あたり 10,000 クエリの特別な制限があるため、アプリに過度のバグがないことを確認し、ロジックを使用して 1 時間/1 日/1 週間に送信されるメッセージの数を制限してください)。

  2. 望ましい:DB(およびおそらくアプリサーバー)を監視し、サポートスタッフに停止を警告します

    • Zabbix オープン ソースには、mySQL の監視とアラートが組み込まれています - 軽量ですが、セットアップと構成が必要です
    • Hyperic オープン ソースには、mySQL 監視用の拡張プラグインと組み込みのアラートがあります - 重量があり、セットアップと構成が複雑になる可能性があります
    • Nagois オープン ソースは *nix OS のデフォルトです - 重量があり、セットアップと構成が複雑になる可能性があります

    いずれの場合も、セットアップはすぐには行われません。別のミニ プロジェクトとして実装し、適切に実行するのが最善です。これには、サポート スタッフが関与するのが最善です。

    これらが「範囲外」の場合は、独自の単純なモニターを作成します。

    • DB に対してスケジュールされた単純なテスト クエリを実行する EJB タイマー - 失敗した場合はアラートを送信します (JMX/Google カレンダー/Java メール/SMS ゲートウェイ API 経由)。または、Quartz オープン ソース スケジューラを使用して同じジョブを実行します。
于 2012-11-06T04:18:33.237 に答える
1

それ自体で、接続プールはデータベースの状態を監視します。インターセプターを作成し、db がダウンしたときにピックアップすることができます。コンテナーは再接続を試みますが、再接続がいつ成功するかは必ずしもわかりません。エラーを検出したら、どこかにセマフォを設定する必要があります。次に、タイマーを起動してデータベースの状態を定期的にチェックし、セマフォが戻ってきたらリセットする必要があります。最後に、セマフォを尊重するようにアプリをコーディングする必要があります。

これは高レベルの提案です。幸運を。

あるいは、JMX を使用してすべてのイベントをフックできるかもしれませんが、わかりません。

于 2012-10-28T15:25:53.363 に答える