Detección de bucles infinitos en las instancias de servicios y procesos

Hay un conjunto de propiedades de detección de bucles que puede utilizar para detectar y manejar bucles infinitos en servicios e instancias de proceso.

En el archivo 99Local.xml, hay una propiedad loop-detection-duration para el motor de servicios y otra para el motor de definiciones de proceso de negocio (BPD). El valor de cada propiedad establece la duración máxima esperada de la ejecución de un servicio o una instancia de BPD en segundos o un valor de -1 para una duración ilimitada. Los dos motores difieren en lo que sucede cuando el servicio o instancia de BPD supera la duración máxima:
  • Si un servicio se ejecuta durante más tiempo, el motor de servicios registra un mensaje en SystemOut.log o detiene el servicio. La propiedad loop-detection-exception determina qué acción realiza el motor. Si se establece en true, el motor detiene el servicio y genera una excepción. De forma predeterminada, esta propiedad está establecida en false.

    La excepción se utiliza para notificar a la instancia de BPD que contiene el servicio que el motor de servicios se ha detenido.

  • Si una instancia de BPD se ejecuta durante más tiempo, el motor de BPD registra un mensaje en SystemOut.log. Un administrador puede utilizar esta información para suspender o manejar la instancia.
Importante: al igual que en otros cambios de personalización, no modifique directamente el archivo 99Local.xml. En su lugar, utilice el archivo 100Custom.xml adecuado de la topología para alterar temporalmente los valores predeterminados. Si desea más información, consulte Creación de un archivo de configuración 100Custom.xml. Para obtener más información sobre la ubicación del archivo 100Custom.xml que debe actualizarse, consulte el tema Ubicación de archivos de configuración 100Custom.
En el archivo 99Local.xml, las propiedades para detectar bucles infinitos son similares a las de los ejemplos siguientes:
<service-engine>
	<loop-detection-duration>120</loop-detection-duration>
	<loop-detection-exception>false</loop-detection-exception>
</service-engine>
<bpd-engine>
	<loop-detection-duration>60</loop-detection-duration>
</bpd-engine>
Si los servicios no se encuentran en un bucle infinito, pero los mensajes siguientes se encuentran en SystemOut.log, considere la posibilidad de modificar los valores de loop-detection-duration para el motor de servicios:
  • CWLLG0872W: El servicio '{0}' se ha ejecutado durante {1} segundos y puede estar en un bucle infinito.
  • CWLLG0873W: El servicio '{0}' para la instancia {1} se ha ejecutado durante {2} segundos y puede estar en un bucle infinito.
  • CWLLG0874E: El servicio '{0}' se ha terminado después de {1} segundos porque puede estar en un bucle infinito.
  • CWLLG0875E: El servicio '{0}' para la instancia {1} se ha terminado después de {2} segundos porque puede estar en un bucle infinito.

Si las instancias de BPD no están en un bucle infinito, pero el mensaje siguiente se encuentra en el archivo SystemOut.log, considere la posibilidad de modificar los valores de loop-detection-duration para el motor de BPD: CWLLG0871W: La instancia de BPD (definición de proceso de negocio) {0} se ha ejecutado durante {1} segundos y puede estar en un bucle infinito.

Por ejemplo, para modificar el motor de servicios para que detenga el servicio después de cuatro minutos (240 segundos), añada el código siguiente al archivo 100Custom.xml adecuado:

<server>
	<service-engine>
		<loop-detection-duration merge="replace">240</loop-detection-duration>
		<loop-detection-exception merge="replace">true</loop-detection-exception>
	</service-engine>
</server>