Sei sulla pagina 1di 42

PowerBuilder Distributed Developer v10.0

PowerBuilder Distributed Developer v10.0 Guía de Tareas PowerBuilder Distributed Developer v10.0 PBDD10
PowerBuilder Distributed Developer v10.0 Guía de Tareas PowerBuilder Distributed Developer v10.0 PBDD10

Guía de Tareas

PowerBuilder Distributed Developer v10.0

Guía de Tareas PowerBuilder Distributed Developer v10.0 PBDD10 cursos@techeras.com www.techeras.com PowerBuilder

PBDD10

cursos@techeras.com

www.techeras.com

Developer v10.0 PBDD10 cursos@techeras.com www.techeras.com PowerBuilder Distributed Developer v10.0  2005 TechEra

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Guía de Tareas

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning
2005 TechEra e-Learning
Distributed Developer v10.0 2005 TechEra e-Learning Lab- 2 PowerBuilder Distributed Developer v10.0  2005

Lab- 2

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

PowerBuilder Distributed Developer v9.0 Guía de Tareas

Procesos de Desarrollo Iniciando el EAServer Iniciando el Jaguar Manager Revisando el Archivo Server Log Definiendo un componente EAServer Desplegando el Componente al EAServer Conectándose al EAServer Generando un Proxy Inicializando un Proxy Invocando un Método en un Componente EAServer Poniendo mensajes en el EAServer Log Depurando un Componente Remoto Instalando un Connection Cache Obteniendo una Conexión de la base de datos Recuperando un DataWindow en un Componente EAServer Actualizando un DataWindow en un Componente EAServer Recuperando un ResultSet Object en un Componente EAServer Definiendo un Componente EAServer Ancestro Actualizando un Objeto para ser un Componente EAServer Invocando los métodos de otro componente del Servidor Proporcionando soporte para el Instance Pooling Proporcionando soporte para la Administración de la Transacción Definiendo un Componente Service Manejando los errores de Comunicación Monitoreando un servidor EAServer en Runtime Creando un servidor EAServer Configurando un EAServer Listeners

1

3

4

5

6

7

9

11

13

l4

l5

16

l7

18

20

22

24 27 29 30 31 32 34 36 37
24
27
29
30
31
32
34
36
37

38

39

Lab- 3

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Procesos de Desarrollo

Procedimientos

En general, Ud. Sigue estos pasos de alto nivel cuando construye objetos de negocio para ser almacenados en EAServer.

1. Definir un componente EAServer involucra crear el objeto, codificar los eventos EAServer, y adicionar
1.
Definir un componente EAServer involucra crear el objeto,
codificar los eventos EAServer, y adicionar sus métodos y
propiedades. Estos pasos incluyen el uso y creación de
componentes ancestros.
2.
Desplegar el componente involucra construir un objeto project
que especificar las propiedades del componente como el manejo
del ciclo de vida, la administración de las transacciones y otros.

3. Conectarse al EAServer involucra crear y publicar un objeto connection. Ud. puede comunicarse con múltiples componentes a través de una sola conexión, por consiguiente, la conexión es típicamente establecida al iniciar la aplicación.

4. Generar un EAServer proxy involucra construir un objeto project que creará los objetos proxy para los componentes EAServer seleccionados.

5. Iniciar el proxy involucra usar el método CreateInstance( ) para asociar el proxy con el objeto connection.

6. Invocar los métodos usa la notación punto. Una vez que se tiene referencia al componente, Ud. puede llamar a métodos del componente como si estos fueran objetos locales.

Lab- 4

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

Invocación de Métodos

PowerBuilder Distributed Developer v10.0

de Métodos PowerBuilder Distributed Developer v10.0 Lab- 5 PowerBuilder Distributed Developer v10.0  2005
de Métodos PowerBuilder Distributed Developer v10.0 Lab- 5 PowerBuilder Distributed Developer v10.0  2005

Lab- 5

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

Iniciando el EAServer

PowerBuilder Distributed Developer v10.0

1. Iniciar el servidor EAServer (Start | Programs | Sybase | EAServer | Jaguar Server).

Una ventana en modo DOS es mostrada, si Ud. vee el mensaje “Accepting connections”, el servidor EAServer está ejecutándose y esperando por sus requerimientos.

Si Ud. no ve el mensaje “Accepting connections”, el servidor EAServer no se ha iniciado
Si Ud. no ve el mensaje “Accepting connections”, el servidor EAServer
no se ha iniciado satisfactoriamente. Consulte la información de error del
archivo jaguar.log.

Seleccionando Start | Programs | Sybase | EAServer | Jaguar Server ejecuta el archivo batch serverstart.bat localizado en el subdirectorio \bin. Por defecto, este archivo inicia el servidor EAServer. Ud. puede crear su propio servidor en el EAServer Manager para almacenar sus componentes relacionados. Nota: Ver "Creando un Servidor EAServer " en esta guía para información sobre definir su propio servidor EAServer. Para iniciar un servidor diferente al de Jaguar, poner el nombre del servidor como un parámetro en la línea de comando como se muestra a continuación:

en la línea de comando como se muestra a continuación: Lab- 6 PowerBuilder Distributed Developer v10.0

Lab- 6

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

Iniciando el EAServer Manager

PowerBuilder Distributed Developer v10.0

1. Iniciar el EAServer Manager (Start | Programs | Sybase | EAServer | EAServer Manager).

2. Conectarse al EAServer Manager con el servidor EAServer deseado:

Seleccionar Tools | Connect | EAServer Manager para abrir la ventana de diálogo del Login. Ingresar un “user name” y un password. El user name es jagadmin es por defecto definido para Ud. Esto no requiere de password. Ingrese el host name. Es el nombre de su máquina, que se configura cuando se instala el EAServer. Especificar el número de puerto. Por defecto, EAServer escucha los requerimientos para IIOP por el Puerto 9000.

Cuando Ud. selecciona Start | Programs | Sybase | EAServer | EAServer Manager, Ud. realmente está ejecutando un archivo batch. El archivo batch es jagmanager.bat, que se encuentra ubicado en el subdirectorio \html\classes.

se encuentra ubicado en el subdirectorio \html\classes . Lab- 7 PowerBuilder Distributed Developer v10.0  2005

Lab- 7

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Revisando el Archivo Server Log

1. Iniciar el EAServer Manager.

2. Expandir el folder Servers y luego expandir el servidor que se desea para mostrar el File Viewer.

3. Click derecho al Log File Viewer y seleccionar File Viewer Display desde el popup menú y abrir el window File Viewer.

Notas: jaguar.log es almacenado en el subdirectorio \bin en el directorio EAServer. Ver el archivo jaguar.log lo alertará de cualquier error o warning que encuentre el EAServer. Un componente EAServer también puede escribir al log. Ud. puede usar este archivo para hacer un seguimiento a la ejecución de sus componentes.

Si Ud. realiza un shut down al servidor EAServer, Ud. también cerrará el File Viewer y lo reiniciará.

Considere crear un acceso directo para abrir el archivo jaguar.log en Notepad. Usando un shortcut para ver el jaguar.log es mucho más rápido que iniciar el EAServer Manager en cada momento que se desea ver File Viewer. El shortcut es particularmente usado durante el desarrollo cuando se tiene errores en el servidor.

El archivo jaguar.log es refrescado cada momento que se inicia el servidor EAServer.
El archivo jaguar.log es refrescado cada momento que se inicia el
servidor EAServer.

Lab- 8

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Definiendo un Componente EAServer

Procedimientos

v10.0 Definiendo un Componente EAServer Procedimientos 1. Ejecutar el wizard EAServer Component desde el diálogo

1.

Ejecutar el wizard EAServer Component desde el diálogo New… Si un objeto application y una librería no existen para este nuevo componente, abrir el wizard EAServer Component desde el tab Target. Si se tiene un PBL, pero necesita un objeto de negocio y el objeto project de despliegue, escoger el wizard EAServer Component en el tab PB Object. Si se tiene ambos el PBL y el objeto de negocio, entonces seleccionar el wizard EAServer Component desde el tab Project.

El wizard lo dirige a través de las ventanas de diálogo:

a. Especificar la Librería de Destino

Nota: Si Ud. Abre el wizard desde el tab Targets, las ventajas de diálogo Specify New Application y Library and Specify Application Library SearchPath se abren antes del Specify Destination Library.

b. Especificar la Interface Implementation.

c. Especificar el nombre del Componente EAServer

d. Especificar la información del Servidor e. Especificar el nombre del Package f. Especificar el
d. Especificar la información del Servidor
e. Especificar el nombre del Package
f. Especificar el tipo de Componente
g. Especificar la opción Instance Pooling
h. Especificar el Transaction Support
i. Especificar las opcioens de Component Interface Build
j. Especificar las otras opciones del Componente
k. Especificar el Project
l. Especificar las opciones del Dynamic Library
m. Prepárese para crear el Componente EAServer

2. Adicionar propiedades y métodos para el componente en el painter User Object.

Un componente EAServer necesita un objeto application para ejecutarse

dentro del EAServer. EAServer almacena el PowerBuilder virtual machine y crea una sesión PowerBuilder para ejecutar el componente. La información de la sesión PowerBuilder es tomada desde el objeto

application.

Porque EAServer almacena el PowerBuilder virtual machine, Ud. puede usar la riqueza de la orientación a objetos de PowerBuilder y con sus componentes PowerBuilder. Ud. puede tener muchos componentes en

una sola librería usando un simple objeto application.

Lab- 9

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Desplegando un Componente al EAServer

Procedimientos

v10.0 Desplegando un Componente al EAServer Procedimientos 1. Iniciar el EAServer si no está iniciado. 2.

1. Iniciar el EAServer si no está iniciado.

2. Si un objeto project para desplegar el componente EAServer no existe, definir un nuevo objeto project usando el wizard EAServer Component en el tab Project.

Nota: el wizard EAServer Component en el tab Project es un sub conjunto de los wizards EAServer Component en el tab Target y en tab PB Object. El wizard en los tabs Target y PB Object crean ambos un componente EAServer y objeto project para desplegar el componente. El wizard en el tab Project crea un objeto project para un componente existente.

El wizard del tab Project lo guía a través de estas ventanas de diálogo:

a. Especificar la Librería de destino

b. Especificar el Project

c. Seleccionar los Componentes

d. Especificar la información del Servidor

e. Especificar el nombre del Package

f. Especificar el tipo de Componente

g. Especificar las opciones del Instance Pooling

h. Especificar el Transaction Support i. Especificar las opciones del Component Interface Build j. Especificar
h. Especificar el Transaction Support
i. Especificar las opciones del Component Interface Build
j. Especificar las otras opciones del Componente
k. Especificar las opciones del Dynamic Library
l. Listo para crear el Componente EAServer
3. Abrir el objeto project creado por el wizard. Opcionalmente, modificar
cualquiera de las propiedades.
4. Deploy al objeto project para desplegar el componente(s) al EAServer.

Cuando Ud. construye el objeto project, PowerBuilder y EAServer realizan muchos pasos para desplegar su componente al EAServer e implementar CORBA (Common Object Request Brokerage Architecture).

Todo lo necesario es hecho en el EAServer repository. Ud. puede ver esto en el System Tree con PowerBuilder.

Ud. puede ver esto en el System Tree con PowerBuilder. Lab- 10 PowerBuilder Distributed Developer v10.0

Lab- 10

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

el PBD que contiene el componente desplegado está en un directorio EAServer en el fólder Component dentro del folder Repository.

en el fólder Component dentro del folder Repository. Notas: Si Ud. usa objetos DataWindow u otros
Notas: Si Ud. usa objetos DataWindow u otros objetos referenciados dinámicamente, la propiedad Include Unreferenced
Notas: Si Ud. usa objetos DataWindow u otros objetos referenciados
dinámicamente, la propiedad Include Unreferenced Objects in Consolidated
PBD en el objeto project es importante activarlo en el objeto project.
PowerBuilder crea un PowerBuilder dynamic Library (PBD) para EAServer
diferentemente de como un PBD es generado para una aplicación PowerBuilder.
Para EAServer, PowerBuilder incluye solo los objetos referenciados en el PBD.
Este proceso es similar como cuando PowerBuilder crea un EXE. Por ejemplo, si
un componente declara una variable de una estructura, la estructura debe estar
incluida en el PBD porque esto está directamente referenciado.

// d_customers no está referenciado y no será // incluido en el PBD ds_data.dataobject = "d_customers"

para asegurarse que el objeto DataWindow es incluido, verificar la propiedad Include Unreferenced Objects in Consolidated PBD que esté incluido.

Ud. puede también hacer uso del archivo PowerBuilder resource (PBR) para incluir recursos necesarios como bitmaps, read-only text o archivos INI, y objetos DataWindows en el PBD.

Lab- 11

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Conectándose al EAServer

Procedimientos

Developer v10.0 Conectándose al EAServer Procedimientos 1. Iniciar el servidor EAServer sino se encuentra iniciado.

1. Iniciar el servidor EAServer sino se encuentra iniciado.

2. Definir un nuevo objeto connection usando el Connection Object wizard en

el tab PB Object. El wizard lo dirige a través de estas ventanas de diálogo:

a. Specify Destination Library – Identifica la librería donde van a ser creado los nuevos objetos

b. Specify Connectivity (SQL database o EAServer) Ud. necesitará especificar la conexión al EAServer.

c. Specify Server Information

d. Specify Package Name – Identifica el package para ser usado por defecto

Nota: al crear un comopnente en el package por defecto, Ud. No necesitará especificar el nombre del package. Cuando el componente no está en el package por defecto, Ud. Debe especificar el package y componente como el segundo argumento para el método CreateInstance( ) usando este formado:

<package>/<component>.

e. Name Connection Object

f. Specify Connectivity Source Info

g. Ready to Create Connection Object 3. Crear el objeto connection como cualquier otro objeto.
g. Ready to Create Connection Object
3. Crear el objeto connection como cualquier otro objeto. Ud. necesita declarar
una variable para el objeto connection con el alcance apropiado.
n_jaguar_connect gn_connect
gn_connect = CREATE n_jaguar_connect
4. Llamar a la función ConnectToServer( ) y verificar los errores.

long ll_rc ll_rc = gn_connect.ConnectToServer() IF ll_rc <> 0 THEN // process error END IF

Notas: el wizard crea un descendiente del connection system class. Las propiedades publicadas son los siguientes:

Propiedad

Descripción

Ejemplo

Application

Default package

Finance

Driver

El driver EAServer

Jaguar

Location

<EAServer

Localhost 9000

server>:<port>

User ID

EAServer ser User ID

Jagadmin

Password

EAServer server

 

password

Lab- 12

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

Configurando un EAServer listeners

PowerBuilder Distributed Developer v10.0

En el ambiente de desarrollo, Ud. Puede tener su cliente y servidor EAServer en la misma máquina físicamente en este caso Ud. Puede usar la ubicación de su máquina como servidor.

Típicamente, la aplicación cliente se ejecutará en una máquina diferente del servidor EAServer. En este caso, Ud. Debe configurar el EAServer listeners. Ver “Configurando un EAServer Listeners” en esta guía.

Ver “Configurando un EAServer Listeners” en esta guía. Lab- 13 PowerBuilder Distributed Developer v10.0  2005

Lab- 13

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

Generando un Proxy

PowerBuilder Distributed Developer v10.0

1. Iniciar el EAServer si no está iniciado.

Procedimientos

1. Iniciar el EAServer si no está iniciado. Procedimientos 2. Si un objeto project para generar

2. Si un objeto project para generar un proxy para un componente

EAServer

EAServer Proxy Wizard en el tab Project para definir un project que puede crear un proxy. El wizard lo dirige a través de estas ventanas de diálogo:

un proxy project. Use el

no

existe,

entonces

crear

a. Specify Destination Library

b. Specify Project

c. Select Server Profile

d. Select Components

e. Specify New Proxy Library Name

f. Specify Build Options

g. Ready to Create EAServer Proxy

3. Después que el objeto project es creado, click en el icono Deploy. Este paso genera un nuevo proxy para el componente EAServer que expone todos los métodos públicos y variables de instancias.

4. El proxy puede verse en el System Tree. Si Ud. Exporta el objeto,

Ud. verá solo la interfaz, no el código de implementación.

5. Note cualquier excepcion que es creado con el proxy. Estas exceptions necesitarán ser capturadas
5. Note cualquier excepcion que es creado con el proxy. Estas
exceptions necesitarán ser capturadas en cualquier código cliente
invocando los métodos.
Cuando Ud. crea un proxy para un componente, Ud. puede especificar si
el nombre del package es juntado con el nombre del componente. Para
hacer esto Ud. use el checkbox Prepend EAServer package name to
component name.

Cuando esta propiedad es seleccionada, la clase proxy que es creado es nombrada usando este formato:

<PACKAGE>_<COMPONENT>

Por ejemplo, si su nombre de package es finance y el nobmre de su componente loan, el resultado del nombre de la clase proxy es:

finance_loan

Ud. puede usar este nombre cuando declara cualquier variable para su clase proxy. La llamada a la función CreateInstance( ) no cambiará.

Lab- 14

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

La opción prepend package name es usado para identificar únicamente a componentes. Esto es posible para componentes diferentes con el mismo nombre para desplegarlos al EAServer. Anteponiendo el nombre del package asegura que Ud. Use el componente que Ud. Desea y no cualquier otro componente con el mismo nombre.

En la ventana de diálogo Select Components en el wizard, Ud. puede seleccionar un package entero en vez de un solo componente. Esta opción construye un project que crea proxys para todos los componentes en el package seleccionado.

para todos los componentes en el package seleccionado. Lab- 15 PowerBuilder Distributed Developer v10.0  2005

Lab- 15

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Inicializando un Proxy

Procedimiento

1. Declare una variable de referencia para su objeto proxy. Use el tab Proxy del browser para identificar el nombre exacto de la clase proxy. Ud. puede también ver la información en el System Tree.

// Asuma que ha creado un proxy n_loan para el // componente remoto n_loan // Si Ud. tiene antepuesto el nombre del package, este // proxy será de la clase finance_n_loan // Declare una variable de referencia para el proxy n_loan in_loan

2. Llamar a la función CreateInstance( ) del objeto connection. Verificar los errores. El primer argumento debe ser una variable de referencia para la clase proxy (definido en el paso 1). El segundo argumento debe ser un string en el formato de <package>/<component>.

ll_rc = gn_connect.CreateInstance (in_loan, & "finance/n_loan") IF ll_rc <> 0 THEN //proceso de error END IF

Declarando una variable de referencia al proxy

El nombre de la clase de su referencia del proxy debe coincidir con el nombre
El nombre de la clase de su referencia del proxy debe coincidir con el
nombre de la clase proxy.
Para los ejemplos que siguen, asuma que el nombre del objeto
PowerBuilder es n_loan y esto pertenece al package finance. También
asuma que Ud. quiere declarar un variable de referencia llamada in_loan
para el proxy. Como debe ser declarado la variable?
Nombre del
Componente
Definición de la
Clase Proxy
EAServer
Prepend
package name to
component
n_loan
No
n_loan in_loan
n_loan
Yes
finance_n_loan
in_loan
Loan
No
loan in_loan
Loan
Yes
finance_loan
in_loan

Nota: PowerBuilder no es case-sensitive, pero EAServer si lo es.

EAServer no instancia al componente con la llamada en el CreateInstance( ), el componente está instanciado en la primera llamada del método. CreateInstance( ) asocial el proxy con el objeto connection (ORB) para que pueda ser encontrado en el servidor EAServer.

Lab- 16

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Invocando un Método en un Componente EAServer

Procedimiento

Luego de que ha instanciado el componente remoto satisfactoriamente, Ud. Puede invocar los métodos del objeto como lo haría típicamente usando la notación de punto:

object.method( )

Por ejemplo, que el componente Loan contiene un méotod llamado calculate(). También asuma que el componente ha sido instanciado satisfactoriamente y es referenciado por in_loan. Para invocar el método remoto calcuate() codifique lo siguiente:

payment = in_loan.calculate( amount, months )

Caulquier exceptions que su componente levante debe capturado en el cliente.

