Está en la página 1de 42

PowerBuilder Distributed Developer v10.

Gua 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

Gua 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


Gua 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
Conectndose al EAServer ......................................................................................................9
Generando un Proxy .................................................................................................................11
Inicializando un Proxy ..............................................................................................................13
Invocando un Mtodo en un Componente EAServer ...........................................................l4
Poniendo mensajes en el EAServer Log ................................................................................l5
Depurando un Componente Remoto ......................................................................................16
Instalando un Connection Cache .............................................................................................l7
Obteniendo una Conexin 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 mtodos de otro componente del Servidor ...................................................30
Proporcionando soporte para el Instance Pooling.................................................................31
Proporcionando soporte para la Administracin de la Transaccin ...................................32
Definiendo un Componente Service .......................................................................................34
Manejando los errores de Comunicacin ...............................................................................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 mtodos y
propiedades. Estos pasos incluyen el uso y creacin 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 administracin de las transacciones y otros.
3. Conectarse al EAServer involucra crear y publicar un objeto
connection. Ud. puede comunicarse con mltiples componentes
a travs de una sola conexin, por consiguiente, la conexin es
tpicamente establecida al iniciar la aplicacin.
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 mtodo CreateInstance( ) para
asociar el proxy con el objeto connection.
6. Invocar los mtodos usa la notacin punto. Una vez que se tiene
referencia al componente, Ud. puede llamar a mtodos 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


Invocacin de Mtodos

______________________________________________________________________________________________
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 ejecutndose y
esperando por sus requerimientos.

Si Ud. no ve el mensaje Accepting connections, el servidor EAServer


no se ha iniciado satisfactoriamente. Consulte la informacin 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 gua para
informacin sobre definir su propio servidor EAServer.
Para iniciar un servidor diferente al de Jaguar, poner el nombre del
servidor como un parmetro en la lnea de comando como se muestra a
continuacin:

______________________________________________________________________________________________
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 dilogo 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 mquina, que se
configura cuando se instala el EAServer.
Especificar el nmero 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 tambin puede escribir
al log. Ud. puede usar este archivo para hacer un seguimiento a la
ejecucin de sus componentes.
Si Ud. realiza un shut down al servidor EAServer, Ud. tambin 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 ms
rpido 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


Procedimientos

1. Ejecutar el wizard EAServer Component desde el dilogo New


Si un objeto application y una librera 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 travs de las ventanas de dilogo:
a. Especificar la Librera de Destino
Nota: Si Ud. Abre el wizard desde el tab Targets, las ventajas de dilogo
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 informacin del Servidor
e. Especificar el nombre del Package
f. Especificar el tipo de Componente
g. Especificar la opcin 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. Preprese para crear el Componente EAServer
2. Adicionar propiedades y mtodos 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 sesin PowerBuilder para ejecutar el componente. La
informacin de la sesin PowerBuilder es tomada desde el objeto
application.
Porque EAServer almacena el PowerBuilder virtual machine, Ud. puede
usar la riqueza de la orientacin a objetos de PowerBuilder y con sus
componentes PowerBuilder. Ud. puede tener muchos componentes en
una sola librera 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 gua a travs de estas ventanas de dilogo:
a. Especificar la Librera de destino
b. Especificar el Project
c. Seleccionar los Componentes
d. Especificar la informacin 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 flder Component dentro del folder Repository.

Notas: Si Ud. usa objetos DataWindow u otros objetos referenciados


dinmicamente, 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 aplicacin 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 tambin 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

Conectndose 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 travs de estas ventanas de dilogo:
a. Specify Destination Library Identifica la librera donde van a ser
creado los nuevos objetos
b. Specify Connectivity (SQL database o EAServer) Ud. necesitar
especificar la conexin 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 mtodo 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 funcin 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
Application
Driver
Location
User ID
Password

Descripcin
Default package
El driver EAServer
<EAServer
server>:<port>
EAServer ser User ID
EAServer server
password

Ejemplo
Finance
Jaguar
Localhost 9000
Jagadmin

______________________________________________________________________________________________
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


Configurando un
EAServer listeners

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


