Procesos lanzados desde AS400

Obsydian, Cool:Plex, Advantage Plex, AllFusion Plex...

Moderadores: Jorge Ubeda, pacopicon

Procesos lanzados desde AS400

Notapor Adolfo » Lun Ene 16, 2006 1:47 pm

Hola,

me gustaría comentaros un problema que tenemos y como hemos planteado solucionarlo para ver si se os ocurre alguna alternativa o algún consejo.

Trabajamos con Plex 5.5 contra AS400.

El problema es que tenemos una serie de informes que obtenemos en excel que por el alto volumen de información que procesan tardan demasiado en maquinas clientes (en parte por los datos, en parte por las comunicaciones y en parte por el propio excel).

Entonces se nos ha ocurrido como posible solución para no tener a los usuarios entretenidos sacando listadosen hacer una especie de proceso Batch.

La alternativa que barajamos es la siguiente:

1. El usuario solicita un listado. Al hacer dicha solicitud desde la aplicación Plex crea un registro en un fichero de la base de datos.

2. Al crearse el registro se ejecuta un trigger que lanza un programa plex en una maquina servidor.

3. Esta máquina procesará el listado con los criterios que haya pedido el cliente.

4. Una vez finalizado lo enviará por correo al usuario.

La duda la tenemos con en el paso 2. En concreto nos gustaría eliminar el paso intermedio del AS400 por algún tipo de paso de mensajes entre las maquinas (la del usuario y la maquina servidor). La idea sería que a la maquina servidor le fueran llegando las tareas y las fuera encolando, procesandolas de una en una según orden de llegada (o caracteristicas del usuario).

Alguna sugerencia?

Estamos abiertos a cualquier comentario.
Adolfo
 
Mensajes: 27
Registrado: Lun Dic 05, 2005 5:47 pm
Ubicación: Madrid - España

Notapor pacopicon » Lun Ene 16, 2006 2:48 pm

Hola Adolfo:

Es que no he entendido muy bien cuál es tu problema. ¿Que inconvenientes tiene la solución que propones tú?. A ver si conociendo mejor el problema y los inconvenientes que conllevan la solución que tú propones te podemos ayudar.

Otra cosa que no entiendo es lo de "nos gustaría eliminar el paso intermedio del AS400"...¿Que es lo que quieres quitar del AS400?...porque he entendido que en el AS400 tiene que haber un programa que será el que procese los informes, no?.

Espero tu resupuesta,

Saludos
Paco Picón
www.metadata.es
pacopicon
 
Mensajes: 121
Registrado: Lun Oct 03, 2005 12:28 pm
Ubicación: Málaga - España

Notapor Adolfo » Lun Ene 16, 2006 3:29 pm

Efectivamente creo que me he explicado un poco mal.

A ver si ahora me sale mejor.

Alternativa inicial:

Código: Seleccionar todo
1. Los usuarios piden el listado desde su maquina (Maquina A). Al pedirlo se graba un registro en un fichero del AS400 (Maquina B).

2. Al grabarse el registro en el AS400 se ejecuta un trigger que lanza un programa en un Servidor Windows (Maquina C).

3. El programa en la Maquina C procesa el listado, y al terminar lo envía por mail a la Maquina A.


Los problemas que le vemos a la solución que hemos planteado son los siguientes:

Primero. Al lanzar el proceso en la Maquina C desde el AS400 debemos lanzar una aplicación completa que inicie sesión, recupere los datos, cree el excel, los envie y por ultimo se cierre). Si tuvieramos a 100 usuarios solicitando el mismo listado esto implicaría tener 100 ejecuciones de este programa en nuestra maquina C, lo que podría saturar en exceso el rendimiento.

Segundo. No queremos dejar un usuario y una contraseña en el ini del proceso que se ejecuta en la maquina C, por seguridad, pero si no lo hacemos no vemos ninguna posibilidad de ejecutar el proceso plex y que pueda leer del AS400.

Tercero. Si el usuario quisiera saber el estado de la tarea tendría que ponerse en contacto con el programa que se ejecuta en la maquina C de alguna forma, pero al poder haber mas de una ejecución del proceso en la maquina C se hace muy dificil dicha conexión.


Ante esto se nos había ocurrido una alternativa que dejase de lado el hecho de lanzar el proceso desde el AS400 a la máquina C. Consistiría en algo así:

Código: Seleccionar todo
1. Los usuarios piden el listado desde su maquina (Maquina A). Al pedirlo envía un mensaje a una "cola de listado" de la maquina C (servidor Windows).

2. Cuando llega el turno de la petición de listado dentro de la cola la Maquina C genera el listado solicitado y lo envia a la maquina A por mail.


De esta forma solucionariamos los problemas anteriores:

Primero: Sólo habría un proceso en ejecución en la maquina C, que actuaría como un gestor de informes, permitiendo asignar prioridades de ejecución según el tipo de listado y el usuario.

Segundo. No habría necesidad de almacenar usuarios y contraseñas, ya que el proceso estaría siempre en ejecución, y sería gestionado por los técnicos de sistemas.

