Anwendungskonfigurationskonflikte beheben
In einer gemeinsam genutzten Umgebung mit mehreren Benutzern mit Verwaltungsaufgaben ist es möglich, dass verschiedene Benutzer mit Verwaltungsaufgaben gleichzeitig versuchen, dieselben Konfigurationsdokumente von WebSphere Application Server zu aktualisieren. Die folgenden Informationen sollen Ihnen helfen, Ausnahmen zu erkennen und zu behandeln, die auftreten können, wenn mehrere Benutzer mit Verwaltungsaufgaben versuchen, dieselben Konfigurationsdokumente gleichzeitig zu aktualisieren.
Jedesmal, wenn Sie sich bei einem Verwaltungsclient über die Administrationskonsole oder über das Tool "wsadmin" anmelden, wird eine eindeutige Arbeitsbereichssitzung erstellt, um alle vorgenommenen Konfigurationsänderungen zu verfolgen. Jeder Arbeitsbereichssitzung wird ein temporäres Arbeitsbereichsverzeichnis zugeordnet. In diesem Verzeichnis werden alle Konfigurationsdateien gespeichert, die Sie während einer Anmeldesitzung ändern. Die Dateien in diesem Verzeichnis werden zunächst aus dem Zellenkonfigurationsrepository extrahiert, und Ihre Änderungen existieren nur in den Arbeitsbereichskopien dieser Dateien, bis sie gespeichert werden. Wenn die Änderungen gespeichert werden, stellt die Laufzeitumgebung für die Konfigurationsverwaltung sicher, dass die Konfigurationsdateien, die Sie geändert haben, nicht bereits von einem anderen Benutzer geändert und gesichert wurden, und kopiert die geänderten Dateien anschließend aus dem Arbeitsbereich zurück in das Master-Repository.
Solange in den verschiedenen Arbeitsbereichssitzungen verschiedene Konfigurationsdateien geändert werden, gibt es keine Speicherkonflikte. Werden in mehreren Arbeitsbereichssitzungen jedoch dieselben Konfigurationsdateien geändert, tritt ein Speicherkonflikt auf, und es werden nur die in der ersten Arbeitsbereichssitzung vorgenommenen Änderungen in das Konfigurationsrepository für die Zelle übernommen. Wenn weitere Benutzer versuchen, die Änderungen in denselben Konfigurationsdateien zu speichern, erhalten Sie eine Ausnahme wegen eines Speicherkonflikts.
- Gleichzeitige Implementierung verschiedener Anwendungen in verschiedenen Anwendungsservern oder verschiedenen Anwendungs-Server-Clustern
- Gleichzeitige Implementierung verschiedener Anwendungen im selben Anwendungsserver oder Anwendungs-Server-Cluster
Gewöhnlich können gleichzeitige oder parallele Anwendungsimplementierungsszenarien sicher und ohne zusätzlichen Aufwand seintes des Systemadministrators ausgeführt werden. Es gibt jedoch Anwendungsimplementierungsszenarien, die der Zusammenführungsalgorithmus für die Datei serverindex.xml nicht behandeln kann. Beispielsweise ist der Zusammenführungsalgorithmus für die Datei serverindex.xml für Situationen, in denen Dateiänderungen gleichzeitig in derselben Anwendung, im selben Cluster oder im selben Server implementiert werden, nicht geeignet. Außerdem kann der Zusammenführungsalgorithmus keine Konfigurationskonflikte behandeln, die während der Ausführung anderer paralleler Verwaltungsaktivitäten auftreten, die mehrere Anwendungsimplementierungen umfassen.
Vorausgesetzte Objektreferenzen abrufen und Parameterliste erstellen
Es gibt einige einfache Maßnahmen, die Sie ergreifen können, um Konfigurationskonflikten vorzubeugen und Konflikte zu beheben, wenn Sie das Tool "wsadmin" verwenden. Die wsadmin-Befehle, die für die Erkennung und Behebung von Konfigurationskonflikten verwendet werden, stützen sich auf das Abrufen einer Referenz auf die MBean "ConfigService" und den anschließenden Aufruf der von dieser MBean bereitgestellten Methode "getConflictDocuments", um festzustellen, ob Benutzer in ihren Arbeitsbereichssitzungen widersprüchliche Änderungen vorgenommen haben. Weitere Informationen zu dieser MBean finden Sie in der Javadoc zur MBean "ConfigService".
Das folgende Codebeispiel veranschaulicht, wie Sie die vorausgesetzten Objektreferenzen abrufen und die Parameterliste erstellen, die für den Aufruf der Methode "getConflictDocuments" erforderlich ist, die von der MBean "ConfigService" bereitgestellt wird:
// Referenz auf MBean "ConfigService" abrufen
wsadmin>cs = AdminControl.queryNames('WebSphere:*,type=ConfigService')
// ObjectName für MBean ConfigService abrufen
wsadmin>import javax.management as mgmt
wsadmin>csName=mgmt.ObjectName(cs)
// Sitzungsobjekt für aktuelle Sitzung des Benutzers mit Verwaltungsaufgaben abrufen
wsadmin>session=AdminConfig.getCurrentSession()
// Verwaltungssitzungsobjekt und
// MBean-Operationsargumente bearbeiten und vorbereiten
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)
// MBean-Methode "getConflictDocuments" aufrufen, um eine Liste der Dokumentkonflikte anzuzeigen
wsadmin>AdminControl.invoke_jmx(csName,'getConflictDocuments', parms, ptype)
{}
wsadmin>
Listing 3
wsadmin>AdminControl.invoke_jmx(csName,'getConflictDocuments', parms, ptype)
{['cells/Zellenname/nodes/Knotenname/serverindex.xml',cells/Zellenname/applications/
DefaultApplication.ear.ear/deltas/DefaultApplication.ear/delta-1278791909117',
... <list abbreviated> ...}
wsadmin>
wsadmin>AdminConfig.reset()
Selbst wenn Sie die Methode "getConflictDocuments" vor dem Speichern Ihrer Änderungen aufrufen und feststellen, dass keine Konfliktdokumente vorhanden sind, ist nicht gewährleistet, dass die Speicheroperation auch bei sofortigem Absetzen des Befehls "AdminConfig.save()" erfolgreich verläuft, weil dieselben Konfigurationsdateien in der Zeit zwischen Aufrufen der Methode "getConflictDocuments" und dem Absetzen des Befehls "AdminConfig.save()" in einer anderen Sitzung geändert werden können.
Wenn das Speichern im Master-Repository nicht erfolgreich ist, wird eine Ausnahme vom Typ "ConfigServiceException" ähnlich der folgenden ausgegeben:
WASX7015E: Beim Ausführen des Befehls "AdminConfig.save()" ist eine Ausnahme eingetreten. Ausnahmeinformationen:
com.ibm.websphere.management.exception.ConfigServiceException
java.security.PrivilegedActionException:
java.security.PrivilegedActionException:
com.ibm.ws.sm.workspace.WorkSpaceException: RepositoryException
- Verwenden Sie die Methode "getConflictDocuments", um festzustellen, welche Konfigurationsdateien bereits von einem anderen Benutzer gespeichert wurden.
- Setzen Sie den Befehl "AdminConfig.reset()" ab, um Ihre Änderungen zu verwerfen.
- Nachdem Sie die Änderungen verworfen haben, können Sie Ihre Änderungen erneut auf die entsprechenden Konfigurationsdateien anwenden und den Befehl "AdminConfig.save()" absetzen, um diese Änderungen zu speichern.
Der nachfolgende Versuch, die Änderungen zu speichern, ist wahrscheinlich erfolgreich, weil gewöhnlich nicht mehrere Speicherkonflikte in derselben Sitzung auftreten. Sollte dieser nachfolgende Speicherversuch jedoch scheitern, wiederholen Sie die vorherigen Aktionen, und speichern Sie Ihre Änderungen erneut.