Вы находитесь на странице: 1из 19

Ciclo de Vida de los Componentes | 1 Captulo 5 El ciclo de vida del Componente EAServer En este captulo vamos a tratar acerca

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.

Ciclo de Vida de los Componentes | 3

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.

Ciclo de Vida de los Componentes | 5

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 = =

al_valor1 al_valor2 as_valor1 as_valor2

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.

Ciclo de Vida de los Componentes | 8

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.

Ciclo de Vida de los Componentes | 11

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.

Ciclo de Vida de los Componentes | 12

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.

Ciclo de Vida de los Componentes | 13

Las intancias son ligadas al cliente por periodos largos el servidor tiene instanciado ms instancias las instancias son reusadas muy poco el servidor requiere ms recursos, limitando la escalabilidad

Las instancias son ligados a los clientes por periodos cortos el servidor tiene instanciados menos instancias las instancias son ms reusados el servidor requiere de pocos recursos

Es recomendado el uso de componentes stateless, porque no consumen muchos recursos del servidor como se detalla en la lista de comparacin. Desactivacin Temprana Un componente que soporta la desactivacin temprana es un componente hbrido que es parte stateful y parte stateless. La desactivacin temprana es usada para describir componentes que entran en la fase de desactivacin despus de la llamada de un mtodo por la invocacin de alguna funcin del transaction primitive, que se muestran en la tabla 5.2. Tabla 5.2 Funciones primitives del TransactionServer Funcin SetComplete( ) SetAbort( ) EnableCommit( ) DisableCommit( ) Accin Desactiva el componente Desactiva el componente No Desactiva el componente No Desactiva el componente

Nota: estas funciones son cubiertas en el captulo 8. La fcil desactivacin puede ser usada para implementar un componente stateless, pero es ms fcil de hacer esto usando la opcin Automatic demarcation/deactivation que codificar la llamada al SetComplete o a un SetAbort en cada mtodo. La fcil desactivacin es usada para componentes que realizan procesos o transacciones con muchos mtodos pero pueden ser desactivados despus de que el proceso es finalizado. Por ejemplo, en el ejemplo aplicacin usando el componente EAServer n_operaciones_ciclo se debera desactivar el componente despus de llamar a la funcin of_calculo despus de realizar el proceso. Para desactivar la instancia despus de la invocacin de la funcin of_calculo, adicionar la llamada a la funcin of_desactivar como se muestra en el siguiente cdigo : // of_calculo //argumento : (reference) string as_operador CHOOSE Case as_operador Case + Il_resultado = ii_valor1 + ii_valor2 Case - Il_resultado = ii_valor1 - ii_valor2 Case * Il_resultado = ii_valor1 * ii_valor2 Case / Il_resultado = ii_valor1 / ii_valor2 END CHOOSE this.of_desactivar() RETURN Il_resultado
_____________________________________________________________________________________________ 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 | 14 Retornando al Runtime Monitor del EAServer, vea que despus de presionar el botn Valores la instancia del componente EAServer es desactivado despus de que la funcin of_valores ha finalizado (vea la figura 5.15). Figura 5.15 El Runtime monitor despus de presionar el botn Valores

Despus de presionar el botn Procesar, la instancia del componente EAServer es desactivado (vea la figura 5.16). una vista general del servidor Jaguar es mostrada en la figura 5.10, las llamadas subsiguientes a la funcin of_calculo deberan retornar nulo.
Figura 5.16 El Runtime monitor despus de presionar el botn Procesar

La fcil desactivacin puede ser usada para componentes que necesitan tener muchas llamadas a mtodos en sucesin, mientras mantienen su estado o una transaccin para completar una tarea. Estos mtodos deberan ser llamados tan rpidamente para que la instancia del componente pueda liberarse. Tambin se puede poner la propiedad del instance timeout property para que un componente use la fcil desactivacin, para prevenir el memory leaks del EAServer.

_____________________________________________________________________________________________ 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 | 15 Instance pooling La opcin Instance pooling ayuda a reducir el gasto de recursos en el servidor eliminando la necesidad de crear una nueva instancia del objeto, siempre que un objeto se use, se permite reusar las instancias de los componentes, esto es similar al pool de conexiones de la base de datos. Sin el instance pooling, una instancia de un componente es destruida luego de ser desactivada. Cuando el instance pooling es soportado, la instancia es movida al pool en lugar de ser removida de la memoria. Cuando se usa un componente stateless, esto puede mejorar la performance desde que los objetos stateless son activados y desactivados despus de cada llamada a un mtodo. Si la instancia del objeto siempre es destruida despus de la desactivacin, una nueva instancia debe ser creada en memoria para cada llamada de un mtodo. Esto es importante para notar que el instance pooling determina como los componentes son manejados despus de que estos son desactivados. El Instance pooling, sin embargo, no determina si un objeto es stateless o no. Se recomienda que soporte el instance pooling para ayudar a incrementar la escalabilidad. Soportando el instance pooling

Los componentes EAServer pueden soportar el instance pooling de una de estas dos maneras. La manera ms fcil de soportar el instance pooling en un componente EAServer es habilitar la opcin instance pooling. Cuando esta opcin es habilitada, el componente automticamente es pooled despus de que la instancia del componente es desactivada. Un componente PowerBuilder puede ser configurado para soportar el instance pooling habilitando la opcin instance pooling en el objeto project antes de desplegar el objeto. esta opcin en el proyecto debe habilitar la opcin pooling como se muestra en la figura 5.17, cuando se ha hecho deploy al componente.
Figura 5.17 Habilitando la opcin instance pooling