que su componente levante debe capturado en el cliente. Lab- 17 PowerBuilder Distributed Developer v10.0 

Lab- 17

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Poniendo mensajes en EAServer Log

Procedimiento

1.

Crear

un

objeto

ErrorLogging

usando

el

método

GetContextService().

 

// Declare una variable de instancia protected de tipo:

// ErrorLogging Protected:

 

ErrorLogging iel_jag // Use GetContextService para retornar una referencia al // objeto this.GetContextService("ErrorLogging", iel_jag)

2.

llamar al método log( ) del objeto ErrorLogging si se desea escribir información al archivo jaguar.log. El método log( ) necesita un string:

iel_jag.log("Iniciando Actualización para " + & this.classname())

Notas: la función GetContextService( ) es usado para obtener una referencia al objeto ErrorLogging cada vez que la instancia del componente es ligado al cliente. Por consiguiente, el evento Activate es un buen lugar para crear este objeto. Si Ud. desea escribir información en el evento Constructor. Ud. tiene que llamar a la función GetContextService( ) antes de llamar a la función log( ).

GetContextService( ) antes de llamar a la función log( ). Lab- 18 PowerBuilder Distributed Developer v10.0

Lab- 18

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Depurando un Componente Remoto

Procedimiento

1. Inicie PowerBuilder y seleccione la aplicación que contiene el componetne que se desea depurar.

2. Ejecutar el debugger.

3. Poner los break points apropiados típicamente como Ud. Lo haría en el depurador.

4. Click al icono Start Remote Debugging para abrir la ventana de diálogo para especificar la información del servidor.

5. Especificar la información del servidor y click al botón Next para abrir la ventana de diálogo para el Select Components.

6. Seleccionar los componentes que se desean depurar y click al botón Finish. El debugger, almacenado por el servidor EAServer, ahora esperará hasta que un método de un componente sea invocado.

7. Iniciar una Segunda sesión de PowerBuilder. Ejecutar la aplicación cliente. Cuando la aplicación cliente llama a un método remoto que está configurado para depurarse, el cliente deberá ser bloqueado. Cambiar a la sesión de depuración remota que Ud. empezó antes. Note que la ejecución ha parado en el breakpoint. Ud. puede ahora ver las variables y el código. El cliente será desbloqueado cuando el componente ha completado la ejecución y retorna el control al cliente.

Nota: Ud. no puede depurar el evento Activate. Poner mensajes en el Server log. El
Nota: Ud. no puede depurar el evento Activate. Poner mensajes en el
Server log.
El cliente y el servidor EAServer no tienen que ser ejecutados en la
misma máquina.

Para depurar debe desplegar el componente con la propiedad Remote Debugging pueta en TRUE. En un project que despliega el componente, seleccionar el tab Components de la hoja de propiedades. Asegurarse que el checkbox Remote Debugging es seleccionado.

Para la depuración remota su servidor EAServer debe tener también el Debug Role definido. Para Adicionar el Rol Debug:

1. Iniciar el EAServer Manager y abrir el fólder Role en el tree view.

2. Click derecho y seleccionar New Role para abrir el diálogo New Role.

3. Ingresar el Debug Role en el edit field y click Create New Role.

4. Click en OK en las propiedades del diálogo.

Lab- 19

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Instalando un Connection Cache

Procedimiento

1. Inicar el EAServer Manager y conectarse al servidor.

2. Click derecho al fólder Connection Caches.

3. Seleccionar New Connection Cache….

4. Ingresar el nombre del connection cache y click en Create New Connection Cache.

5. Especificar las propiedades en el tab Driver. Use la siguiente tabla para seleccionar el DLL o Class Name apropiado.

Database

DLL

Client Library 11.x

Libjct.dll

ODBC

Odbc32.dll

JDBC 1.1

The Java class name for the driver

OCI 6.x

Ociw32.dll

OCI 8.x

Oci.dll

OCI 9.x

Oci.dll

6. Especificar las propiedades en el tab General. Use la siguiente tabla para seleccionar lo valores apropiados para las propiedades del Server Name.

Connection Descripción Ejemplo Library Client Server name from: Sales Library 11.0 • sql.ini (NT) •
Connection
Descripción
Ejemplo
Library
Client
Server name from:
Sales
Library 11.0
• sql.ini (NT)
• interfaces file
(Solaris)
ODBC
ODBC data source
Name
EAS Demo DB V3
JDBC 1.1
Data source URL
Always starts with
jdbc:. The rest is
vendor-specific.
//JConnect
jdbc:sybase:Tds:sales:
5000
//JDBC-ODBC driver
jdbc:odbc:LosLogos
OCI 7.x /
OCI 8.x
Server name in the
form of:
tns:LosLogos
tns:<service name>

7. Reiniciar el servidor EAServer. En el EAServer Manager, abrir la hoja de propiedades del nuevo connection cache. En el tab General, click a Ping para asegurarse que EAServer puede conectarse al origen de datos.

Nota: Enable cache-by-name access es una opción conveniente para codificar. Esto le permite que Ud. Especifique el nombre del connection cache en su código en lugar del nombre del servidor, el user name, y password. Si los parámetros de conectividad cambian, Ud no tiene que

Lab- 20

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

hacer cambios en su código si Ud. Está usando el nombre del connection cache. Por otra parte, Ud. tendría que cambiar su código.

Obteniendo una conexión de la Base de datos

Procedimiento

1. Declare una variable de instancia protected de tipo transaction.

2. Instancie el transaction si este no ha sido creado. El evento Activate para conectarse es un buen lugar.

3. Publique el transaction como Ud. Típicamente lo haría. Si ud. Está usando un objeto TransactionServer para manejar las transacciones, ponga UseContextObject en Yes en el dbparm. Si Ud. desea use el nombre del connection cache, ponga la propiedad CacheName como se definió en el EAServer Manager.

4. Use la sentencia connect y verifique los errores como Ud. típicamente lo haría.

5. Desconectarse de la base de datos en el evento Deactivate o llamar a un método desde el evento Deactivate es un buen lugar para este código.

Asuma que el nombre del connection cache es EASDemoDB y esto se conecta a un ODBC data source.

cache es EASDemoDB y esto se conecta a un ODBC data source. Nota: para conectarse usando

Nota: para conectarse usando el cache name, el connection cache definido en el EAServer Manager debe tener el checkbox Enable cache- by-name access seleccionado. Ud. puede encontrar esta propiedad en el tab Cache de la ventana de diálogo Connection Cache Properties.

Si Ud. no está usando el cache name cuando se conecta, Ud. debe especificar las propiedades de conexión. Aquí esta un ejemplo:

Lab- 21

// Profile EAS Demo DB itr_trans.DBMS = "ODBC"

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

itr_trans.DBParm = "ConnectString='DSN=EAS Demo DB;” & “UID=dba;PWD=sql',UseContextObject='Yes'" /* nota: Ud. usa una caracter de continuación (&) */

