PDA

Ver la Versión Completa : Bloquear varias ejecuciones Job - Diferentes servidores


Teotl
05/10/14, 17:50:58
Hola, buen día.

Tengo un problema en un requerimiento que estamos realizando, pidieron que un programa, el cual se ejecuta en fondo (por medio de un job), solo pueda ser ejecutado una sola vez por centro, por ejemplo:
solo puede ejecutarse un job para el centro A, y uno para el B, si se intenta ejecutar otro job para el centro A o B, este regresa un mensaje indicando que aun no termina un job para dicho centro.

Todo esto hasta aqui, lo realizamos con la función "Import / Export TO/FROM SHARED MEMORY ".

El detalle esta es que, nos informaron, que tambien ellos realizan las ejecuciones en diferentes servidores.
Ejemplo:
Ejecutan un Job para el centro A en servidor S1, mandan otro Job para el centro A en servidor S1, manda error el segundo Job.
(Aun no termina el primer job para centro A en servidor S1) Ejecutan un Job para el centro A en Servidor S2, permite la ejecución.

Esto me imagino por que la función "Import / Export TO/FROM SHARED MEMORY" no ha de funcionar en caso de diferentes servidores.

Ahora, mi duda es, que no tengo una idea clara de como poder darle esto una solución. Se me ocurre crear una tabla z y que se modifique, al estar bloqueada por el primer job en el servidor S1, el segundo job en el servidor S2 no trabajaría por el bloqueo de la tabla z, pero igual, no tengo claro esta parte.

Si alguien me puede dar alguna idea, se lo agradeceria mucho, Saludos, buen día.

Teotl
06/10/14, 17:15:20
Hola, perdón por el doble post, pero estaba la documentación ABAP, y esta en el caso de IMPORT/EXPORT / SHARED MEMORY or SHARED BUFFER indica lo siguiente.

"If SHARED MEMORY or SHARED BUFFER is specified, the data cluster is stored in cross-transaction application buffers of the shared memory on the application server. All programs of the same application server have access to these buffers. "

Ahora la duda crece mas, se supone que esto lo soporta, por el momento, voy a solicitar acceso a los ambientes de calidad en diferentes servidores y debugear.

Si alguien sabe la razón o alguna otra idea para dar solución se los agradeceria, saludos.

sconoredhot
09/10/14, 13:24:45
Hola, yo lo haria mas sencillo.
Cambiaria los nombres de los jobs que estas creando a algo asi como:

JOB_CENTRO1_XXX
JOB_CENTRO2_XXX

Luego, dentro de tu programa, hago un select a la tabla TBTCO
por jobname = JOB_CENTRO1_%* con los status R o S (job corriendo, o por correr), y si el select es exitoso, no lanzar un nuevo job.

Si no, cuando llamas a la FM job_close, se pueden hacer cosas con los eventos, de manera que espere a que termine el job para ejecutar el siguiente (jobs en cadena).

Saludos.