IBM TechXchange Japan Business Automation User Group

 View Only

BAWの開発時に遭遇した障害の回避策について

By SHINTAROH YOKOTANI posted Wed May 31, 2023 10:16 AM

  

BAWで開発中にプレイバック実行をしたところ、以下のエラーが画面に表示されてしまいました。このブログでは、このエラーが発生したときの解決策について書いていきたいと思います。

[Instance Details UI Service Template]

エラー: 「Server Side Init Data」サービスが次の情報で失敗しました: com.lombardisoftware.core.TeamWorksException: javax.jms.JMSException: CWSIA0067E: An exception was received during the call to the method JmsMsgProducerImpl.sendMessage (#4): com.ibm.ws.sib.processor.exceptions.SIMPLimitExceededException: CWSIK0025E: The destination monitorDestination on messaging engine SingleCluster.000-BPM.ProcessCenter.Bus is not available because the high limit for the number of messages for this destination has already been reached..


このエラーが表示された開発者は、なぜこのエラーが表示されたのかを理解する必要があるのと同時に、解消する方法を知らないことには、これ以上開発が進められないことも理解されているはずです。(残念ながら、開発画面を操作するたびに、このエラーが表示されるので。。。)

今回は以下の手順で解消していきました。ちょっと手順の順番については記憶が曖昧な部分もありますが・・・・

  1. エラーで表示されている”メッセージ”というものが、サーバー上のどこの何なのかを知る。
  2. "メッセージ"を出している原因を確認し、修正する。
  3. "メッセージ"を出している存在を確認し、対処する。
  4. "メッセージ"を削除する。

あと大事なポイントとして、今回は筆者一人が使用している開発のサーバーで発生したエラーに対する対処法でしたが、複数の方で開発をしているときは、お互いにコミュニケーションを取り合って、削除して良いメッセージの有無については合意形成をしておきましょう。(同じサーバーにアクセスしている人は全員同じエラーが出るはずなので、合意形成は簡単なはずです。)


1.エラーで表示されている"メッセージ"が、サーバー上のどこの何なのかを知る。

 エラーメッセージを見てみるとSingleCluster.000-BPM.ProcessCenter.Bus というメッセージング・エンジンのmonitorDestination が溢れていることが表示されています。ここからは、BAWの開発者によっては存在を知らなくても困らなかったであろうサーバー内部の構造に少し足を踏み入れる必要があります。

作業において必要になるのは、BAWのサーバー(ここでは開発サーバー)の管理者権限と管理コンソールのURLです。それらの情報を手に入れたら、ログインをして、画面左側のViewからService IntegrationのBusesをクリックし、SingleCluster.000-BPM.ProcessCenter.Bus まで辿り、Queue points画面を開きます。
以下の図では、Identifierという欄にたくさんの項目がありますが、エラーメッセージに表示されていたmonitorDestinationを探します。ここでは、Queue Depthに64526という数字が表示されています。


次に、このmonitorDestinationのリンクをクリックしてみると、以下の画面が表示されますが、High messages thresholdの欄には50000という設定値がはいっており、先程の画面の数値より小さいことがわかります。この設定値を超えていることをエラーメッセージは訴えていたのでした。ちなみに、今回は”メッセージ”の中身が何かについては追いかけず、この閾値が超えたことが原因で、これを解消することにフォーカスをします。

2."メッセージ"を出している原因を確認し、修正する。
 では、この溢れてしまう"メッセージ"を作っているのはどこの誰なのかを確認していきます。
今回の原因は、残念ながら開発時のエラーチェックでは発見できていませんでした。プロセスフローを確認していくと、支払い査定のアクティビティーに設定されたタイマーイベントとその先に接続されたフローによって、処理がループしてしまいBAW内部のメッセージング・エンジンのキューが溢れてしまったようです。ここでこのループしているフローを削除します。(もしこの作業がエラー表示によってできない場合は、先に手順3,4を実施してください)


3.メッセージを出している存在を確認し、対処する。
 実装としてエラーの原因を突き止めましたが、今回のケースは、すでに起動されているプロセスの各インスタンスごとにこの処理実行している可能性がありますので、プロセス・インスタンスを停止することを考えます。
実行しているプロセス・インスタンスを停止するためには、Process Admin Consoleを開き、プロセス・インスタンスのフィルター基準でアクティブを選択して、障害の原因となるメッセージを出しているプロセスのインスタンスを選択して、終了処理を行っていきます。図では複数のインスタンスが表示されているので、すべて削除を行いました。
この画面上にプロセス・インスタンスがない状態になれば、新たに"メッセージ"を出し続けることはありません。
これで水道の蛇口を閉めることができました。

4.メッセージを削除する。
最後に、手順1で確認したmonitorDestinationのQueueに溜まったメッセージを削除していきます。

管理コンソール上のRuntimeタブをクリックし、Additional Propertiesの下にあるMessagesリンクをクリックします。

以下の画面が表示されますので、Delete allボタンをクリックします。


すべての"メッセージ"を削除しようとしましたが、いくつかの"メッセージ"は削除できなかったという新たなエラーメッセージが表示されました。エラーの原因を生成してた箇所は対策済みのはず!ここではこのエラーメッセージは無視して先に進みます。



これでHigh messages thresholdの欄に書かれていた50000より"メッセージ"の数が小さくなっていれば一安心!でしょうか?


今一度、手順1で確認したQueue の一覧を見てください。もしかすると、以下のIdentifierを持つQueueにも大量の"メッセージ"が溜まっていないでしょうか?もし溜まっているようであれば、上の手順と同じですので"メッセージ"を削除しましょう。

SYSTEM.Exception.Destination.SingleCuster.000-BPM.ProcessCenter.Bus@ShingleCluster.000-BPM.ProcessCenter.Bus


以上で今回遭遇したエラーメッセージへの対処方法の手順は完了です。BAWのアプリケーション開発に戻りましょう!


最後に、今回遭遇したエラーですが、原因は当然直すとしても、もしかするとQueueのデフォルト設定が低すぎるのでは?と思った方もいらっしゃるかもしれません。設定値は、変更が可能ですが、極端に大きな数値にすると別の障害の原因(主にパフォーマンス関連になると思います)となるか、今回のような不具合の検知が遅くなってしまう可能性もありますのでご注意ください。

以下は公開後の追記です。

BAWのエラーが画面に表示されたら、まず、ログ・ファイルを見るべきでは?という指摘がございました。全くもってその通りです。
(注:ログ・ファイルには、あなたが解決したくて仕方がなくなってしまう別の障害のエラーメッセージを見てしまうことになるかもしれませんので、気をつけて下さい。)
BAWのログファイルはどこを見るべきか?という点についてですが、大規模な開発であれば開発サーバーの管理者に確認するということもできると思うのですが、ちょっとした開発で、開発サーバーも仮想化環境で提供された物で自分で面倒を見なければいけないという限定的な状況を想定して、ログファイルの在り処を探していきます。
エラーが格納されるログ・ファイルは、開発サーバーがインストールされたOS上のファイル・システムに存在しています。OSへのログイン及びファイルシステムへのアクセス権があれば、ファイルを探しに行けば良いのですが、そこまでの権限を与えられていない場合は、開発サーバーの管理コンソールから参照する方法もあります。
管理コンソールからアクセスする場合、管理者権限のIDとパスワードが必要です。画面左側のTroubleshootingのエリアにひっそりと存在する Logs and traceというお目当てのリンクをクリックし、その後右側の画面に表示されるサーバーのインスタンスを選択して、JVM Logsをクリックし、Runtimeタブをクリックすると以下の画面になります。
まず見るべきログファイルは、SystemOut.logファイルですので、Viewボタンをクリックして、その深淵を味わってみて下さい。この記事では、ここまでにして、後の解説は、三度の飯よりログを見るのがスキだという方に譲りたいと思います。


#BusinessAutomationWorkflow(BAW)
#CP4BA

0 comments
32 views

Permalink