Para adicionar control sobre como EAServer maneja los requerimientos de conexión, referirse a la documentación para el Get Connection Option y Release Connection Option,y Proxy User Name.

Si la conexión falla, Ud. Puede retornar -1 en el evento Activate, que resulta en el retorno inmediato del control del cliente. La instancia es destruida y el método invocado no es ejecutado.

Ud. debe limitar la cantidad de tiempo que el componente tiene una conexión para tenerlo disponible para otro requerimiento.

Ud. puede conectarse y descontarse con cada método que requiere acceso a la base de datos.

Si el componente es stateless, Ud. puede conectarse en el evento Activate y desconectarse en el evento Deactivate. Porque el componente stateless, dispara el evento Activate antes de ser llamado. Entonces su método se ejecutará. Cuando el método se complete, el evento Deactivate es disparado.

Considere crear un método en un componente ancestro que se conecte a la base de
Considere crear un método en un componente ancestro que se conecte a la base
de datos. En el evento Activate de los descendientes, Ud. puede llamar a este
método para conectarse si su componente necesita conectarse a la base de datos.

Cuando Ud. emite el CONNECT USING itr_trans; PowerBuilder automáticamente no crea una conexión física a la base de datos como lo haría en un ambiente two-tier. PowerBuilder pregunta al EAServer connection cache para una conexión válida. Si una conexión está disponible en el cache, entonces una conexión es retornada. El objeto transaction está ahora asociado con una conexión válida. Si una conexión no está disponible en el cache, una conexión física es establecida.

Tip: Ud. puede pegar el código para publicar el objeto transaction.

1. Abrir el diálogo Database Profiles en PowerBuilder.

2. Seleccionar la base de datos para desear conectarse y click en el botón Edit.

3. Seleccionar el tab EAServer/MTS.

4. Seleccionar el checkbox Use Transaction Context Object para usar el objeto TransactionServer y los state primitives para manejar su transacción.

5. Seleccionar el checkbox Access Cache by Name para accesar al connection cache por su nombre cn se definió en el EAServer Manager.

6. Opcionalmente, Ud. puede especificar los valores para las propiedades GetConnectionOption, ReleaseConnectionOption y ProxyUserNames.

7. Seleccione el tab Preview.

8. El código para publicar un objeto transaction es mostrado. Click al botón Copy. Entonces pegar el código en su script y modificar el código necesario.

Lab- 22

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Recuperando un DataWindow en un Componente EAServer

Procedimiento

Asuma que Ud.desea mostrar datos en un DataWindow nombrado dw_1 que ds recuperado de un componente remoto.

Asuma que el cliente tiene su conexión satisfactoria al EAServer con un objeto connection nombrado gn_connect. Vea “Conectándose al EAServer” en esta guía.

También asuma que el componente ha sido instanciado satisfactoriamente y la variable de referencia es nombrado in_customer. Vea “Inicializando un Proxy” en esta guía.

1. Obtener una conexión desde un EAServer connection cache. Vea “Obteniendo una Conexión de la Base de Datos” en esta guía.

2. Declare una variable de instancia protected para un DataStore.

3. Después el código que obtiene una conexión en el evento Activate, codifique lo siguiente:

a. Crear el DataStore si este no ha sido creado.

b. Asignar el objeto DataWindow.

c. Asociar un objeto transaction con el SetTransObject( ).

4. Definir una función que toma un argumento blob por referencia y retorna un long.
4. Definir una función que toma un argumento blob por referencia y retorna un
long.
5. Recuperar el DataStore con la función Retrieve( ).
6. Empaqueta el DataWindow en el argumento blob con GetFullState( ).
7. Return. Ud. podría retornar el número de filas recuperadas si es satisfactorio
y retornar –1 si hubo un error.
Codifique lo siguiente cada vez que Ud. desee recuperar el DataWindow.
1. Declare una variable local de tipo blob.

2. Llame al método remoto pasando la variable blob.

3. Si la llamada fue satisfactoria, apliqué los cambios al DataWindow con SetFullState( ). Asegúrese que SetFullState( ) sea satisfactorio.

Lab- 23

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

PowerBuilder Distributed Developer v10.0 Lab- 24 PowerBuilder Distributed Developer v10.0  2005 TechEra e-Learning Este

Lab- 24

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Actualizando un DataWindow en un Componente EAServer

Procedimiento

Asuma que Ud. Desea recuperar los clientes desde un componente, modificar los datos en el cliente, y entonces actualizar lo datos desde un componente. Asuma que el método es llamado save( ).

Esto es una extención del escenario en la sección anterior, “Recuperando un DataWindow en un Componente EAServer.” Refiérase a esta sección como sea necesario. También referirse a “Proporcionando soporte para la Administración de la Transacción.”

Asumiento que Ud. Tiene codificado los eventos Activate y Deactivate y la función de recuperación de datos, codificar lo siguiente:

1. Declarar una variable TransactionServer.

2. Definir una función que tome un argumento blob y retorne un long. El argumento blob debe tener que ser poblado en el cliente con la función GetChanges( ). Aquí está un ejemplo de declaración:

long save ( blob lbl_data )

3. Aplicar los cambios hechos en el cliente al DataStore con SetChanges( ). 4. Llamar
3. Aplicar los cambios hechos en el cliente al DataStore con SetChanges( ).
4. Llamar a la función Update() del DataStore para actualizar los cambios a la
base de datos.
5. Si la actualización es satisfactoria, llamar al State Primitive SetComplete( )
para emitirle un commit al EAServer. Si la actualización falla, llamar al
SetAbort( ).
6. Return. Ud podría retornar el número de filas recuperadas si es satisfactorio y
retornar –1 si es que hubo fallas.
1. Declare una variable local blob para almacenar los cambios de usuario.

2. Llamar a la función AcceptText del DataWindow para validar el contenido del control editado.

3. Empaquetar los cambios de usuario en el blob con GetChanges( ).

4. Llamar al método save( ) del componente, pasando el blob cambiado.

5. Si la actualización es satisfactorio, llamar a la función ResetUpdate( ) para reestablecer los flags actualizados. Si la actualización falla, procesar el error y no llamar al ResetUpdate( ).

Lab- 25

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

PowerBuilder Distributed Developer v10.0 Notas: El objeto DataWindow debe ser asignado al DataStore antes de que

Notas: El objeto DataWindow debe ser asignado al DataStore antes de que se realice un SetChanges( ). Por consiguiente, cada objeto DataWindow debe existir en el servidor o el DataStore debe tener poblado con un SetFullState( ).

Ud llama a la función AcceptText( ) en el cliente para validar el contenido de los campos y puedan ser movidos al primary buffer. Recuerde que la actualización es realizada en el componente. Por consiguiente el AcceptTexr por defecto en la función Update( ) no se aplica al DataWindow cliente.