Tercero. Para ver el estado de la tarea sólo habría que consultar el estado de la tarea en la maquina C, su posición en la cola, etc, siendo esta vez el acceso mas simple.

El problema que tenemos es que no se nos ocurre ninguna forma de montar la segunda opción usando exclusivamente plex, por lo que apelamos a vuestra experiencia por si nos podeis echar una mano.

Un saludo.
Adolfo.
Adolfo
 
Mensajes: 27
Registrado: Lun Dic 05, 2005 5:47 pm
Ubicación: Madrid - España

Notapor pacopicon » Lun Ene 16, 2006 4:58 pm

Bueno no sé si he acabado de entender el problema, así que te contesto lo que se me ocurre que puedas hacer, según he entendido.

En la máquina C podrías tener una pequeña tabla local, donde se van guardando las peticiones. La defines para poner usuario solicitante, estado del proceso, dirección de correo del solicitante, parámetros de selección (te haría falta una tabla para cada proceso distinto), y demás campos que consideréis oportunos.

Un usuario en una máquina A, ejecuta un programa Plex que lo que hace es insertar un registro en la tabla de la máquina C.

Un proceso de la máquina C, está constantemente comprobando esa tabla. Cuando encuentra una petición (la primera según el orden que establézcais) lanza el correspondiente programa en el AS400 (al mismo tiempo que actualiza el estado de ese proceso en la tabla local, para ponerlo en ejecución).

El proceso de la máquina C espera que termine el proceso que ha lanzado. Cuando termina actualiza el estado de la tabla para poner que ha finalizado (Ok o error según proceda). A continuación lee el siguiente registro de la tabla que esté en estado Pendiente de Procesar, y así sucesivamente.

En los clientes de las máquinas A, puedes montar unas ventanas de consulta a la BD local de la máquina C, para que puedan ver el estado de sus peticiones.

Sobre la obtención de la salida a Excel y el envío del correo electrónico, he supuesto que ya lo tenéis solucionado y por tanto no es objeto de esta pregunta.

Espero haber entendido tu problema y haberte ayudado.

Saludos
Paco Picón
www.metadata.es
pacopicon
 
Mensajes: 121
Registrado: Lun Oct 03, 2005 12:28 pm
Ubicación: Málaga - España

Notapor Adolfo » Lun Ene 16, 2006 6:06 pm

Ok, muchas gracias, lo has entendido perfectamente.

Lo que pasa es que el hecho de tener una tabla en local no se si me complica mas, pq implicaría montar una nueva base de datos, y no se si los de sistemas de mi empresa no me iban a odiar por ello.

Pero supongamos que esta tabla la hacemos en el AS400. En vez de consultar continuamente una tabla local consultaríamos una tabla en el AS400, con lo que el rendimiento bajaría un poco, aunque creo que sería asumible. De esta forma eliminaríamos los triggers qe proponía yo en la opción inicial. Por decirlo de alguna forma hariamos una mezcla.

De todas formas, de cara a hacer este "polling" a la tabla local (o la tabla del AS400): cual sería la forma mas efectiva para no saturar a la maquina C? Asociarlo con un Clock Tick y hacerlo cada X segundos?

Por probar alguna otra alternativa. Sabeis si es posible desde AS400 ejecutar un evento en una aplicación windows en otra maquina?

Si fuera factible podríamos provocar que al crear los datos el propio AS400 informara, a traves de un evento al programa que hay datos nuevos para procesar, con lo que no tendríamos que hacer el "polling" a la tabla desde el programa Windows. Aunque esto implica volver a los triggers de la idea inicial creo que estaría bien pues tendríamos una unica ejecucion del programa en la maquina C en vez de las "N" que nos salian en la primera opcion del proceso....

Muchas gracias a todos por ayudarme a pensar!
Adolfo
 
Mensajes: 27
Registrado: Lun Dic 05, 2005 5:47 pm
Ubicación: Madrid - España

Notapor MADCat » Jue Ene 19, 2006 9:22 am

No me he leido todos los mensajes a fondo, pero ¿y si eliminas el paso intermedio del AS400 utilizando Winsock? Yo no conozco mucho el tema, pero el otro dia cacharreando con el control me hice 2 programitas, uno que escucha y otro que envia y me llevo un par de horas. Tambien es verdad que yo solo mandaba cadenas de caracteres, pero el control te permite incluso enviar ficheros, por tanto hasta se podria eliminar el e-mail al usuario.
Te tendrias que montar dos programillas, uno para el usuario y otro para el servidor. Este último estaria permanentemente escuchando y cuando le llegase una peticion lanzaria el proceso que se le haya pedido.
Ya te digo que no conozco mucho el tema asi que desconozco hasta que punto es factible la solucion o no.
MADCat
 
Mensajes: 3
Registrado: Mié Dic 28, 2005 9:21 am

Notapor Adolfo » Jue Ene 19, 2006 10:01 am

Me parece tambien muy buena idea. Lo investigaré.

Gracias.
Adolfo
 
Mensajes: 27
Registrado: Lun Dic 05, 2005 5:47 pm
Ubicación: Madrid - España


Volver a Plex

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 6 invitados

cron