EAServer en la misma mquina fsicamente en este caso Ud. Puede usar
la ubicacin de su mquina como servidor.
Tpicamente, la aplicacin cliente se ejecutar en una mquina diferente
del servidor EAServer. En este caso, Ud. Debe configurar el EAServer
listeners.
Ver Configurando un EAServer Listeners en esta gua.

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

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 travs de estas
ventanas de dilogo:
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. Despus 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 mtodos pblicos 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 cdigo de implementacin.
5. Note cualquier excepcion que es creado con el proxy. Estas
exceptions necesitarn ser capturadas en cualquier cdigo cliente
invocando los mtodos.
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 funcin 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 opcin 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 dilogo Select Components en el wizard, Ud. puede seleccionar
un package entero en vez de un solo componente. Esta opcin 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 tambin ver la informacin 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 funcin CreateInstance( ) del objeto connection.


Verificar los errores. El primer argumento debe ser una variable de
referencia para la clase proxy (definido en el paso 1). El segundo
argumento debe ser un string en el formato de
<package>/<component>.
ll_rc = gn_connect.CreateInstance (in_loan, &
"finance/n_loan")
IF ll_rc <> 0 THEN
//proceso de error
END IF

Declarando una
variable de
referencia al proxy

El nombre de la clase de su referencia del proxy debe coincidir con el


nombre 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. Tambin
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
n_loan
n_loan

Prepend
package name to
component
No
Yes

Loan
Loan

No
Yes

Definicin de la
Clase Proxy
n_loan in_loan
finance_n_loan
in_loan
loan in_loan
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 mtodo.
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 Mtodo en un Componente EAServer


Procedimiento

Luego de que ha instanciado el componente remoto satisfactoriamente,


Ud. Puede invocar los mtodos del objeto como lo hara tpicamente
usando la notacin de punto:
object.method( )

Por ejemplo, que el componente Loan contiene un motod llamado


calculate(). Tambin asuma que el componente ha sido instanciado
satisfactoriamente y es referenciado por in_loan. Para invocar el mtodo
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
GetContextService().

ErrorLogging

usando

el

mtodo

// 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 mtodo log( ) del objeto ErrorLogging si se desea escribir


informacin al archivo jaguar.log. El mtodo log( ) necesita un
string:
iel_jag.log("Iniciando Actualizacin para " + &
this.classname())

Notas: la funcin 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 informacin
en el evento Constructor. Ud. tiene que llamar a la funcin
GetContextService( ) antes de llamar a la funcin 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 aplicacin que contiene el


componetne que se desea depurar.
2. Ejecutar el debugger.
3. Poner los break points apropiados tpicamente como Ud. Lo hara en
el depurador.
4. Click al icono Start Remote Debugging para abrir la ventana de
dilogo para especificar la informacin del servidor.
5. Especificar la informacin del servidor y click al botn Next para
abrir la ventana de dilogo para el Select Components.
6. Seleccionar los componentes que se desean depurar y click al botn
Finish. El debugger, almacenado por el servidor EAServer, ahora
esperar hasta que un mtodo de un componente sea invocado.
7. Iniciar una Segunda sesin de PowerBuilder. Ejecutar la
aplicacin cliente. Cuando la aplicacin cliente llama a un mtodo
remoto que est configurado para depurarse, el cliente deber ser
bloqueado. Cambiar a la sesin de depuracin remota que Ud.
empez antes. Note que la ejecucin ha parado en el breakpoint. Ud.
puede ahora ver las variables y el cdigo.
El cliente ser desbloqueado cuando el componente ha completado la
ejecucin 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 mquina.
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 depuracin remota su servidor EAServer debe tener tambin el
Debug Role definido. Para Adicionar el Rol Debug:
1. Iniciar el EAServer Manager y abrir el flder Role en el tree view.
2. Click derecho y seleccionar New Role para abrir el dilogo New Role.
3. Ingresar el Debug Role en el edit field y click Create New Role.
4. Click en OK en las propiedades del dilogo.

______________________________________________________________________________________________
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.
2.
3.
4.

Inicar el EAServer Manager y conectarse al servidor.


Click derecho al flder Connection Caches.
Seleccionar New Connection Cache.
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
Client Library 11.x
ODBC
JDBC 1.1
OCI 6.x
OCI 8.x
OCI 9.x

DLL
Libjct.dll
Odbc32.dll
The Java class name for the driver
Ociw32.dll
Oci.dll
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

Descripcin

Ejemplo

Client
Library 11.0

Server name from:


sql.ini (NT)
interfaces file
(Solaris)
ODBC data source
Name
Data source URL
Always starts with
jdbc:. The rest is
vendor-specific.

Sales

ODBC
JDBC 1.1

OCI 7.x /
OCI 8.x

Server name in the


form of:
tns:<service name>

EAS Demo DB V3
//JConnect
jdbc:sybase:Tds:sales:
5000
//JDBC-ODBC driver
jdbc:odbc:LosLogos
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 opcin conveniente para
codificar. Esto le permite que Ud. Especifique el nombre del connection
cache en su cdigo en lugar del nombre del servidor, el user name, y
password. Si los parmetros 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 cdigo si Ud. Est usando el nombre del connection
cache. Por otra parte, Ud. tendra que cambiar su cdigo.

Obteniendo una conexin 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. Tpicamente lo hara. 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.
tpicamente lo hara.
5. Desconectarse de la base de datos en el evento Deactivate o llamar a
un mtodo desde el evento Deactivate es un buen lugar para este
cdigo.
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 cacheby-name access seleccionado. Ud. puede encontrar esta propiedad en el
tab Cache de la ventana de dilogo Connection Cache Properties.
Si Ud. no est usando el cache name cuando se conecta, Ud. debe especificar las
propiedades de conexin. 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 continuacin (&) */

Para adicionar control sobre como EAServer maneja los requerimientos de


conexin, referirse a la documentacin para el Get Connection Option y Release
Connection Option,y Proxy User Name.
Si la conexin 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 mtodo
invocado no es ejecutado.
Ud. debe limitar la cantidad de tiempo que el componente tiene una conexin
para tenerlo disponible para otro requerimiento.
Ud. puede conectarse y descontarse con cada mtodo 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 mtodo se ejecutar. Cuando
el mtodo se complete, el evento Deactivate es disparado.
Considere crear un mtodo en un componente ancestro que se conecte a la base
de datos. En el evento Activate de los descendientes, Ud. puede llamar a este
mtodo para conectarse si su componente necesita conectarse a la base de datos.
Cuando Ud. emite el CONNECT USING itr_trans; PowerBuilder
automticamente no crea una conexin fsica a la base de datos como lo hara en
un ambiente two-tier. PowerBuilder pregunta al EAServer connection cache para
una conexin vlida. Si una conexin est disponible en el cache, entonces una
conexin es retornada. El objeto transaction est ahora asociado con una
conexin vlida. Si una conexin no est disponible en el cache, una conexin
fsica es establecida.
Tip: Ud. puede pegar el cdigo para publicar el objeto transaction.
1.
2.
3.
4.
5.
6.
7.
8.

Abrir el dilogo Database Profiles en PowerBuilder.


Seleccionar la base de datos para desear conectarse y click en el botn Edit.
Seleccionar el tab EAServer/MTS.
Seleccionar el checkbox Use Transaction Context Object para usar el
objeto TransactionServer y los state primitives para manejar su transaccin.
Seleccionar el checkbox Access Cache by Name para accesar al connection
cache por su nombre cn se defini en el EAServer Manager.
Opcionalmente, Ud. puede especificar los valores para las propiedades
GetConnectionOption, ReleaseConnectionOption y ProxyUserNames.
Seleccione el tab Preview.
El cdigo para publicar un objeto transaction es mostrado. Click al botn
Copy. Entonces pegar el cdigo en su script y modificar el cdigo 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 conexin satisfactoria al EAServer con un objeto
connection nombrado gn_connect. Vea Conectndose al EAServer en esta
gua.
Tambin asuma que el componente ha sido instanciado satisfactoriamente y la
variable de referencia es nombrado in_customer. Vea Inicializando un Proxy
en esta gua.
1. Obtener una conexin desde un EAServer connection cache. Vea
Obteniendo una Conexin de la Base de Datos en esta gua.
2. Declare una variable de instancia protected para un DataStore.
3. Despus el cdigo que obtiene una conexin 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 funcin que toma un argumento blob por referencia y retorna un
long.
5. Recuperar el DataStore con la funcin Retrieve( ).
6. Empaqueta el DataWindow en el argumento blob con GetFullState( ).
7. Return. Ud. podra retornar el nmero 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 mtodo remoto pasando la variable blob.
3. Si la llamada fue satisfactoria, apliqu los cambios al DataWindow con
SetFullState( ). Asegrese 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 mtodo es llamado save( ).
Esto es una extencin del escenario en la seccin anterior, Recuperando un
DataWindow en un Componente EAServer. Refirase a esta seccin como sea
necesario. Tambin referirse a Proporcionando soporte para la Administracin
de la Transaccin.
Asumiento que Ud. Tiene codificado los eventos Activate y Deactivate y la
funcin de recuperacin de datos, codificar lo siguiente:
1. Declarar una variable TransactionServer.
2. Definir una funcin que tome un argumento blob y retorne un long. El
argumento blob debe tener que ser poblado en el cliente con la funcin
GetChanges( ). Aqu est un ejemplo de declaracin:
long save ( blob lbl_data )