Lab- 26

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Recuperando un objeto ResultSet en un Componente EAServer

Recuperando un objeto ResultSet en un Componen te EAServer 1. Defina un método en un componente

1. Defina un método en un componente que toma un objeto ResultSet como argumento por reference y retorna un long.

2. Instanciar, inicializar y recuperar un DataStore como Ud. Lo haría

típicamente.

3. Llame a la función GenerateResultSet( ) para publicar el argumento ResultSet desde el DataStore.
3. Llame a la función GenerateResultSet( ) para publicar el argumento
ResultSet desde el DataStore. Verifique el código de retorno.
4. Retorne satisfactorio o falla.
1. Declare variables locales a los objetos ResultSet y DataStore.
2. Invoque el método del componente, pasando la variable local
ResultSet.
3. Si la llamada al método es satisfactorio, entonces realizar lo
siguiente:

a. Crear un DataStore.

b. Cargue el ResultSet en un DataStore con la función CreateFrom().

c. Compartir el DataStore con el control DataWindow para mostrar los datos. Use la función ShareData().

Lab- 27

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Notas: el objeto DataWindow debe ser asignado al DataStore en el componente y el control
Notas: el objeto DataWindow debe ser asignado al DataStore en el
componente y el control DataWindow en el cliente. El objeto
DataWindow no necesita ser asignado al DataStore en el cliente.

Use el DataStore en el cliente como el primary buffer cuando Ud. Comparte datos. El control DataWindow debe ser el secondary buffer.

Cuando Ud. declara la función, el ResultSet no está en el dropdown list para los tipos de argumento. Ingresar ResultSet directamente en el text box del dropdown.

ResultSet versus La Sincronización de DataWindow

Lab- 28

 

DataWindow

ResultSet

Synchronization

Pros

La tecnología DataWindow soportada en PowerBuilder, PowerJ y HTML. El objeto DataWindow no tiene que ser instalado en el lado del cliente. Si la definición del objeto DataWindow cambia, la aplicación cliente no tiene que realizar el redespliegue.

Más estándard y abierto a la estructura de datos (CORBA standard). Puede ser manipulado desde una variedad de herramientas.

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Cons

Clientes que no soporten DataWindow/DataStoree No pueden manipular lo que retorna el blob.

No

construye

un

mecanismo

para

capturar

los cambios hechos en la

aplicación cliente y enviar

 

esto

al

componente

EAServer.

y enviar   esto al componente EAServer. Lab- 29 PowerBuilder Distributed Developer v10.0  2005

Lab- 29

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Definiendo un Componente EAServer Ancestro

Procedimiento

Para usar la funcionalidad del EAServer en un componente, Ud. Puede declarar varias variables de instancias. Lo más comúnmente usado es el manejo de Transacciones, error logging, y la conexión. Definir una variable de instancia protected para cada uno de estos objetos. He aquí un ejemplo:

Protected:

TransactionServer its_jag ErrorLogging iel_jag Transaction itr_trans

Un componente EAServer debe tener eventos EAServer relacionados en adición a los estándares Constructor y Destructor. El servidor EAServer disparará estos eventos. Seleccionar Insert | Event desde el menu en el painter del User Object y adicionar los siguientes eventos EAServer:

Event

Returns

Event ID

Name

Type

Activate

Long

pbm_component_activate

CanBePooled

Long

pbm_component_canbepooled

Deactivate

Long

pbm_component_deactivate

El evento Activate es llamado cada vez que una instancia de un componente es ligado
El evento Activate es llamado cada vez que una instancia de un componente es
ligado al cliente. Este evento es usado para inicializar variables y obtener los
recursos necesarios. Aquí esta algunos ejemplos de código en el evento Activate:

// Crear un objeto ErrorLogging this.GetContextService ( "ErrorLogging", iel_jag ) // Identificar que este evento dispara el log iel_jag.log ( "ACTIVATE de " + this.classname() ) // Obtener un TransactionServer para manejar transacciones IF this.GetContextService ( "TransactionServer", & its_jag ) <> 1 THEN // error de log return -1 END IF // Obtener una conexión desde un connection cache IF NOT IsValid ( itr_trans ) THEN itr_trans = CREATE transaction END IF itr_trans.dbms = "ODBC" itr_trans.DBParm = & "UseContextObject='Yes',CacheName='<<cachename>>'" CONNECT USING itr_trans; IF itr_trans.sqlcode <> 0 THEN // error de log return -1 END IF

Activate

CanBePooled

El evento CanBePooled es llamado justo antes del evento Deactivate cuando una instancia es desligada del cliente. CanBePooled es llamado solo cuando la opción Pooling es desactivada. Si el evento retorna un 1, entonces la instancia es reusada.

// Identificar que este evento dispara en el log iel_jag.log ( "CANBEPOOLED de "+ this.classname() )

Lab- 30

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

/* Realiza lógica para determinar si la instancia debe ser reusada. Retorna 1 si esto debe ser pooled. Retorna otro valor diferente de 1 si esto debe ser destruido */

Deactivate

El evento Deactivate es llamado cada vez que una instancia es desligada de un cliente. Este evento es bueno para liberar cualquier recurso usado por la instancia, como un connection cache.

// Identificar que este evento dispara el log iel_jag.log ( "DEACTIVATE de " + this.classname() ) // Liberar la conexión DISCONNECT USING itr_trans;

Para cada componente, Ud. Necesita adicionar los eventos Activate, Deactivate, y CanBePooled para tomar completa ventaja de la funcionalidad de EAServer.:

Manualmente adicionar cada uno para cada custom class user object (CCUO). Seleccionar la opción Insert | Event en el painter del User Object. Si el CCUOs tiene un ancestro común, Ud. puede manualmente insertar los eventos listados en la tabla anterior al ancestro. Los eventos son entonces disponibles para los descendientes. Si el CCUOs no tiene un ancestro común, o si Ud. desea adicionar una nueva capa específicamente al código relacionado al EAServer, Ud. puede crear el componente ancestro usando el wizard EAServer Component. Ud. puede entonces hacer este componente ancestro para un CCUO existente.

