Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Capítulo 5
En este capítulo vamos a tratar acerca del ciclo de vida de los componentes, como se deben
diseñar y cuales son las ventajas y desventajas.
Contenido:
_____________________________________________________________________________________________
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
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.
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
• Constructor
• Activate
• Deactivate
• CanBePooled
• Destructor
Constructor
Activate
_____________________________________________________________________________________________
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
CanBePooled
El evento CanBePooled es invocado justo después 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 opción instance pooling es desactivada.
Destructor
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
Stateful
Stateless
Componente Stateful
Los componentes stateful guardan información en las variables de instancia entre llamadas
de métodos. La instancia del componente no es desactivado entre llamadas de métodos y
permanece ligado a una sesión cliente. La mayoría de lectores tendrán 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 fáciles de implementar porque ellos guardan valores entre
llamadas de métodos, permitiendo a la información ser acumulada por muchas llamadas a
métodos. 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 estén en
uso. Una conexión cliente puede invocar dos o más llamadas a métodos 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
métodos. El tiempo entre llamadas de métodos no maximiza el uso de recursos del servidor
si la instancia del componente no está en uso pero permanecerá activo y ligado a una sesión
cliente. Esto amarra los recursos del servidor y deja con la opción para un Memory leak del
EAServer.
Los componentes Stateful deben de ser desactivados por la aplicación llamando a métodos
que invoquen a los transaction primitive. También es importante señalar que el componente
stateful pierde el estado y es desactivado cuando una transacción implícita manejada por el
servidor Jaguar ha sido completada. Debido a esto, puede ser necesario desarrollar objetos
que soporten transacciones como los stateless.
Las dos últimas recomendaciones permiten al componente stateful ser desactivado y así
reducir la posibilidad del Memory leak del EAServer.
En esta sección vamos a trabajar con un componente stateful muy simple que permite al
usuario ingresar valores y asignarlos con una llamada a un método, y recuperar el valor con
una segunda llamada a otro método.
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
Protected:
integer ii_valor1
integer ii_valor2
ErrorLogging iel_jag
TransactionServer 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 función llamada log().
//of_valores
//argument : long al_valor1
long al_valor2
il_valor1 = as_valor1
il_valor2 = as_valor2
RETURN 1
La función of_calculo permite a la aplicación cliente recuperar los valores del componente. El
código para esta función es mostrada abajo :
// of_calculo
//argumento : (reference) string as_operador
long ll_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 capítulo 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 máquina, esto se realiza en las
propiedades del objeto project p_operaciones_servidor en el tab “EAServer Host”.
Ahora vamos a necesitar una aplicación 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 proveída por el autor).
Figura 5.4
Interfaz de la aplicación cliente
Este ejemplo es casi igual al que creamos en el capítulo 4, y lo vamos a utilizar para poder
probar los componentes stateful, en esta sección lo único que vamos a cambiar es la
invocación de los datos en el botón Valores, el cual se encargará de invocar al método
of_valores, y luego presionaremos el botón Procesar que se encargará de realizar el proceso
en el servidor.
Ejecutando el ejemplo
_____________________________________________________________________________________________
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
Figura 5.5
El Runtime monitor después de presionar el botón Valores
Note que el componente permanece activo incluso después de que el método 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 sesión cliente. Desde que el componente es stateful, esto permanece ligado a
una sesión cliente y la información 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
Figura 5.7
El Runtime monitor después de presionar el botón 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 después de que el método
completó el proceso como es indicado por el valor del Instances Active que
permanece en uno (1.0). Luego presione el botón Desactivar para desactivar la
instancia del componente esto hace la llamada a la función 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 después de cerrar el window
La figura 5.9 muestra que está pasando en el kernel del servidor Jaguar después de
que el componente es desactivado y destruido.
Figura 5.9
Desactivación 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
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.
Nota: Para acceder a esta opción, 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
diálogo de las propiedades del componente para resaltar el nombre del componente y
presionar el botón derecho del mouse (vea la figura 5.11). seleccionar la opción de
Component Properties del menú popup y presionar el tab Transactions ilustrado en la figura
5.11. activar la opción Automatic demarcation/deactivation y presionar Aceptar para grabar.
Para asegurarse que esta opción 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
Figura 5.11
Poniendo un componente como stateless
Lo primero es ingresar los valores a los campos y luego presionar el botón Conectarse,
después presionar el botón Valores, el primer método en el componente n_operaciones_ciclo
es llamado. Esto crea la instancia de un componente y es ligado a una sesión cliente. Los
valores ingresados en los sigle-line edit son pasados a la función y este valor es almacenado
en las variables de instancia en el componente. Después de llamar a la función of_valores y
luego que es completada, el componente es desactivado y no es ligado a una sesión 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 después de presionar el botón 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
Sin embargo, la llamada a la función of_calculo retorna nulo porque los valores que
fueron puestos por la llamada a la función of_valores fue perdida cuando la primera
instancia fue destruida. Se puede señalar 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 métodos en el componente n_operaciones_ciclo
no fue afectado por el stateless. El servidor Jaguar maneja la creación y activación del
componente para la llamada transparente de cada método. La figura 5.14 muestra que
después de que la llamada a la función of_calculo se completa, el componente
también es desactivado y destruido.
Figura 5.14
El Runtime monitor después de que el botón 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
Las primeras técnicas son obligar a la aplicación cliente para manejar los estados pasando
todos los valores pertinentes atrás a la aplicación cliente. Los valores pueden enviarse al
servidor como argumentos de función cuando el siguiente método es invocado. Esta técnica
es una de las más fáciles 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 información
de un lado a otro entre el servidor y la aplicación cliente. La red entre el cliente y el servidor
es típicamente una WAN, especialmente para aplicaciones de internet. Estos son los más
frecuentes pero hay mayores distancias y tráfico que estos.
Esto también requiere que las funciones de los componentes acepten los argumentos para
los estados de los datos. Cuando un componente requiere información adicional, la función
debe ser modificada para aceptar nuevos argumentos, que también requiere un cambio en la
aplicación cliente, algo que será evitado en una arquitectura distribuida.
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 Las instancias son ligados a los
por periodos largos clientes por periodos cortos
el servidor tiene instanciado más el servidor tiene instanciados menos
instancias instancias
las instancias son reusadas muy las instancias son más reusados
poco el servidor requiere de pocos
el servidor requiere más recursos, recursos
limitando la escalabilidad
Desactivación Temprana
Función Acción
SetComplete( ) Desactiva el componente
SetAbort( ) Desactiva el componente
EnableCommit( ) No Desactiva el componente
DisableCommit( ) No Desactiva el componente
La fácil desactivación puede ser usada para implementar un componente stateless, pero es
más fácil de hacer esto usando la opción Automatic demarcation/deactivation que codificar la
llamada al SetComplete o a un SetAbort en cada método.
// of_calculo
//argumento : (reference) string as_operador
_____________________________________________________________________________________________
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 después de presionar el botón
Valores la instancia del componente EAServer es desactivado después de que la función
of_valores ha finalizado (vea la figura 5.15).
Figura 5.15
El Runtime monitor después de presionar el botón Valores
La fácil desactivación puede ser usada para componentes que necesitan tener muchas
llamadas a métodos en sucesión, mientras mantienen su estado o una transacción para
completar una tarea. Estos métodos deberían ser llamados tan rápidamente para que la
instancia del componente pueda liberarse. También se puede poner la propiedad del
instance timeout property para que un componente use la fácil desactivación, 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
Esto es importante para notar que el instance pooling determina como los componentes son
manejados después 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.
Los componentes EAServer pueden soportar el instance pooling de una de estas dos
maneras. La manera más fácil de soportar el instance pooling en un componente
EAServer es habilitar la opción instance pooling. Cuando esta opción es habilitada, el
componente automáticamente es pooled después de que la instancia del componente
es desactivada.
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
Figura 5.18
El instance pooling habilitado en el Jaguar Manager
Un componente que soporte el instance pooling debe poder inicializarse cuando se activa y
limpiarse cuando se desactive. Esto asegura que la siguiente sesión cliente que recibe la
instancia no tiene datos de otras llamadas de métodos 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 debería poner las rutinas de inicialización, este
evento es llamado para inicializar la instancia. Todo el código para limpiar el componente
debería ser ubicado en el evento Deactivate. Este código podría normalmente ser ubicado en
el evento Destructor, pero este evento es llamado cuando el objeto es destruido, el
componente no debe ser limpiado después de ser asignado a una nueva sesión cliente.
El código que típicamente puede ser encontrado en el evento Activate incluye la creación de
un objeto TransactionServer y una conexión a una base de datos. El evento Deactivate
típicamente limpia los valores de todas las variables de instancia, destruye cualquier objeto
creado por el componente, destruye el objeto TransactionServer, y hace la desconexión de la
base de datos.
La propiedad del componente Instance Timeout es usado para especificar cuanto tiempo una
instancia de un componente estará activo y ligado a una sesión cliente sin una llamada a un
método antes de ser desactivada por el servidor Jaguar. Cuando la propiedad Instance
Timeout se pone a un valor mayor que cero, asegura la desactivación de un componente
stateful y previene el memory leaks del Jaguar.
Figura 5.31
Configurando la propiedad timeout del componente
La configuración 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 configuración del Instance Timeout activa la propiedad timeout,
com.sybase.jaguar.component.tx_timeout.
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 botón derecho del mouse para acceder al menú popup y seleccionar Component
Properties... para abrir el diálogo 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 botón Modify para cambiar el valor. La ventana de diálogo 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
_____________________________________________________________________________________________
Derechos Reservados de TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines.