Академический Документы
Профессиональный Документы
Культура Документы
del ciclo de vida de los componentes, como se deben disear y cuales son las ventajas y desventajas. Contenido: Alcance general del ciclo de vida del Componente EAServer Componentes stateful y stateless El instance pooling
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Ciclo de Vida de los Componentes | 2 Manejando el comportamiento de los componentes PowerBuilder provee un ideal ambiente de desarrollo para construir los componentes EAServer. Antes de tomar ventajas del desarrollo en PowerBuilder, es importante primero comprender como el servidor Jaguar maneja los componentes y las instancias de los componentes cuando son requeridos. Los Componentes EAServer EAServer controla todos los componentes usando las propiedades especificadas para el componente en el Repositorio de EAServer. El ciclo de vida de una instancia de un componente EAServer es manejado independientemente del lenguaje o modelo de componente en el cual fue escrito. El ciclo de vida del componente EAServer determina cuando y como las instancias son creadas, llamados por los clientes y destruidas. El ciclo de vida (life-cycle) del componente EAServer Un componente EAServer puede tener uno de estos estados en el servidor Jaguar, tal como se muestra en la figura 5.1. Figura 5.1 El ciclo de vida del componente EAServer
Eventos del ciclo de vida de componentes EAServer Un componente puede implementar los eventos del ciclo de vida de EAServer, a continuacin se detallan estos eventos: Constructor Activate Deactivate CanBePooled Destructor
Constructor El evento Constructor es invocado cuando el componente es inicialmente creado (primer mtodo llamado), este evento es estndar para cualquier custom class user object (CCUO). Activate El evento Activate es invocado cuando el componente es ligado al cliente y es usado para inicializar los valores de las variables de instancias.
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Deactivate El evento Deactivate es invocado cuando el componente es desligado del cliente y es usado para liberar recursos. CanBePooled El evento CanBePooled es invocado justo despus del evento Deactivate es invocado para determinar si la instancia puede ser reusada, si se indica el valor de retorno 1 es reusado, el valor por defecto es 0 que no permite ser reusado al objeto, este Evento solo ser activado cuando la opcin instance pooling es desactivada. Destructor El evento Destructor es invocado cuando el componente es destruido, este evento es estndar para cualquier custom class user object (CCUO). NOTA: Cuando se crea un componente EAServer con el Wizard, te genera los eventos Constructor, Destructor, Activate y Deactivate, el evento CanBePooled debe ser adicionado manualmente (con el event ID pbm_component_canbepooled) Figura 5.2 Eventos del Ciclo de Vida
Diseando los componentes Los componentes pueden ser diseados como: Stateful Stateless
Componente Stateful Los componentes stateful guardan informacin en las variables de instancia entre llamadas de mtodos. La instancia del componente no es desactivado entre llamadas de mtodos y permanece ligado a una sesin cliente. La mayora de lectores tendrn una experiencia construyendo este tipo de componentes, desde que estos objetos fueron desarrollados para aplicaciones cliente/servidor y Distributed PowerBuilder son por defecto stateful. Los componentes stateful son fciles de implementar porque ellos guardan valores entre llamadas de mtodos, permitiendo a la informacin ser acumulada por muchas llamadas a mtodos. Usando este tipo de componentes no ayuda al servidor a estar libre porque los recursos del servidor son sostenidos por las conexiones cliente, aunque ellos no estn en uso. Una conexin cliente puede invocar dos o ms llamadas a mtodos de una instancia de componente, pero puede permitir una cantidad significante de tiempo entre llamadas de
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Ciclo de Vida de los Componentes | 4 mtodos. El tiempo entre llamadas de mtodos no maximiza el uso de recursos del servidor si la instancia del componente no est en uso pero permanecer activo y ligado a una sesin cliente. Esto amarra los recursos del servidor y deja con la opcin para un Memory leak del EAServer. Los componentes Stateful deben de ser desactivados por la aplicacin llamando a mtodos que invoquen a los transaction primitive. Tambin es importante sealar que el componente stateful pierde el estado y es desactivado cuando una transaccin implcita manejada por el servidor Jaguar ha sido completada. Debido a esto, puede ser necesario desarrollar objetos que soporten transacciones como los stateless. Configurando un componente para ser stateful El solo requerir configurar para crear un componente stateful requiere deshabilitar la propiedad Automatic demarcation/deactivation. Hay, sin embargo, recomendaciones de configuraciones de los objetos stateful para mantener los estados entre llamadas de los mtodos y transacciones : Poner la propiedad Automatic demarcation/deactivation desactivada Poner la propiedad de transaction en Not supported Crear un mtodo of_deactivate para permitir al cliente desactivar el componente. Poner la propiedad del instance timeout en cero
Las dos ltimas recomendaciones permiten al componente stateful ser desactivado y as reducir la posibilidad del Memory leak del EAServer. Un ejemplo de un componente stateful En esta seccin vamos a trabajar con un componente stateful muy simple que permite al usuario ingresar valores y asignarlos con una llamada a un mtodo, y recuperar el valor con una segunda llamada a otro mtodo. Debemos primero abrir el workspace techera5.pbw que se encuentra en el directorio c:\techera\capitulo5, este workspace contiene dos targets: operaciones_servidor.pbt y operaciones.pbt, una vez abierto este workspace debemos de verificar el objeto n_operaciones_ciclo en el target operaciones_servidor.pbt, y debemos de revisar el objeto project p_operaciones_servidor, en la opcin de propiedades en el tab Components debemos de desactivar la opcin Automatic demarcation/deactivation y la opcin Support instance pooling (figura 5.3). Figura 5.3 Propiedades del objeto project p_operaciones_ciclo
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Debemos de abrir el objeto n_operaciones_ciclo, y debemos de verificar que las variables de instancias que se indican abajo, figuren en la opcin Declare Instance. Protected: integer integer ErrorLogging TransactionServer ii_valor1 ii_valor2 iel_jag its_jag
Nota: El objeto ErrorLogging provee habilidad para escribir mensajes al archivo log usado, como el archivo log del servidor Jaguar para el EAServer o el archivo log del sistema Operativo, este objeto tiene una funcin llamada log(). El componente n_operaciones_ciclo debe tener tres funciones: of_valores, of_calculo, y of_desactivar. La funcin of_desactivar debe ser usado para desactivar la instancia del componente. La funcin of_valores permite a la aplicacin cliente pasar los valores al componente y almacenarla en las variables de instancia. El cdigo para esta funcin es listado abajo : //of_valores //argument : il_valor1 il_valor2 RETURN 1 La funcin of_calculo permite a la aplicacin cliente recuperar los valores del componente. El cdigo para esta funcin es mostrada abajo : // of_calculo //argumento : (reference) string as_operador long ll_resultado CHOOSE Case as_operador Case + Il_resultado = ii_valor1 + ii_valor2 Case -
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
long long = =
Ciclo de Vida de los Componentes | 6 Il_resultado = ii_valor1 - ii_valor2 Case * Il_resultado = ii_valor1 * ii_valor2 Case / Il_resultado = ii_valor1 / ii_valor2 END CHOOSE RETURN Il_resultado Una vez revisado las funciones del objeto n_operaciones_ciclo, debemos de realizar el deploy en el objeto project para desplegar el componente al servidor Jaguar (el proceso de deploy se indic en el captulo 4). Nota: El servidor que viene configurado con el objeto project est direccionado al servidor techera, el lector tendr que cambiarlo por el nombre de su mquina, esto se realiza en las propiedades del objeto project p_operaciones_servidor en el tab EAServer Host. Ahora vamos a necesitar una aplicacin cliente para probar el componente, vamos a usar la ventana w_operaciones del target operaciones.pbt, tal como se muestra en la figura 5.4.(esta ventana es proveda por el autor). Figura 5.4 Interfaz de la aplicacin cliente
Este ejemplo es casi igual al que creamos en el captulo 4, y lo vamos a utilizar para poder probar los componentes stateful, en esta seccin lo nico que vamos a cambiar es la invocacin de los datos en el botn Valores, el cual se encargar de invocar al mtodo of_valores, y luego presionaremos el botn Procesar que se encargar de realizar el proceso en el servidor. Ejecutando el ejemplo Antes de ejecutar la aplicacin cliente, inicializar el Jaguar Manager y abrir el Runtime Monitor para el componente n_operaciones_ciclo (El Runtime Monitor se encuentra dentro del servidor Jaguar, esto se activa haciendo click y luego buscar el componente en el flder Packages dentro de operaciones). Una vez que el Runtime Monitor es activado, ahora debemos de revisr el objeto Connection n_connect y en la funcin of_getconnectioninfo() debemos verificar que est apuntando a nuestro servidor (en el caso del lector ser el nombre de su mquina o servidor EAServer, sino realiza esto recibir un mensaje de que no se pudo conectar al servidor), luego ejecutar la aplicacin, ingresar los valores a los campos, luego presionar el botn de Conectarse y el de Valores, cuando este botn es presionado, el primer mtodo en el componente n_operaciones_ciclo es llamado. Esto crea la instancia del componente y enlaza a la sesin cliente. Los valores son pasados a la funcin y estos valores son almacenados en las variables de instancia en el componente. La figura 5.5
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Ciclo de Vida de los Componentes | 7 muestra la llamada a la funcin of_valores y tambin muestra al componente como est activo y ligado a una sesin cliente. Figura 5.5 El Runtime monitor despus de presionar el botn Valores
Note que el componente permanece activo incluso despus de que el mtodo complet el proceso. Esto es indicado por que el valor del Instances Active permanece fijo en uno(1.0). la figura 5.6 ilustra como se ve el servidor Jaguar donde el componente n_operaciones_ciclo es ligado a una sesin cliente. Desde que el componente es stateful, esto permanece ligado a una sesin cliente y la informacin que es almacenada en las variables de instancia ii_valor1 y ii_valor2 guardan estos valores. Figura 5.6 Un componente stateful en el servidor Jaguar
Cuando el botn Procesar es presionado, la funcin of_calculo es llamado y el valor del Method Invocations es incrementado (vea la figura 5.7). los valores que fueron almacenados en las variables de instancia en la llamada de la funcin of_valores son retornados. Los valores de las variables de instancia estn disponibles porque el componente es stateful y ha permanecido activo y asignado a una sesin cliente entre las dos llamadas de los mtodos. Figura 5.7 El Runtime monitor despus de presionar el botn Procesar
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Note otra vez que el componente permanece activo despus de que el mtodo complet el proceso como es indicado por el valor del Instances Active que permanece en uno (1.0). Luego presione el botn Desactivar para desactivar la instancia del componente esto hace la llamada a la funcin of_desactivar porque el instance pooling no es soportado. El Runtime Monitor confirma esto indicando que la instancia no est activa por un largo tiempo y no es pooled (vea la figura 5.8).
Figura 5.8 El Runtime monitor despus de cerrar el window
La figura 5.9 muestra que est pasando en el kernel del servidor Jaguar despus de que el componente es desactivado y destruido.
Figura 5.9 Desactivacin de un componente stateful
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Ciclo de Vida de los Componentes | 9 Componentes Stateless Un componente que es desactivado despus de cada llamada a un mtodo es stateless. La informacin entre las llamadas de los mtodos no es mantenida por el componente. Si debe conservarse la informacin entre las llamadas de los mtodos, la informacin debe ser pasada a travs de los mtodos o el componente necesita reinicializar el estado cargando los valores anteriores en las variables. Valores que son sostenidos entre llamada de mtodos deben guardarse en un cache persistente. Ejemplos de cache persistente incluyen objetos shared, una base de datos, y un archivo. Los componentes stateless son recomendados para ayudar a la performance del servidor para reducir el consumo de los recursos del servidor. Cuando los componentes stateless son usados junto con el instance pooling, una instancia de un componente puede ser reusado por muchas sesiones de clientes. Esto permite maximizar los recursos del servidor, desde que las instancias de los componentes idle no son sostenidas por las sesiones clientes. esto incrementa la escalabilidad del servidor Jaguar. Configurando un componente para ser stateless La nica configuracin necesaria para crear un componente stateless es habilitar la propiedad Automatic demarcaction/deactivation del objeto project p_operaciones_servidor. Cuando esta propiedad es habilitada, el componente es automticamente desactivado despus de cada llamada a un mtodo.
Un componente PowerBuilder puede ser stateless habilitando la opcin Automatic demarcation/deactivation en el objeto project, antes de hacer deploy (vea la figura 5.10).
Figura 5.10 El proyecto del componente EAServer
Nota: Para acceder a esta opcin, debemos primero estar en el painter del objeto project y luego presionar el icono Properties del toolbar de PowerBuilder. Otra forma para poner un componente EAServer como stateless, es abrir el Jaguar Manager y encontrar el componente dentro del package en el cual fue instalado. Abrir la ventana de dilogo de las propiedades del componente para resaltar el nombre del componente y presionar el botn derecho del mouse (vea la figura 5.11). seleccionar la opcin de Component Properties del men popup y presionar el tab Transactions ilustrado en la figura 5.11. activar la opcin Automatic demarcation/deactivation y presionar Aceptar para grabar. Para asegurarse que esta opcin toma efecto, encontrar el nombre del servidor dentro del
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Ciclo de Vida de los Componentes | 10 flder Servers en el Jaguar Manager y refrescar el servidor, para seleccionar refrescar en el men popup, presione el botn derecho en el nombre. Figura 5.11 Poniendo un componente como stateless
Un componente EAServer tambin puede ser implementado como un componente stateless para llamar a cada transaction primitive SetComplete o SetAbort al final de cada funcin. Esto fuerza al desarrollador, sin embargo, recordar codificar una de estas llamadas de funciones al final de cada funcin. Implementando un componente stateless sin usar la opcin Automatic demarcation/deactivation tambin hace esto difcil para determinar si un componente es stateless o no en el Jaguar Manager.
Haciendo los componentes stateless Ahora debemos de ejecutar el ltimo ejemplo usando un componente stateless. Poner el componente EAServer n_operaciones_ciclo, para ejecutarse como un componente stateless (activar la opcin Automatic demarcation/deactivation en el objeto project). Ahora ejecute el ejemplo. Lo primero es ingresar los valores a los campos y luego presionar el botn Conectarse, despus presionar el botn Valores, el primer mtodo en el componente n_operaciones_ciclo es llamado. Esto crea la instancia de un componente y es ligado a una sesin cliente. Los valores ingresados en los sigle-line edit son pasados a la funcin y este valor es almacenado en las variables de instancia en el componente. Despus de llamar a la funcin of_valores y luego que es completada, el componente es desactivado y no es ligado a una sesin cliente (vea la figura 5.12). Desde que no se soporta el instance pooling, la instancia del componente es destruida (esto se muestra en la figura 5.9). Figura 5.12 El Runtime monitor despus de presionar el botn Valores
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Cuando el botn Procesar es presionado, una nueva instancia del componente, n_operaciones_ciclo, es creado y ligado a una sesin cliente como se muestra en la figura 5.13.
Figura 5.13 La segunda llamada al mtodo del componente stateless
Sin embargo, la llamada a la funcin of_calculo retorna nulo porque los valores que fueron puestos por la llamada a la funcin of_valores fue perdida cuando la primera instancia fue destruida. Se puede sealar otra vez que el cliente puede llamar a las funciones of_valores y of_calculo usando una sola referencia al objeto proxy. La habilidad del cliente para llamar a los mtodos en el componente n_operaciones_ciclo no fue afectado por el stateless. El servidor Jaguar maneja la creacin y activacin del componente para la llamada transparente de cada mtodo. La figura 5.14 muestra que despus de que la llamada a la funcin of_calculo se completa, el componente tambin es desactivado y destruido.
Figura 5.14 El Runtime monitor despus de que el botn Procesar es presionado
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.
Manejando estados para los componentes stateless Los componentes stateless son desactivados despus de cada llamada a un mtodo. Cualquier informacin que es almacenada, calculada, o recuperada como resultado de la llamada de un mtodo es perdida cuando el proceso de la funcin es completada. Puede requerirse informacin de una llamada de la funcin, sin embargo, puede requerirse en las llamadas subsecuentes de los mtodos. Cuando desarrollamos componentes stateless, es a menudo importante manejar la informacin entre las llamadas de los mtodos. Para asegurarse que la informacin necesita de la llamada de un mtodo para el siguiente componente stateless est habilitado, existen muchas estrategias que pueden ser empleadas. Las primeras tcnicas son obligar a la aplicacin cliente para manejar los estados pasando todos los valores pertinentes atrs a la aplicacin cliente. Los valores pueden enviarse al servidor como argumentos de funcin cuando el siguiente mtodo es invocado. Esta tcnica es una de las ms fciles de implementar, pero tiene varias desventajas. El primero es el incremento en el uso de la banda de red debido a pasar grandes cantidades de informacin de un lado a otro entre el servidor y la aplicacin cliente. La red entre el cliente y el servidor es tpicamente una WAN, especialmente para aplicaciones de internet. Estos son los ms frecuentes pero hay mayores distancias y trfico que estos. Esto tambin requiere que las funciones de los componentes acepten los argumentos para los estados de los datos. Cuando un componente requiere informacin adicional, la funcin debe ser modificada para aceptar nuevos argumentos, que tambin requiere un cambio en la aplicacin cliente, algo que ser evitado en una arquitectura distribuida. La segunda tcnica es almacenar los valores de paso para un almacenamiento persistente facilitado en el servidor. Es a menudo en una base de datos, pero tambin podran usarse los archivos. Esta tcnica limita el trfico de la red entre el cliente y el servidor de aplicaciones, pero incrementa el nmero de hits en el servidor de la base de datos. Esto tambin puede requerir tablas especiales para los estados que deben ser construidos y mantenidos como parte de la base de datos. Componentes Stateful Versus Stateless Es importante comprender la diferencia entre los componentes stateless y stateful como se muestra en la tabla 5.1 y su impacto en el desarrollo. La habilidad para almacenar informacin entre las llamadas de los mtodos es frecuentemente tomada para aplicaciones cliente/servidor o DPB. En una aplicacin distribuida como el EAServer o Web, los objetos stateless son importantes para proveer un estado especial de escalabilidad y el manejo de los procesos que se debe requerir para manejar el almacenamiento de informacin entre llamada de mtodos. Tabla 5.1 Componentes Stateful Versus Stateless Stateful Stateless
_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.