guia de tareas pbdd10

42
PowerBuilder Distributed Developer v10.0 ______________________________________________________________________________________________ PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning Este producto solo puede ser usado para uso personal y no para otros fines Guía de Tareas PowerBuilder Distributed Developer v10.0 PBDD10 [email protected] www.techeras.com

Upload: gilberfrank

Post on 03-Jul-2015

509 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ Lab- 1 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning

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

Guía de Tareas

PowerBuilder Distributed

Developer v10.0PBDD10

[email protected]

www.techeras.com

Page 2: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Guía de Tareas

PowerBuilder Distributed

Developer v10.0

2005 TechEra e-Learning

Page 3: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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 v9.0 Guía de Tareas

Procesos de Desarrollo .............................................................................................................1 Iniciando el EAServer ..............................................................................................................3 Iniciando el Jaguar Manager....................................................................................................4 Revisando el Archivo Server Log ..........................................................................................5 Definiendo un componente EAServer....................................................................................6 Desplegando el Componente al EAServer.............................................................................7 Conectándose al EAServer ......................................................................................................9 Generando un Proxy .................................................................................................................11 Inicializando un Proxy..............................................................................................................13 Invocando un Método en un Componente EAServer...........................................................l4 Poniendo mensajes en el EAServer Log ................................................................................l5 Depurando un Componente Remoto ......................................................................................16 Instalando un Connection Cache.............................................................................................l7 Obteniendo una Conexión de la base de datos......................................................................18 Recuperando un DataWindow en un Componente EAServer ............................................20 Actualizando un DataWindow en un Componente EAServer ............................................22 Recuperando un ResultSet Object en un Componente EAServer ......................................24 Definiendo un Componente EAServer Ancestro..................................................................27 Actualizando un Objeto para ser un Componente EAServer..............................................29 Invocando los métodos de otro componente del Servidor...................................................30 Proporcionando soporte para el Instance Pooling.................................................................31 Proporcionando soporte para la Administración de la Transacción...................................32 Definiendo un Componente Service.......................................................................................34 Manejando los errores de Comunicación...............................................................................36 Monitoreando un servidor EAServer en Runtime ................................................................37 Creando un servidor EAServer................................................................................................38 Configurando un EAServer Listeners ....................................................................................39

Page 4: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Procesos de Desarrollo

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

Procedimientos

Page 5: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Invocación de Métodos

Page 6: Guia de Tareas PBDD10

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

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

Page 7: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Iniciando el EAServer Manager

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.

Page 8: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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.

Page 9: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Definiendo un Componente EAServer

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

Procedimientos

Page 10: Guia de Tareas PBDD10

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

Desplegando un Componente al EAServer

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

Procedimientos

Page 11: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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

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.

Page 12: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Conectándose al EAServer

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

server>:<port> Localhost 9000

User ID EAServer ser User ID Jagadmin Password EAServer server

password

Procedimientos

Page 13: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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.

Configurando un EAServer listeners

Page 14: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Generando un Proxy

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

EAServer no existe, entonces crear un proxy project. Use el 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: 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 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á.

Procedimientos

Page 15: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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.

Page 16: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Inicializando un Proxy

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

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 EAServer

Prepend package name to component

Definición de la Clase Proxy

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.

Procedimiento

Declarando una variable de referencia al proxy

Page 17: Guia de Tareas PBDD10

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

Invocando un Método en un Componente EAServer

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.

Procedimiento

Page 18: Guia de Tareas PBDD10

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

Poniendo mensajes en EAServer Log

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( ).

Procedimiento

Page 19: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Depurando un Componente Remoto

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

Procedimiento

Page 20: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Instalando un Connection Cache

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 Library

Descripción Ejemplo

Client Library 11.0

Server name from: • sql.ini (NT) • interfaces file (Solaris)

Sales

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:<service name>

tns:LosLogos

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

Procedimiento

Page 21: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ Lab- 21 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning

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

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

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.

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:

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

Procedimiento

Page 22: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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

Page 23: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Recuperando un DataWindow en un Componente EAServer

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.

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.

Procedimiento

Page 24: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Page 25: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Actualizando un DataWindow en un Componente EAServer

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 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( ).

Procedimiento

Page 26: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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.

Page 27: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Recuperando un objeto ResultSet en un Componente EAServer

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. 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().

Page 28: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ Lab- 28 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning

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

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.

DataWindow Synchronization

ResultSet

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.

ResultSet versus La Sincronización de DataWindow

Page 29: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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.

Page 30: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Definiendo un Componente EAServer Ancestro

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 Name

Returns Type

Event ID

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

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() )

CanBePooled

Activate

Procedimiento

Page 31: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

/* 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 */

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

Deactivate

Procedimiento

Page 32: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ Lab- 32 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning

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

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 ubicado.

Antes de retornar un método :

o Si es satisfactorio, invocar SetComplete(). o 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. 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:

o Nombre del Package o Nombre del componente EAServer o Tipo de componente o Transaction support o Automatic demarcation/deactivation

Soporte del instance pooling

Page 33: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Invocando un método de otro Componente de Servidor

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" ) <> 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

Procedimiento

Page 34: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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

Procedimiento

Page 35: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ Lab- 35 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning

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

Proporcionando Soporte para Administrar las Transacciones

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

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 a transaction

Do not participate in transaction

Component Instantiated By Transactional Behavior Client Do not participate in

transaction Other intercomponent call executing in a transaction

Participate in caller’s transaction

Other component not executing in a transaction

Do not participate in transaction

Component Instantiated By Transactional Behavior Client Begin new transaction Other intercomponent call executing in a transaction

Participate in caller’s transaction

Other component not executing in a transaction

Begin new transaction

Component Instantiated By Transactional Behavior Client Begin new transaction Other intercomponent call executing in a transaction

Begin new transaction

Other component not executing in a transaction

Begin new transaction

Not Support

Support Transaction

Requires transaction

Requires new transaction

Page 36: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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 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( )

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", &

Votando para satisfactorio o falla

Page 37: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

its_jag)

Definiendo un Componente Service

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. 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:

Procedimiento

Page 38: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

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

Page 39: Guia de Tareas PBDD10

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

Manejando los Errores de Comunicación

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

Procedimiento

Page 40: Guia de Tareas PBDD10

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

Monitoreando un Servidor EAServer en tiempo de ejecución

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.

Procedimiento

Page 41: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Creando un Servidor EAServer

1. Expandir el folder Servers. 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.

Procedimiento

Page 42: Guia de Tareas PBDD10

PowerBuilder Distributed Developer v10.0

______________________________________________________________________________________________ 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

Configurando los EAServer Listener

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

Procedimiento