Sunteți pe pagina 1din 42

PowerBuilder Distributed Developer v10.

Guía de Tareas

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

______________________________________________________________________________________________
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
PowerBuilder Distributed Developer v10.0

Guía de Tareas

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

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

______________________________________________________________________________________________
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 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
PowerBuilder Distributed Developer v10.0

Invocación de Métodos

______________________________________________________________________________________________
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
PowerBuilder Distributed Developer v10.0

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:

______________________________________________________________________________________________
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
PowerBuilder Distributed Developer v10.0

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.

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

______________________________________________________________________________________________
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


1. Ejecutar el wizard EAServer Component desde el diálogo New…
Procedimientos ƒ 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.

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

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

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 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 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
PowerBuilder Distributed Developer v10.0

En el ambiente de desarrollo, Ud. Puede tener su cliente y servidor


Configurando un
EAServer en la misma máquina físicamente en este caso Ud. Puede usar
EAServer listeners
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.

______________________________________________________________________________________________
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
PowerBuilder Distributed Developer v10.0

Generando un Proxy
1. Iniciar el EAServer si no está iniciado.
Procedimientos 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á.

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

______________________________________________________________________________________________
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 El nombre de la clase de su referencia del proxy debe coincidir con el
variable de nombre de la clase proxy.
referencia al 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 Prepend Definición de la


Componente package name to Clase Proxy
EAServer 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.

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

______________________________________________________________________________________________
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 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)
• interfaces file
(Solaris)
ODBC ODBC data source EAS Demo DB V3
Name
JDBC 1.1 Data source URL //JConnect
Always starts with jdbc:sybase:Tds:sales:
jdbc:. The rest is 5000
vendor-specific. //JDBC-ODBC driver
jdbc:odbc:LosLogos
OCI 7.x / Server name in the tns:LosLogos
OCI 8.x form of:
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.

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

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

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

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

______________________________________________________________________________________________
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 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 DataWindow ResultSet


La Sincronización Synchronization
de DataWindow Pros La tecnología DataWindow Más estándard y abierto a
soportada en PowerBuilder, la estructura de datos
PowerJ y HTML. (CORBA standard).
El objeto DataWindow no Puede ser manipulado
tiene que ser instalado en el desde una variedad de
lado del cliente. Si la herramientas.
definición del objeto
DataWindow cambia, la
aplicación cliente no tiene
que realizar el redespliegue.
______________________________________________________________________________________________
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
PowerBuilder Distributed Developer v10.0

Cons Clientes que no soporten No construye un


DataWindow/DataStoree mecanismo para capturar
No pueden manipular lo que los cambios hechos en la
retorna el blob. aplicación cliente y enviar
esto al componente
EAServer.

______________________________________________________________________________________________
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

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

______________________________________________________________________________________________
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
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" ) <> 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
PowerBuilder Distributed Developer v10.0

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

______________________________________________________________________________________________
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 Do not participate in
executing in a transaction transaction
Other component not executing in Do not participate in
a transaction transaction

Component Instantiated By Transactional Behavior


Support Client Do not participate in
Transaction transaction
Other intercomponent call Participate in caller’s
executing in a transaction 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 Participate in caller’s
executing in a transaction transaction
Other component not executing in Begin new transaction
a transaction

Component Instantiated By Transactional Behavior


Requires new
Client Begin new transaction
transaction
Other intercomponent call Begin new transaction
executing in a transaction
Other component not executing in Begin new transaction
a transaction

______________________________________________________________________________________________
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
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
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 Estos métodos pertenecen al objeto TransactionServer. Para crear un objeto
satisfactorio o TransactionServer:
falla
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. 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..

______________________________________________________________________________________________
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

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

______________________________________________________________________________________________
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
PowerBuilder Distributed Developer v10.0

Creando un Servidor EAServer

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

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

S-ar putea să vă placă și