アプリケーション構成の矛盾の解決
複数の管理ユーザーによる共有環境では、別々の管理ユーザーが、 同じ WebSphere Application Server 構成文書を同時に更新しようとする可能性があります。 以下に、複数の管理ユーザーが同じ構成文書を同時に更新しようとした場合に発生する可能性がある 例外の検出およびその対処に役立つ情報を示します。
管理コンソールまたは wsadmin ツールのいずれかを使用して管理可能クライアントに ログインすると、行われる構成変更を追跡するための固有のワークスペース・セッションが作成されます。 各ワークスペース・セッションごとに、一時ワークスペース・ディレクトリーが関連付けられます。 このディレクトリーは、ログイン・セッション中に変更されたすべての構成ファイルを 保管するために使用されます。このディレクトリー内のファイルは、最初に セル構成リポジトリーから抽出され、変更内容は、保存されるまでこれらのファイルの ワークスペース・コピーにのみ存在します。変更が保存されると、構成管理ランタイムは、 変更された構成ファイルが別のユーザーによってまだ変更されて保存されていないことを確認してから、 変更されたファイルをワークスペース・ディレクトリーからマスター・リポジトリーへコピーします。
別々のワークスペース・セッションが別々の構成ファイルを変更している限り、 保存の矛盾は発生しません。しかし、複数のワークスペース・セッションにより 1 つ以上の同じ構成ファイル が変更された場合、保存の矛盾が生じ、最初のワークスペース・セッションによる変更のみが、セルの構成リポジトリーに反映されます。後続のユーザーが同じ構成ファイルに対する変更を保存しようとすると、 保存の矛盾例外を受け取ります。
- 別々のアプリケーションの、別々のアプリケーション・サーバーまたは別々のアプリケーション・サーバー・ クラスターへの同時デプロイメント。
- 別々のアプリケーションの、同一アプリケーション・サーバーまたは同一アプリケーション・サーバー・ クラスターへの同時デプロイメント。
通常、同時または並行アプリケーション・デプロイメント のシナリオは、システム管理者による追加作業を必要とせず、安全に実行されます。 しかし、serverindex.xml マージ・アルゴリズムが対処しないアプリケーション・デプロイメントのシナリオがあります。例えば、serverindex.xml マージ・アルゴリズムは、ファイルの変更を同一アプリケーション、同一クラスター、または同一サーバーに同時にデプロイするような状況には対処しません。また、マージ・アルゴリズムは、アプリケーション・デプロイメント以外のものを含む 他の同時管理アクティビティー中に発生した構成の矛盾にも対処しません。
必要なオブジェクト参照の取得とパラメーター・リストの構成
wsadmin ツールを使用して、 構成の矛盾を回避し、矛盾を解決するための簡単な対策がいくつかあります。 構成の矛盾の検出および解決に使用される wsadmin コマンドは、ConfigService MBean への 参照を取得した後、その MBean により提供される getConflictDocuments メソッドを実行して、 ユーザーがワークスペース・セッション中にファイルに対して矛盾する変更を行ったかどうかを判別します。 ConfigService MBean について詳しくは、この MBean の Javadoc を参照してください。
以下のコード・サンプルは、必要なオブジェクト参照を取得して、ConfigService MBean により提供される getConflictDocuments メソッドを呼び出すために必要なパラメーター・リストを構成する方法を示しています。
// get ConfigService MBean reference
wsadmin>cs = AdminControl.queryNames('WebSphere:*,type=ConfigService')
// obtain ObjectName for ConfigService MBean
wsadmin>import javax.management as mgmt
wsadmin>csName=mgmt.ObjectName(cs)
// get session object for the current administrative user session
wsadmin>session=AdminConfig.getCurrentSession()
// manipulate and prepare the administrative session object and
// MBean operation arguments for use
wsadmin>from com.ibm.websphere.management import Session
wsadmin>from jarray import array
wsadmin>parms=array([session], java.lang.Object)
wsadmin>ptype=array(['com.ibm.websphere.management.Session'], java.lang.String)
// invoke MBean getConflictDocuments method to obtain a list of any document conflicts
wsadmin>AdminControl.invoke_jmx(csName,'getConflictDocuments', parms, ptype)
{}
wsadmin>
Listing 3
wsadmin>AdminControl.invoke_jmx(csName,' getConflictDocuments', parms, ptype)
{['cells/cell_name/nodes/node_name/serverindex.xml',cells/cell_name/applications/
DefaultApplication.ear.ear/deltas/DefaultApplication.ear/delta-1278791909117',
... <list abbreviated> ...}
wsadmin>
wsadmin>AdminConfig.reset()
変更を保存する前に getConflictDocuments メソッドを呼び出して矛盾する文書がないことを確認して、即座に AdminConfig.save() コマンドを実行しても、 getConflictDocuments メソッドを呼び出してから AdminConfig.save() コマンドを実行するまでの間に 他のセッションによって同じ構成ファイルが変更される可能性があるため、 保存が成功する保証はありません。
マスター・リポジトリーへの保存が失敗した場合、 以下のような ConfigServiceException 例外を受け取ります。
WASX7015E: コマンド "AdminConfig.save()" を実行中にエラーが発生しました。例外情報:
com.ibm.websphere.management.exception.ConfigServiceException
java.security.PrivilegedActionException:
java.security.PrivilegedActionException:
com.ibm.ws.sm.workspace.WorkSpaceException: RepositoryException
- getConflictDocuments メソッドを使用して、別のユーザーによって既に保存された構成ファイルを判別します。
- AdminConfig.reset() コマンドを実行して、行った変更を廃棄します。
- 変更の廃棄後、該当する構成ファイルに対して変更を再度適用し、 AdminConfig.save() コマンドを実行してその変更を保存することができます。
通常、同じセッション中に保存の矛盾が複数回発生することはないため、 再度行った変更の保存は成功する可能性が高いと思われます。それでも、保存の再試行が失敗した場合は、 上記のアクションを繰り返して、変更を再度保存してください。