3. Aplicar los cambios hechos en el cliente al DataStore con SetChanges( ).


4. Llamar a la funcin Update() del DataStore para actualizar los cambios a la
base de datos.
5. Si la actualizacin es satisfactoria, llamar al State Primitive SetComplete( )
para emitirle un commit al EAServer. Si la actualizacin falla, llamar al
SetAbort( ).
6. Return. Ud podra retornar el nmero 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 funcin AcceptText del DataWindow para validar el contenido
del control editado.
3. Empaquetar los cambios de usuario en el blob con GetChanges( ).
4. Llamar al mtodo save( ) del componente, pasando el blob cambiado.
5. Si la actualizacin es satisfactorio, llamar a la funcin ResetUpdate( ) para
reestablecer los flags actualizados. Si la actualizacin 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 funcin AcceptText( ) en el cliente para validar el
contenido de los campos y puedan ser movidos al primary buffer.
Recuerde que la actualizacin es realizada en el componente. Por
consiguiente el AcceptTexr por defecto en la funcin 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 mtodo 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 hara
tpicamente.
3. Llame a la funcin GenerateResultSet( ) para publicar el argumento
ResultSet desde el DataStore. Verifique el cdigo de retorno.
4. Retorne satisfactorio o falla.
1. Declare variables locales a los objetos ResultSet y DataStore.
2. Invoque el mtodo del componente, pasando la variable local
ResultSet.
3. Si la llamada al mtodo es satisfactorio, entonces realizar lo
siguiente:
a. Crear un DataStore.
b. Cargue el ResultSet en un DataStore con la funcin
CreateFrom().
c. Compartir el DataStore con el control DataWindow para mostrar
los datos. Use la funcin 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 funcin, el ResultSet no est en el dropdown list
para los tipos de argumento. Ingresar ResultSet directamente en el text
box del dropdown.
ResultSet versus
La Sincronizacin
de DataWindow

Pros

DataWindow
Synchronization
La tecnologa DataWindow
soportada en PowerBuilder,
PowerJ y HTML.
El objeto DataWindow no
tiene que ser instalado en el
lado del cliente. Si la
definicin
del
objeto
DataWindow cambia, la
aplicacin cliente no tiene
que realizar el redespliegue.

ResultSet
Ms estndard y abierto a
la estructura de datos
(CORBA standard).
Puede ser manipulado
desde una variedad de
herramientas.

______________________________________________________________________________________________
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


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

No
construye
un
mecanismo para capturar
los cambios hechos en la
aplicacin 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 ms comnmente usado es el manejo de
Transacciones, error logging, y la conexin. 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 adicin


a los estndares 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
Activate
CanBePooled
Deactivate

Activate

Returns
Type
Long
Long
Long

Event ID
pbm_component_activate
pbm_component_canbepooled
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 cdigo 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 conexin 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

CanBePooled

El evento CanBePooled es llamado justo antes del evento Deactivate cuando una
instancia es desligada del cliente. CanBePooled es llamado solo cuando la opcin
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 lgica 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 conexin
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 opcin Insert | Event en el painter del User
Object.
Si el CCUOs tiene un ancestro comn, 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 comn, o si Ud. desea adicionar una
nueva capa especficamente al cdigo 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). Tambin 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. podra desplegar CCUOx
directamente al EAServer. Sin embargo, si el componente es desplegado como
stateless, Ud. No puede inicializar la instancia. Esto podra crear errores
impredecibles, , que podra ser muy difcil 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 migracin se tiene que seguir los siguientes pasos para
lograr una migracin adecuada, ejemplos como el de cambiar Commits y
Rollbacks por funciones SetComplete( ) y SetAbort( ).

Si una variable de instancia es declarada pblica, 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 pblica y usar la
variable del ancestro.

Si un mtodo retorna o toma un argumento EAServer no soportado,


entonces cambiar el tipo del mtodo. Cambie el tipo de dato o si la
funcin no tiene que ser pblica, hacerla privada o protegida.

Para acceder a la base de datos, obtener una conexin desde un


connection cache. No se puede pasar un objeto transaction en un
mtodo 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 mtodo :


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 inicializacin


tpica de los objetos PowerBuilder (la sentencia create) con la
creacin a travs del Objeto TransactionServer (y el mtodo
CreateInstance). Use la funcin 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 atencin particular a las siguientes propiedades:
o
o
o
o
o