Asuma que un CCUO llamado n_customer no tiene un ancestro (heredado directamente dede el NonvisualObject
Asuma que un CCUO llamado n_customer no tiene un ancestro (heredado
directamente dede el NonvisualObject system class). También asuma que Ud.
Desea hacer ancestro el n_ancestor para n_customer.
1.
Click al objeto n_customer desde el System Tree.

2. Seleccionar Edit Source desde el menu de contexto.

3. Cambiar las dos instancias de NonvisualObject a la nuevo clase ancestro . En

su caso, cambiar NonvisualObject por n_ancestor. Grabar el archivo.

$PBExportHeader$n_customer.sru forward global type n_customer from nonvisualobject end type end forward global type n_customer from nonvisualobject end type global n_customer n_customer

4. Salir del painter y grabar sus cambios.

Nota: los eventos EAServer no son obligatorios. Ud. podría desplegar CCUOx directamente al EAServer. Sin embargo, si el componente es desplegado como stateless, Ud. No puede inicializar la instancia. Esto podría crear errores impredecibles, , que podría ser muy difícil de depurar.

Actualizando un Objeto a un Componente EAServer

Procedimiento

Lab- 31

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Para realizar la migración se tiene que seguir los siguientes pasos para lograr una migración adecuada, ejemplos como el de cambiar Commits y Rollbacks por funciones SetComplete( ) y SetAbort( ).

Si una variable de instancia es declarada pública, hacerla que sea protegida, porque algunos objetos de PowerBuilder no son soportados por CORBA. Si se declara en el objecto ancestro EAServer, entonces borrar la variable de instancia pública y usar la variable del ancestro.

Si un método retorna o toma un argumento EAServer no soportado, entonces cambiar el tipo del método. Cambie el tipo de dato o si la función no tiene que ser pública, hacerla privada o protegida.

Para acceder a la base de datos, obtener una conexión desde un connection cache. No se puede pasar un objeto transaction en un método del componente.

Para el manejo de Transacciones:

o

Reemplazar el Commit de la base de datos con SetComplete().

o

Reemplazar el Rollback de la base de datos con SetAbort().

o Asegurarse que en el dbparm el UseContextObject = ‘Yes’ de un objeto transaction sea
o
Asegurarse que en el dbparm el UseContextObject =
‘Yes’ de un objeto transaction sea ubicado.
Antes de retornar un método :
o
Si es satisfactorio, invocar SetComplete().
Si falla, escribir un mensaje al archivo log e invocar
SetAbort().
Remover todas las llamadas a las funciones MessageBox(). Escribir
los mensajes en el archivo Log del servidor.
o
Si la llamada entre componentes existe, reemplazar la inicialización
típica de los objetos PowerBuilder (la sentencia create) con la
creación a través del Objeto TransactionServer (y el método
CreateInstance). Use la función IsTransactionAborted() desde la
llamada de entre componentes.

Configurar el ciclo de vida y las propiedades transaccionales en un proyecto de despliegue PowerBuilder o en el EAServer Manager. Ponga atención particular a las siguientes propiedades:

Lab- 32

o

Nombre del Package

o

Nombre del componente EAServer

o

Tipo de componente

o

Transaction support

o

Automatic demarcation/deactivation Soporte del instance pooling

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Invocando un método de otro Componente de Servidor

Procedimiento

Asuma que Ud. tiene los siguientes componentes definidos en un package llamado orderentry:

Componente

Método

n_cart

PlaceOrder( )

n_order

Add( int ai_cust )

En algún punto en la lógica del método PlaceOrder( ) de n_cart, Ud. llamará al método Add( ) de n_order.

1. Cree un objeto TransactionServer usando el método GetContextService( ). Típicamente el evento Activate es un buen lugar para hacer esto. Use una variable de instancia para que Ud. Lo pueda usar en cualquier evento.

TransactionServer its_jag IF this.GetContextService ( "TransactionServer", & its_jag ) <> 1 THEN // proceso de error END IF

2. Declare una variable de referencia para la clase que Ud. Desea crear.

n_order ln_order

3. Obtener una referencia para otro componente usando el método CreateInstance( ) del objeto TransactionServer. El primer parámetro debe ser una variable de referencia de la clase que Ud. desea crear. El segundo parámetro debe ser una cadena con este formato:

<PACKAGE>/<COMPONENT> IF its_jag.CreateInstance ( ln_order, & "orderentry/n_order" )
<PACKAGE>/<COMPONENT>
IF its_jag.CreateInstance ( ln_order, &
"orderentry/n_order" ) <> 0 THEN
// proceso de error
END IF
4. Invocar el método usando la notación estándar object.method.
ln_order.Add (li_cust_id)

5. (Opcional) Verificar para ver donde el componente vota para abortar la transacción usando la función IsTransactionAborted( ).

IF its_jag.IsTransactionAborted() THEN its_jag.SetAbort() return ELSE // Continua el proceso END IF

Notas: el método GetContextService("TransactionServer", its_jag ) instancia un objeto TransactionServer y ubica la referencia en la variable its_jag (que es de tipo TransactionServer). El método CreateInstance( ) es un método de la clase TransactionServer. Este método es similar al método CreateInstance( ) del connection class y tiene similar propósito. Si Ud. está llamando un método de un componente que reside en una máquina diferente, Ud. No puede usar el TransactionServer. Ud. debe crear un objeto connection y conectarse al EAServer así como Ud. Lo hace la aplicación cliente.

Proporcionando soporte para el Instance Pooling

Lab- 33

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

Procedimiento

PowerBuilder Distributed Developer v10.0

Ud. puede poner el Instance Pooling de muchas maneras:

1. Especificar el Instance Pooling en el wizard EAServer Component

2. Especificar el Instance Pooling en el project que despliega el componente.

Seleccionar el tab Components de la hoja de propiedades.

3.
3.

En el EAServer Manager, seleccionar el tab Instances de la hoja de propiedades del componente.

4. Retornar 1 desde el evento CanBePooled.

Nota: el evento CanBePooled es llamado solo cuando la propiedad instance pooling no es seleccionado.

Lab- 34

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Proporcionando Soporte para Administrar las Transacciones

Use la siguiente tabla para determinar el comportamiento que Ud. desea para sus componentes.

Not Support

Component Instantiated By

Transactional Behavior

Client

Do not participate in transaction

Other intercomponent call executing in a transaction

Do not participate in transaction

Other component not executing in

Do not participate in

a

transaction

transaction

Component Instantiated By Transactional Behavior Support Client Transaction Do not participate in transaction Other
Component Instantiated By
Transactional Behavior
Support
Client
Transaction
Do not participate in
transaction
Other intercomponent call
executing in a transaction
Participate in caller’s
transaction
Other component not executing in
Do not participate in
a transaction
transaction
Component Instantiated By
Transactional Behavior
Requires
Client
Begin new transaction
transaction
Other intercomponent call
executing in a transaction
Participate in caller’s
transaction
Other component not executing in
Begin new transaction
a transaction

Requires new

transaction

Lab- 35

Component Instantiated By

Transactional Behavior

Client

Begin new transaction

Other intercomponent call executing in a transaction

Begin new transaction

Other component not executing in

Begin new transaction

a

transaction

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Después Ud. determina el tipo de transacción del componente, Ud. puede poner esta propiedad de dos maneras diferentes:

Poner la propiedad transaction support en el PowerBuilder project y entonces desplegar los componentes.

o Poner el tipo de transaction en el EAServer Manager. Ir a la hoja de
o
Poner el tipo de transaction en el EAServer Manager. Ir a la hoja de
propiedades para el componente. Click al tab Transaction.

Use uno de los cuatro State primitives para votar por satisfactorio o falla de la transacción. también, use un State primitive para indicar si el componente debe ser desactivado o no. Use la tabla de abajo para seleccionar los State primitive apropiados.

 

Desactiva

No Desactiva

Vote for success

SetComplete( )

EnableCommit( )

Vote for failure

SetAbort( )

DisableCommit( )

Votando para

satisfactorio o

falla

Estos métodos pertenecen al objeto TransactionServer. Para crear un objeto TransactionServer:

1.Declare una variable de tipo TransactionServer:

TransactionServer its_jag

2. Obtener una referencia para el objeto con el método GetContextService( ):

this.GetContextService("TransactionServer", &

Lab- 36

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

its_jag)

Definiendo un Componente Service

Procedimiento

Asuma que Ud. necesita un método llamado Stock que captura los precios de stock y lo hace disponible para una variedad de aplicaciones cliente. Los precios de stock son recuperados cada 10 minutos desde un servicio externo.

Ud. desea crear un componente service que llamará a un método que obtendrá los stock cada 10 minutos y luego ir a esperar.

1. Defina un nuevo componente EAServer con el wizard EAServer Component. Cuando le pida el tipo de componente, seleccionar Service Component como el tipo de componente. Un componente service tiene los métodos start( ), run( ), y stop( ).

2. Declare una variable de instancia protected de tipo boolean. Esta variable permite iniciar y parar el método run( ).

boolean ib_continue = TRUE

3. Codificar el método start( ). Típicamente Ud. inicializa variables y obtiene los recursos requeridos.

4. Codificar el método run( ). El método run( ) debe hacer un loop forever y periódicamente llamar al método Sleep( ).

Ud. puede usar una variable boolean para controlar el loop. Inicializar la variable en TRUE.
Ud. puede usar una variable boolean para controlar el loop. Inicializar la
variable en TRUE. Aquí está un ejemplo:
boolean ib_continue = TRUE
El siguiente código le dice al componente Stock para refrescar su cache
interno y esperar por diez minutos.

do while ib_continue iel_jag.log ("refrescar stocks…") in_stock.getData() Sleep ( 60*10 ) // sleep por 10 minutos loop

5. Codificar el método stop( ) si es necesario. El método stop( ) le permite parar la ejecución del método run( ). EAServer no llama a este. Típicamente, Ud. podría crear otro componente que llame a los métodos stop( ) y run() y por consiguiente, y le permite controlar como el componente service opera.

6. Agregue el componente service a la propiedad services del servidor para que este sea creado cuando el servidor EASErver es iniciado.

a. Iniciar el servidor EAServer y el EAServer Manager.

b. En el EAServer Manager, ir a las propiedades del servidor.

c. Seleccionar el tab All Properties. Ud. puede tener que desplazarse por los tabs para encontrarlo.

d. Doble-click en la propiedad com.sybase.jaguar.server.services para abrir la ventana de diálogo Modify Property.

e. Ingrese el nombre del component ID en el formato de <Package>/<Component> como se muestra:

Lab- 37

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

service/ServiceProduct

Notas: Reiniciar el servidor EAServer para ejecutar los nuevos servicios.

Ud. puede especificar multiples componentes services en esta propiedad. Separe esto con una coma. Aquí está un ejemplo:

service/ProductService,finance/Stock,service/Rates

Cuando el servidor EAServer inicia, cada componente listado en esta propiedad es instanciado. El método start( ) es entonces invocado, inmediatamente seguido por el método run( ).

Para más detalles , vea "Creando un Componente Service " en la documentación de EAServer

Componente Service " en la documentación de EAServer Lab- 38 PowerBuilder Distributed Developer v10.0  2005

Lab- 38

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Manejando los Errores de Comunicación

Procedimiento

Notas: el evento Error del objeto connection es disparado siempre que hay un error de comunicación, el servidor EAServer envia un exception, o un componente del servidor envia un exception. Procese el error en este evento y proceselo apropiadamente.

// evento Error del objeto connection

int li_choice

li_choice = MessageBox ( "Erro de Conexión " & + string(ErrorNumber), ErrorText, & Question!, AbortRetryIgnore! )

CHOOSE CASE li_choice

CASE 1 action = ExceptionFail!

CASE 2 action = ExceptionRetry!

CASE 3 action = ExceptionIgnore! END CHOOSE

C A S E 3 action = ExceptionIgnore! END CHOOSE Lab- 39 PowerBuilder Distributed Developer v10.0

Lab- 39

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Monitoreando un Servidor EAServer en tiempo de ejecución

Procedimiento

1. Iniciar el servidor EAServer.

2. Iniciar el EAServer Manager y conectarse al servidor EAServer.

3. Expandir el servidor que Ud. desea monitorear en el tree view en el EAServer Manager.

4. Expandir el Runtime Monitoring. Ud. puede monitorear componentes, connection caches, y comunicaciones de red.

5. Seleccione el componente, connection cache, o item de red que Ud. desea monitorear.

6. Click derecho al item que Ud. Desea monitorear y seleccionar View Values para abrir una ventana de diálogo Runtime Display.

Values para abrir una ventana de diálogo Runtime Display. Lab- 40 PowerBuilder Distributed Developer v10.0 

Lab- 40

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

Creando un Servidor EAServer

Procedimiento

1. Expandir el folder Servers.

PowerBuilder Distributed Developer v10.0

2. Click derecho en Servers y seleccionar New Server para abrir la ventana de diálogo New Server.

3. Ingrese el nomre del nuevo servidor que Ud. desea crear y click al botón Create New Server.

4. Ud. puede ahora definir las propiedades para el servidor, abriendo la hoja de propiedades.

para el servidor, abriendo la hoja de propiedades. Lab- 41 PowerBuilder Distributed Developer v10.0  2005

Lab- 41

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines

PowerBuilder Distributed Developer v10.0

Configurando los EAServer Listener

Procedimiento

1. En el EAServer Manager, expandir el folder Servers.

2. Expandir el servidor específico donde Ud. desea configurar los listeners ( como Jaguar).

3. Expandir el fólder Listeners. Una lista de listeners aparecen en el panel derecho.

4. Para cada listener, doble-click al listener para que le muestra una ventana de información. Cambie el Host de localhost al nombre de su máquina, si es que no fue modificado

5. Para cada cliente que necesite conectarse a este servidor, cambia la propiedade de locación
5. Para cada cliente que necesite conectarse a este servidor, cambia la
propiedade de locación del objeto connection de localhost al nombre de la
máquina especificado en el diálogo Listener.
6. Reinicie el servidor EAServer para que los cambios tomen efecto.

Lab- 42

PowerBuilder Distributed Developer v10.0

2005 TechEra e-Learning

Este producto solo puede ser usado para uso personal y no para otros fines