Otra manera para habilitar el componente EAServer para soportar el instance pooling, es abrir el Jaguar Manager y encontrar el componente dentro del package donde ha sido
_____________________________________________________________________________________________ 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 | 16 instalado. Abrir la ventana de dilogo de las propiedades del componente resaltando el nombre del componente y presionando el botn derecho con el mouse. Seleccione la opcin Component Properties... del men popup y haga click en el tab Instance (vea la figura 5.18). Activar la opcin Pooling y presionar Aceptar para grabar. Para asegurarse que esta opcin tom efecto, encontrar el nombre del servidor dentro del flder de Servers en el Jaguar Manager, y refrescar el servidor. Figura 5.18 El instance pooling habilitado en el Jaguar Manager

Cuando la opcin instance pooling es soportado, las instancias de un componente son siempre reusadas y el servidor Jaguar no llama al evento CanBePooled despus de que el componente ha sido desactivado. si la opcin instance pooling no es soportada, el valor de retorno del evento CanBePooled determina si la instancia del componente debe ser reusada despus de la desactivacin. Un valor de retorno de uno (1) causar que la instancia ser reusada, y un valor de retorno cero (0) causar que la instancia sea destruida. Cuando el evento CanBePooled no ha sido escrito, la instancia de un componente no ser reusada, este evento es mostrado en la figura 5.19.
Figura 5.19 El evento CanBePooled

Tcnicas para construir y reusar componentes Un componente que soporte el instance pooling debe poder inicializarse cuando se activa y limpiarse cuando se desactive. Esto asegura que la siguiente sesin cliente que recibe la instancia no tiene datos de otras llamadas de mtodos por un cliente diferente.
_____________________________________________________________________________________________ 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 | 17

En el evento Active es donde el desarrollador debera poner las rutinas de inicializacin, este evento es llamado para inicializar la instancia. Todo el cdigo para limpiar el componente debera ser ubicado en el evento Deactivate. Este cdigo podra normalmente ser ubicado en el evento Destructor, pero este evento es llamado cuando el objeto es destruido, el componente no debe ser limpiado despus de ser asignado a una nueva sesin cliente. El cdigo que tpicamente puede ser encontrado en el evento Activate incluye la creacin de un objeto TransactionServer y una conexin a una base de datos. El evento Deactivate tpicamente limpia los valores de todas las variables de instancia, destruye cualquier objeto creado por el componente, destruye el objeto TransactionServer, y hace la desconexin de la base de datos. Propiedad Instance timeout La propiedad del componente Instance Timeout es usado para especificar cuanto tiempo una instancia de un componente estar activo y ligado a una sesin cliente sin una llamada a un mtodo antes de ser desactivada por el servidor Jaguar. Cuando la propiedad Instance Timeout se pone a un valor mayor que cero, asegura la desactivacin de un componente stateful y previene el memory leaks del Jaguar. Figura 5.31 Configurando la propiedad timeout del componente

La configuracin del Instance Timeout puede ser puesta en el proyecto del componente EAServer poniendo el timeout del componente mayor que cero, como se muestra en la figura 5.31. La configuracin del Instance Timeout activa la propiedad timeout, com.sybase.jaguar.component.tx_timeout. La propiedad Instance Timeout de un componente puede tambin ser puesta en el Jaguar Manager. Para poner la propiedad Instance Timeout de un componente, abrir el Jaguar Manager y presionar el flder Servers. Expandir el flder Installed Packages y encontrar el package donde el componente ha sido instalado. Expandir el package y resaltar el nombre componente, como se muestra en la figura 5.32. Figura 5.32 Accediendo a un componente

_____________________________________________________________________________________________ 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 | 18

Presionar el botn derecho del mouse para acceder al men popup y seleccionar Component Properties... para abrir el dilogo de las propiedades del componente como se muestra en la figura 5.33. seleccionar el tab All properties y encontrar la propiedad del Instance Timeout. Com.sybase.jaguar.component.timeout Figura 5.33 Propiedades del componente: All Properties

Presionar el botn Modify para cambiar el valor. La ventana de dilogo del modify Property es mostrada en la figura 5.34. ingrese el valor del Instance Timeout, que es representada en segundos, y presione OK para grabar.
Figura 5.34 Modificando las propiedades del Instance Timeout

_____________________________________________________________________________________________ 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 | 19

Resumen Controlar el ciclo de vida de los componentes es un factor importante en el desarrollo de las aplicaciones distribuidas, esto nos permite tener una mejor performance en nuestra aplicacin, poder reusar los objetos que estn creados en memoria, el diseo de los componentes Stateless y Stateful, permiten hacer que nuestras aplicaciones puedan ahorrar el consumo de los recursos de nuestros servidores, asimismo las opciones del Instance Pooling y del Timeout nos dan la posibilidad de poder controlar la creacin y destruccin de nuestros objetos. El lector debe comprender que teniendo en cuenta el ciclo de vida podr tener mejores respuestas de sus aplicativos a desarrollar.

_____________________________________________________________________________________________ Derechos Reservados de TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines.

Вам также может понравиться