Nombre del Package


Nombre del componente EAServer
Tipo de componente
Transaction support
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 mtodo de otro Componente de Servidor


Procedimiento

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


llamado orderentry:
Componente
Mtodo
n_cart
PlaceOrder( )
n_order
Add( int ai_cust )
En algn punto en la lgica del mtodo PlaceOrder( ) de n_cart, Ud. llamar al
mtodo Add( ) de n_order.
1. Cree un objeto TransactionServer usando el mtodo GetContextService( ).
Tpicamente 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 mtodo


CreateInstance( ) del objeto TransactionServer. El primer parmetro debe ser
una variable de referencia de la clase que Ud. desea crear. El segundo
parmetro 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 mtodo usando la notacin estndar object.method.


ln_order.Add (li_cust_id)

5. (Opcional) Verificar para ver donde el componente vota para abortar la


transaccin usando la funcin IsTransactionAborted( ).
IF its_jag.IsTransactionAborted() THEN
its_jag.SetAbort()
return
ELSE
// Continua el proceso
END IF

Notas: el mtodo GetContextService("TransactionServer", its_jag ) instancia un


objeto TransactionServer y ubica la referencia en la variable its_jag (que es de
tipo TransactionServer).
El mtodo CreateInstance( ) es un mtodo de la clase TransactionServer. Este
mtodo es similar al mtodo CreateInstance( ) del connection class y tiene
similar propsito.
Si Ud. est llamando un mtodo de un componente que reside en una mquina
diferente, Ud. No puede usar el TransactionServer. Ud. debe crear un objeto
connection y conectarse al EAServer as como Ud. Lo hace la aplicacin 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
Client
Other intercomponent call
executing in a transaction
Other component not executing in
a transaction

Support
Transaction

Component Instantiated By
Client
Other intercomponent call
executing in a transaction
Other component not executing in
a transaction

Requires
transaction

Requires new
transaction

Transactional Behavior
Do not participate in
transaction
Do not participate in
transaction
Do not participate in
transaction

Transactional Behavior
Do not participate in
transaction
Participate in callers
transaction
Do not participate in
transaction

Component Instantiated By
Client
Other intercomponent call
executing in a transaction
Other component not executing in
a transaction

Transactional Behavior
Begin new transaction
Participate in callers
transaction
Begin new transaction

Component Instantiated By
Client
Other intercomponent call
executing in a transaction
Other component not executing in
a transaction

Transactional Behavior
Begin new transaction
Begin new transaction
Begin new 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


Despus Ud. determina el tipo de transaccin 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
transaccin. tambin, 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.
Vote for success
Vote for failure

Votando para
satisfactorio o
falla

Desactiva
SetComplete( )
SetAbort( )

No Desactiva
EnableCommit( )
DisableCommit( )

Estos mtodos 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 mtodo 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 mtodo 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 mtodo 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
mtodos start( ), run( ), y stop( ).
2. Declare una variable de instancia protected de tipo boolean. Esta variable
permite iniciar y parar el mtodo run( ).
boolean ib_continue = TRUE

3. Codificar el mtodo start( ). Tpicamente Ud. inicializa variables y obtiene


los recursos requeridos.
4. Codificar el mtodo run( ). El mtodo run( ) debe hacer un loop forever y
peridicamente llamar al mtodo 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 cdigo 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 mtodo stop( ) si es necesario. El mtodo stop( ) le permite


parar la ejecucin del mtodo run( ). EAServer no llama a este.
Tpicamente, Ud. podra crear otro componente que llame a los mtodos
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 dilogo 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 mtodo start( ) es entonces invocado,
inmediatamente seguido por el mtodo run( ).
Para ms detalles , vea "Creando un Componente Service " en la
documentacin 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 Comunicacin


Procedimiento

Notas: el evento Error del objeto connection es disparado siempre que hay un
error de comunicacin, 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 Conexin " &
+ 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 ejecucin


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 dilogo 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
dilogo New Server.
3. Ingrese el nomre del nuevo servidor que Ud. desea crear y click al botn
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 especfico donde Ud. desea configurar los listeners (
como Jaguar).
3. Expandir el flder 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
informacin. Cambie el Host de localhost al nombre de su mquina, si es que
no fue modificado

5. Para cada cliente que necesite conectarse a este servidor, cambia la


propiedade de locacin del objeto connection de localhost al nombre de la
mquina especificado en el dilogo 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

También podría gustarte