Cómo resolver conflictos de configuración de la aplicación

En un entorno compartido con varios usuarios administrativos, es posible que distintos usuarios administrativos intenten actualizaciones simultáneas de los mismos documentos de configuración de WebSphere Application Server. La información siguiente debe ayudarle a detectar y tratar las excepciones que pueden producirse si varios usuarios administrativos intentan actualizar simultáneamente los mismos documentos de configuración.

Siempre que inicie sesión en un cliente administrativo con la consola de administración o la herramienta wsadmin, se crea una sesión del espacio de trabajo exclusiva para realizar un seguimiento de los cambios de configuración que se realicen. Con cada sesión del espacio de trabajo se asocia un directorio temporal del espacio de trabajo. Este directorio se utiliza para almacenar todos los archivos de configuración que modifique durante una sesión de inicio de sesión. Los archivos de este directorio inicialmente se extraen del repositorio de configuración de la célula, y los cambios sólo existen en las copias del espacio de trabajo de estos archivos hasta que se guarden los cambios. Cuando se guarden los cambios, el entorno de ejecución de gestión de configuración se asegura de que los archivos de configuración modificados no los ha modificado y guardado otro usuario y, a continuación, vuelve a copiar los archivos modificados desde el directorio del espacio de trabajo en el repositorio maestro.

Siempre que sean sesiones del espacio de trabajo distintas las que modifiquen archivos de configuración diferentes, no habrá ningún conflicto al guardar los cambios. Sin embargo, si varias sesiones del espacio de trabajo modifican los mismos archivos de configuración, se producirá un conflicto al guardar los cambios, y en el repositorio de configuración de la célula sólo se reflejarán los cambios hechos en la primera sesión del espacio de trabajo. Cuando los usuarios posteriores intenten guardar los cambios realizados en los mismos archivos de configuración, recibirán una excepción de conflicto al guardarlos.

Con respecto al despliegue de aplicaciones, se hace una disposición especial para soportar el despliegue simultáneo de las aplicaciones. El despliegue de aplicaciones iniciado por diferentes sesiones de espacios de trabajo puede modificar el mismo archivo serverindex.xml. En esta situación, el tiempo de ejecución de la gestión de la configuración utiliza un algoritmo de fusión para el archivo serverindex.xml que permite:
  • El despliegue simultáneo de aplicaciones diferentes en distintos servidores de aplicaciones o en distintos clústeres de servidores de aplicaciones.
  • El despliegue simultáneo de aplicaciones diferentes en el mismo servidor de aplicaciones o en el mismo clúster de servidores de aplicaciones.

Normalmente, los casos de despliegue de aplicaciones concurrentes o paralelas se ejecutan de forma segura sin ningún esfuerzo adicional por parte del administrador del sistema. No obstante, hay algunos casos de despliegue de aplicaciones que el algoritmo de fusión serverindex.xml no es capaz de manejar. Por ejemplo, el algoritmo de fusión serverindex.xml no maneja los casos en que se están desplegando simultáneamente cambios en el archivo en la misma aplicación, el mismo clúster o en el mismo servidor. El algoritmo de fusión tampoco maneja los conflictos de configuración que se producen durante otras actividades de administración simultáneas que implican más que el despliegue de la aplicación.

La obtención de referencias de objetos necesarias y la construcción de la lista de parámetros

Puede tomar algunas medidas sencillas para asegurarse de que no se producirán conflictos de configuración, y para resolver los posibles conflictos que puedan producirse al utilizar la herramienta wsadmin. Los mandatos wsadmin que se utilizan para la detección y resolución de conflictos de configuración se basan en obtener una referencia al MBean ConfigService y, a continuación, invocar el método getConflictDocuments proporcionado por dicho MBean para determinar si los usuarios han realizado cambios contradictorios en un archivo durante la sesión del espacio de trabajo. Consulte el Javadoc del MBean ConfigService para obtener más información sobre este Mbean.

En el siguiente ejemplo de código se muestra cómo obtener las referencias de objeto necesarias y crear la lista de parámetros necesaria para invocar el método getConflictDocuments proporcionado por el MBean ConfigService:

// obtener referencia del MBean ConfigService

wsadmin>cs = AdminControl.queryNames('WebSphere:*,type=ConfigService')

// obtener ObjectName del MBean ConfigService

wsadmin>import javax.management as mgmt

wsadmin>csName=mgmt.ObjectName(cs)

// obtener objeto de sesión para la sesión actual del usuario administrativo

wsadmin>session=AdminConfig.getCurrentSession()

// manipular y preparar el objeto de sesión de administración y

// los argumentos de la operación de MBean para su uso

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)
Una vez inicializadas las variables y la lista de parámetros, se invoca el método getConflictDocuments. Si no hay conflictos, el método devuelve el siguiente mensaje:
// invocar el método getConflictDocuments de MBean para obtener una lista de conflictos con los documentos

wsadmin>AdminControl.invoke_jmx(csName,'getConflictDocuments', parms, ptype)
{}
wsadmin>
Si existen conflictos de configuración debido a los cambios realizados por otro usuario durante una sesión de trabajo, el método devuelve un mensaje parecido a este, que enumera los archivos XML que han cambiado:
Listado 3
wsadmin>AdminControl.invoke_jmx(csName,' getConflictDocuments', parms, ptype)
{['cells/nombre_célula/nodes/nombre_nodo/serverindex.xml',cells/nombre_célula/applications/
DefaultApplication.ear.ear/deltas/DefaultApplication.ear/delta-1278791909117', 
... <list abbreviated> ...}
   
   wsadmin>
En esta situación, puede emitir el mandato AdminConfig.reset() para descartar los cambios realizados desde la última vez que se ha emitido el mandato AdminConfig.save():
wsadmin>AdminConfig.reset()

Aunque llame al método getConflictDocuments antes de guardar los cambios y vea que no hay ningún documento en conflicto, no hay ninguna garantía de que las modificaciones se guarden correctamente, incluso si el mandato AdminConfig.save() se emite inmediatamente ya que otras sesiones pueden haber modificado los mismos archivos de configuración entre la llamada al método getConflictDocuments y la llamada al mandato AdminConfig.save().

Cuando la operación de guardan los cambios en el repositorio maestro la tarea no es correcta, se obtiene una excepción ConfigServiceException que es parecida a esta:

WASX7015E: Excepción al ejecutar el mandato: "AdminConfig.save()"; información de excepción:
com.ibm.websphere.management.exception.ConfigServiceException 
java.security.PrivilegedActionException: 
java.security.PrivilegedActionException: 
com.ibm.ws.sm.workspace.WorkSpaceException: RepositoryException
Si recibe una excepción de conflicto al guardar los cambios:
  1. Utilice el método getConflictDocuments para determinar qué archivos de configuración ya se han guardado por otro usuario.
  2. Emita el mandato AdminConfig.reset() para descartar los cambios.
  3. Después de descartar los cambios, puede volver a aplicarlos en los archivos de configuración apropiados y emitir el mandato AdminConfig.save() para guardar los cambios.

Es probable que el intento posterior de guardar los cambios tenga éxito, porque no es habitual experimentar varios conflictos al guardar durante la misma sesión. Sin embargo, si este intento posterior de guardar los cambios tampoco tiene éxito, repita las acciones anteriores, y vuelva a guardar los cambios.


Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rrun_app_config_conflicts
File name: rrun_app_config_conflicts.html