Post on 03-Jul-2015
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 1 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Guía de Tareas
PowerBuilder Distributed
Developer v10.0PBDD10
cursos@techeras.com
www.techeras.com
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 2 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Guía de Tareas
PowerBuilder Distributed
Developer v10.0
2005 TechEra e-Learning
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 3 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
PowerBuilder Distributed Developer v9.0 Guía de Tareas
Procesos de Desarrollo .............................................................................................................1 Iniciando el EAServer ..............................................................................................................3 Iniciando el Jaguar Manager....................................................................................................4 Revisando el Archivo Server Log ..........................................................................................5 Definiendo un componente EAServer....................................................................................6 Desplegando el Componente al EAServer.............................................................................7 Conectándose al EAServer ......................................................................................................9 Generando un Proxy .................................................................................................................11 Inicializando un Proxy..............................................................................................................13 Invocando un Método en un Componente EAServer...........................................................l4 Poniendo mensajes en el EAServer Log ................................................................................l5 Depurando un Componente Remoto ......................................................................................16 Instalando un Connection Cache.............................................................................................l7 Obteniendo una Conexión de la base de datos......................................................................18 Recuperando un DataWindow en un Componente EAServer ............................................20 Actualizando un DataWindow en un Componente EAServer ............................................22 Recuperando un ResultSet Object en un Componente EAServer ......................................24 Definiendo un Componente EAServer Ancestro..................................................................27 Actualizando un Objeto para ser un Componente EAServer..............................................29 Invocando los métodos de otro componente del Servidor...................................................30 Proporcionando soporte para el Instance Pooling.................................................................31 Proporcionando soporte para la Administración de la Transacción...................................32 Definiendo un Componente Service.......................................................................................34 Manejando los errores de Comunicación...............................................................................36 Monitoreando un servidor EAServer en Runtime ................................................................37 Creando un servidor EAServer................................................................................................38 Configurando un EAServer Listeners ....................................................................................39
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 4 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Procesos de Desarrollo
En general, Ud. Sigue estos pasos de alto nivel cuando construye objetos de negocio para ser almacenados en EAServer.
1. Definir un componente EAServer involucra crear el objeto, codificar los eventos EAServer, y adicionar sus métodos y propiedades. Estos pasos incluyen el uso y creación de componentes ancestros.
2. Desplegar el componente involucra construir un objeto project que especificar las propiedades del componente como el manejo del ciclo de vida, la administración de las transacciones y otros.
3. Conectarse al EAServer involucra crear y publicar un objeto connection. Ud. puede comunicarse con múltiples componentes a través de una sola conexión, por consiguiente, la conexión es típicamente establecida al iniciar la aplicación.
4. Generar un EAServer proxy involucra construir un objeto project que creará los objetos proxy para los componentes EAServer seleccionados.
5. Iniciar el proxy involucra usar el método CreateInstance( ) para asociar el proxy con el objeto connection.
6. Invocar los métodos usa la notación punto. Una vez que se tiene referencia al componente, Ud. puede llamar a métodos del componente como si estos fueran objetos locales.
Procedimientos
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 5 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Invocación de Métodos
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 6 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Iniciando el EAServer
1. Iniciar el servidor EAServer (Start | Programs | Sybase | EAServer | Jaguar Server). Una ventana en modo DOS es mostrada, si Ud. vee el mensaje “Accepting connections”, el servidor EAServer está ejecutándose y esperando por sus requerimientos.
Si Ud. no ve el mensaje “Accepting connections”, el servidor EAServer no se ha iniciado satisfactoriamente. Consulte la información de error del archivo jaguar.log. Seleccionando Start | Programs | Sybase | EAServer | Jaguar Server ejecuta el archivo batch serverstart.bat localizado en el subdirectorio \bin. Por defecto, este archivo inicia el servidor EAServer. Ud. puede crear su propio servidor en el EAServer Manager para almacenar sus componentes relacionados. Nota: Ver "Creando un Servidor EAServer " en esta guía para información sobre definir su propio servidor EAServer. Para iniciar un servidor diferente al de Jaguar, poner el nombre del servidor como un parámetro en la línea de comando como se muestra a continuación:
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 7 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Iniciando el EAServer Manager
1. Iniciar el EAServer Manager (Start | Programs | Sybase | EAServer | EAServer Manager).
2. Conectarse al EAServer Manager con el servidor EAServer deseado: Seleccionar Tools | Connect | EAServer Manager para abrir la
ventana de diálogo del Login. Ingresar un “user name” y un password. El user name es
jagadmin es por defecto definido para Ud. Esto no requiere de password.
Ingrese el host name. Es el nombre de su máquina, que se configura cuando se instala el EAServer.
Especificar el número de puerto. Por defecto, EAServer escucha los requerimientos para IIOP por el Puerto 9000.
Cuando Ud. selecciona Start | Programs | Sybase | EAServer | EAServer Manager, Ud. realmente está ejecutando un archivo batch. El archivo batch es jagmanager.bat, que se encuentra ubicado en el subdirectorio \html\classes.
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 8 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Revisando el Archivo Server Log
1. Iniciar el EAServer Manager. 2. Expandir el folder Servers y luego expandir el servidor que se desea
para mostrar el File Viewer. 3. Click derecho al Log File Viewer y seleccionar File Viewer Display
desde el popup menú y abrir el window File Viewer.
Notas: jaguar.log es almacenado en el subdirectorio \bin en el directorio EAServer. Ver el archivo jaguar.log lo alertará de cualquier error o warning que encuentre el EAServer. Un componente EAServer también puede escribir al log. Ud. puede usar este archivo para hacer un seguimiento a la ejecución de sus componentes. Si Ud. realiza un shut down al servidor EAServer, Ud. también cerrará el File Viewer y lo reiniciará. Considere crear un acceso directo para abrir el archivo jaguar.log en Notepad. Usando un shortcut para ver el jaguar.log es mucho más rápido que iniciar el EAServer Manager en cada momento que se desea ver File Viewer. El shortcut es particularmente usado durante el desarrollo cuando se tiene errores en el servidor. El archivo jaguar.log es refrescado cada momento que se inicia el servidor EAServer.
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 9 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Definiendo un Componente EAServer
1. Ejecutar el wizard EAServer Component desde el diálogo New… Si un objeto application y una librería no existen para este
nuevo componente, abrir el wizard EAServer Component desde el tab Target.
Si se tiene un PBL, pero necesita un objeto de negocio y el objeto project de despliegue, escoger el wizard EAServer Component en el tab PB Object.
Si se tiene ambos el PBL y el objeto de negocio, entonces seleccionar el wizard EAServer Component desde el tab Project.
El wizard lo dirige a través de las ventanas de diálogo: a. Especificar la Librería de Destino Nota: Si Ud. Abre el wizard desde el tab Targets, las ventajas de diálogo Specify New Application y Library and Specify Application Library SearchPath se abren antes del Specify Destination Library. b. Especificar la Interface Implementation. c. Especificar el nombre del Componente EAServer d. Especificar la información del Servidor e. Especificar el nombre del Package f. Especificar el tipo de Componente g. Especificar la opción Instance Pooling h. Especificar el Transaction Support i. Especificar las opcioens de Component Interface Build j. Especificar las otras opciones del Componente k. Especificar el Project l. Especificar las opciones del Dynamic Library m. Prepárese para crear el Componente EAServer
2. Adicionar propiedades y métodos para el componente en el painter User Object. Un componente EAServer necesita un objeto application para ejecutarse dentro del EAServer. EAServer almacena el PowerBuilder virtual machine y crea una sesión PowerBuilder para ejecutar el componente. La información de la sesión PowerBuilder es tomada desde el objeto application. Porque EAServer almacena el PowerBuilder virtual machine, Ud. puede usar la riqueza de la orientación a objetos de PowerBuilder y con sus componentes PowerBuilder. Ud. puede tener muchos componentes en una sola librería usando un simple objeto application.
Procedimientos
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 10 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Desplegando un Componente al EAServer
1. Iniciar el EAServer si no está iniciado. 2. Si un objeto project para desplegar el componente EAServer no existe,
definir un nuevo objeto project usando el wizard EAServer Component en el tab Project.
Nota: el wizard EAServer Component en el tab Project es un sub conjunto de los wizards EAServer Component en el tab Target y en tab PB Object. El wizard en los tabs Target y PB Object crean ambos un componente EAServer y objeto project para desplegar el componente. El wizard en el tab Project crea un objeto project para un componente existente.
El wizard del tab Project lo guía a través de estas ventanas de diálogo:
a. Especificar la Librería de destino b. Especificar el Project c. Seleccionar los Componentes d. Especificar la información del Servidor e. Especificar el nombre del Package f. Especificar el tipo de Componente g. Especificar las opciones del Instance Pooling h. Especificar el Transaction Support i. Especificar las opciones del Component Interface Build j. Especificar las otras opciones del Componente k. Especificar las opciones del Dynamic Library l. Listo para crear el Componente EAServer
3. Abrir el objeto project creado por el wizard. Opcionalmente, modificar cualquiera de las propiedades.
4. Deploy al objeto project para desplegar el componente(s) al EAServer.
Cuando Ud. construye el objeto project, PowerBuilder y EAServer realizan muchos pasos para desplegar su componente al EAServer e implementar CORBA (Common Object Request Brokerage Architecture). Todo lo necesario es hecho en el EAServer repository. Ud. puede ver esto en el System Tree con PowerBuilder.
Procedimientos
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 11 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
el PBD que contiene el componente desplegado está en un directorio EAServer en el fólder Component dentro del folder Repository.
Notas: Si Ud. usa objetos DataWindow u otros objetos referenciados dinámicamente, la propiedad Include Unreferenced Objects in Consolidated PBD en el objeto project es importante activarlo en el objeto project. PowerBuilder crea un PowerBuilder dynamic Library (PBD) para EAServer diferentemente de como un PBD es generado para una aplicación PowerBuilder. Para EAServer, PowerBuilder incluye solo los objetos referenciados en el PBD. Este proceso es similar como cuando PowerBuilder crea un EXE. Por ejemplo, si un componente declara una variable de una estructura, la estructura debe estar incluida en el PBD porque esto está directamente referenciado.
// d_customers no está referenciado y no será // incluido en el PBD ds_data.dataobject = "d_customers"
para asegurarse que el objeto DataWindow es incluido, verificar la propiedad Include Unreferenced Objects in Consolidated PBD que esté incluido. Ud. puede también hacer uso del archivo PowerBuilder resource (PBR) para incluir recursos necesarios como bitmaps, read-only text o archivos INI, y objetos DataWindows en el PBD.
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 12 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Conectándose al EAServer
1. Iniciar el servidor EAServer sino se encuentra iniciado. 2. Definir un nuevo objeto connection usando el Connection Object wizard en
el tab PB Object. El wizard lo dirige a través de estas ventanas de diálogo: a. Specify Destination Library – Identifica la librería donde van a ser
creado los nuevos objetos b. Specify Connectivity (SQL database o EAServer) Ud. necesitará
especificar la conexión al EAServer. c. Specify Server Information d. Specify Package Name – Identifica el package para ser usado por defecto Nota: al crear un comopnente en el package por defecto, Ud. No necesitará especificar el nombre del package. Cuando el componente no está en el package por defecto, Ud. Debe especificar el package y componente como el segundo argumento para el método CreateInstance( ) usando este formado: <package>/<component>. e. Name Connection Object f. Specify Connectivity Source Info g. Ready to Create Connection Object
3. Crear el objeto connection como cualquier otro objeto. Ud. necesita declarar
una variable para el objeto connection con el alcance apropiado.
n_jaguar_connect gn_connect gn_connect = CREATE n_jaguar_connect
4. Llamar a la función ConnectToServer( ) y verificar los errores.
long ll_rc ll_rc = gn_connect.ConnectToServer() IF ll_rc <> 0 THEN // process error END IF
Notas: el wizard crea un descendiente del connection system class. Las propiedades publicadas son los siguientes:
Propiedad Descripción Ejemplo Application Default package Finance Driver El driver EAServer Jaguar Location <EAServer
server>:<port> Localhost 9000
User ID EAServer ser User ID Jagadmin Password EAServer server
password
Procedimientos
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 13 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
En el ambiente de desarrollo, Ud. Puede tener su cliente y servidor EAServer en la misma máquina físicamente en este caso Ud. Puede usar la ubicación de su máquina como servidor.
Típicamente, la aplicación cliente se ejecutará en una máquina diferente del servidor EAServer. En este caso, Ud. Debe configurar el EAServer listeners. Ver “Configurando un EAServer Listeners” en esta guía.
Configurando un EAServer listeners
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 14 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Generando un Proxy
1. Iniciar el EAServer si no está iniciado. 2. Si un objeto project para generar un proxy para un componente
EAServer no existe, entonces crear un proxy project. Use el EAServer Proxy Wizard en el tab Project para definir un project que puede crear un proxy. El wizard lo dirige a través de estas ventanas de diálogo: a. Specify Destination Library b. Specify Project c. Select Server Profile d. Select Components e. Specify New Proxy Library Name f. Specify Build Options g. Ready to Create EAServer Proxy
3. Después que el objeto project es creado, click en el icono Deploy.
Este paso genera un nuevo proxy para el componente EAServer que expone todos los métodos públicos y variables de instancias.
4. El proxy puede verse en el System Tree. Si Ud. Exporta el objeto, Ud. verá solo la interfaz, no el código de implementación.
5. Note cualquier excepcion que es creado con el proxy. Estas exceptions necesitarán ser capturadas en cualquier código cliente invocando los métodos.
Cuando Ud. crea un proxy para un componente, Ud. puede especificar si el nombre del package es juntado con el nombre del componente. Para hacer esto Ud. use el checkbox Prepend EAServer package name to component name. Cuando esta propiedad es seleccionada, la clase proxy que es creado es nombrada usando este formato: <PACKAGE>_<COMPONENT> Por ejemplo, si su nombre de package es finance y el nobmre de su componente loan, el resultado del nombre de la clase proxy es: finance_loan Ud. puede usar este nombre cuando declara cualquier variable para su clase proxy. La llamada a la función CreateInstance( ) no cambiará.
Procedimientos
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 15 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
La opción prepend package name es usado para identificar únicamente a componentes. Esto es posible para componentes diferentes con el mismo nombre para desplegarlos al EAServer. Anteponiendo el nombre del package asegura que Ud. Use el componente que Ud. Desea y no cualquier otro componente con el mismo nombre. En la ventana de diálogo Select Components en el wizard, Ud. puede seleccionar un package entero en vez de un solo componente. Esta opción construye un project que crea proxys para todos los componentes en el package seleccionado.
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 16 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Inicializando un Proxy
1. Declare una variable de referencia para su objeto proxy. Use el tab Proxy del browser para identificar el nombre exacto de la clase proxy. Ud. puede también ver la información en el System Tree.
// Asuma que ha creado un proxy n_loan para el // componente remoto n_loan // Si Ud. tiene antepuesto el nombre del package, este // proxy será de la clase finance_n_loan // Declare una variable de referencia para el proxy n_loan in_loan
2. Llamar a la función CreateInstance( ) del objeto connection.
Verificar los errores. El primer argumento debe ser una variable de referencia para la clase proxy (definido en el paso 1). El segundo argumento debe ser un string en el formato de <package>/<component>.
ll_rc = gn_connect.CreateInstance (in_loan, & "finance/n_loan") IF ll_rc <> 0 THEN //proceso de error END IF
El nombre de la clase de su referencia del proxy debe coincidir con el nombre de la clase proxy. Para los ejemplos que siguen, asuma que el nombre del objeto PowerBuilder es n_loan y esto pertenece al package finance. También asuma que Ud. quiere declarar un variable de referencia llamada in_loan para el proxy. Como debe ser declarado la variable?
Nombre del Componente EAServer
Prepend package name to component
Definición de la Clase Proxy
n_loan No n_loan in_loan n_loan Yes finance_n_loan
in_loan Loan No loan in_loan Loan Yes finance_loan
in_loan
Nota: PowerBuilder no es case-sensitive, pero EAServer si lo es.
EAServer no instancia al componente con la llamada en el CreateInstance( ), el componente está instanciado en la primera llamada del método. CreateInstance( ) asocial el proxy con el objeto connection (ORB) para que pueda ser encontrado en el servidor EAServer.
Procedimiento
Declarando una variable de referencia al proxy
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 17 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Invocando un Método en un Componente EAServer
Luego de que ha instanciado el componente remoto satisfactoriamente, Ud. Puede invocar los métodos del objeto como lo haría típicamente usando la notación de punto:
object.method( ) Por ejemplo, que el componente Loan contiene un méotod llamado calculate(). También asuma que el componente ha sido instanciado satisfactoriamente y es referenciado por in_loan. Para invocar el método remoto calcuate() codifique lo siguiente:
payment = in_loan.calculate( amount, months ) Caulquier exceptions que su componente levante debe capturado en el cliente.
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 18 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Poniendo mensajes en EAServer Log
1. Crear un objeto ErrorLogging usando el método GetContextService().
// Declare una variable de instancia protected de tipo: // ErrorLogging Protected: ErrorLogging iel_jag // Use GetContextService para retornar una referencia al // objeto this.GetContextService("ErrorLogging", iel_jag)
2. llamar al método log( ) del objeto ErrorLogging si se desea escribir
información al archivo jaguar.log. El método log( ) necesita un string:
iel_jag.log("Iniciando Actualización para " + & this.classname())
Notas: la función GetContextService( ) es usado para obtener una referencia al objeto ErrorLogging cada vez que la instancia del componente es ligado al cliente. Por consiguiente, el evento Activate es un buen lugar para crear este objeto. Si Ud. desea escribir información en el evento Constructor. Ud. tiene que llamar a la función GetContextService( ) antes de llamar a la función log( ).
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 19 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Depurando un Componente Remoto
1. Inicie PowerBuilder y seleccione la aplicación que contiene el componetne que se desea depurar.
2. Ejecutar el debugger. 3. Poner los break points apropiados típicamente como Ud. Lo haría en
el depurador. 4. Click al icono Start Remote Debugging para abrir la ventana de
diálogo para especificar la información del servidor. 5. Especificar la información del servidor y click al botón Next para
abrir la ventana de diálogo para el Select Components. 6. Seleccionar los componentes que se desean depurar y click al botón
Finish. El debugger, almacenado por el servidor EAServer, ahora esperará hasta que un método de un componente sea invocado.
7. Iniciar una Segunda sesión de PowerBuilder. Ejecutar la aplicación cliente. Cuando la aplicación cliente llama a un método remoto que está configurado para depurarse, el cliente deberá ser bloqueado. Cambiar a la sesión de depuración remota que Ud. empezó antes. Note que la ejecución ha parado en el breakpoint. Ud. puede ahora ver las variables y el código. El cliente será desbloqueado cuando el componente ha completado la ejecución y retorna el control al cliente.
Nota: Ud. no puede depurar el evento Activate. Poner mensajes en el Server log. El cliente y el servidor EAServer no tienen que ser ejecutados en la misma máquina. Para depurar debe desplegar el componente con la propiedad Remote Debugging pueta en TRUE. En un project que despliega el componente, seleccionar el tab Components de la hoja de propiedades. Asegurarse que el checkbox Remote Debugging es seleccionado. Para la depuración remota su servidor EAServer debe tener también el Debug Role definido. Para Adicionar el Rol Debug: 1. Iniciar el EAServer Manager y abrir el fólder Role en el tree view. 2. Click derecho y seleccionar New Role para abrir el diálogo New Role. 3. Ingresar el Debug Role en el edit field y click Create New Role. 4. Click en OK en las propiedades del diálogo.
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 20 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Instalando un Connection Cache
1. Inicar el EAServer Manager y conectarse al servidor. 2. Click derecho al fólder Connection Caches. 3. Seleccionar New Connection Cache…. 4. Ingresar el nombre del connection cache y click en Create New
Connection Cache. 5. Especificar las propiedades en el tab Driver. Use la siguiente tabla
para seleccionar el DLL o Class Name apropiado.
Database DLL Client Library 11.x Libjct.dll ODBC Odbc32.dll JDBC 1.1 The Java class name for the driver OCI 6.x Ociw32.dll OCI 8.x Oci.dll OCI 9.x Oci.dll
6. Especificar las propiedades en el tab General. Use la siguiente tabla
para seleccionar lo valores apropiados para las propiedades del Server Name.
Connection Library
Descripción Ejemplo
Client Library 11.0
Server name from: • sql.ini (NT) • interfaces file (Solaris)
Sales
ODBC ODBC data source Name
EAS Demo DB V3
JDBC 1.1 Data source URL Always starts with jdbc:. The rest is vendor-specific.
//JConnect jdbc:sybase:Tds:sales:5000 //JDBC-ODBC driver jdbc:odbc:LosLogos
OCI 7.x / OCI 8.x
Server name in the form of: tns:<service name>
tns:LosLogos
7. Reiniciar el servidor EAServer. En el EAServer Manager, abrir la
hoja de propiedades del nuevo connection cache. En el tab General, click a Ping para asegurarse que EAServer puede conectarse al origen de datos.
Nota: Enable cache-by-name access es una opción conveniente para codificar. Esto le permite que Ud. Especifique el nombre del connection cache en su código en lugar del nombre del servidor, el user name, y password. Si los parámetros de conectividad cambian, Ud no tiene que
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 21 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
hacer cambios en su código si Ud. Está usando el nombre del connection cache. Por otra parte, Ud. tendría que cambiar su código.
Obteniendo una conexión de la Base de datos
1. Declare una variable de instancia protected de tipo transaction. 2. Instancie el transaction si este no ha sido creado. El evento Activate
para conectarse es un buen lugar. 3. Publique el transaction como Ud. Típicamente lo haría. Si ud. Está
usando un objeto TransactionServer para manejar las transacciones, ponga UseContextObject en Yes en el dbparm. Si Ud. desea use el nombre del connection cache, ponga la propiedad CacheName como se definió en el EAServer Manager.
4. Use la sentencia connect y verifique los errores como Ud. típicamente lo haría.
5. Desconectarse de la base de datos en el evento Deactivate o llamar a un método desde el evento Deactivate es un buen lugar para este código.
Asuma que el nombre del connection cache es EASDemoDB y esto se conecta a un ODBC data source.
Nota: para conectarse usando el cache name, el connection cache definido en el EAServer Manager debe tener el checkbox Enable cache-by-name access seleccionado. Ud. puede encontrar esta propiedad en el tab Cache de la ventana de diálogo Connection Cache Properties.
Si Ud. no está usando el cache name cuando se conecta, Ud. debe especificar las propiedades de conexión. Aquí esta un ejemplo:
// Profile EAS Demo DB itr_trans.DBMS = "ODBC"
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 22 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
itr_trans.DBParm = "ConnectString='DSN=EAS Demo DB;” & “UID=dba;PWD=sql',UseContextObject='Yes'" /* nota: Ud. usa una caracter de continuación (&) */
Para adicionar control sobre como EAServer maneja los requerimientos de conexión, referirse a la documentación para el Get Connection Option y Release Connection Option,y Proxy User Name. Si la conexión falla, Ud. Puede retornar -1 en el evento Activate, que resulta en el retorno inmediato del control del cliente. La instancia es destruida y el método invocado no es ejecutado. Ud. debe limitar la cantidad de tiempo que el componente tiene una conexión para tenerlo disponible para otro requerimiento. Ud. puede conectarse y descontarse con cada método que requiere acceso a la base de datos. Si el componente es stateless, Ud. puede conectarse en el evento Activate y desconectarse en el evento Deactivate. Porque el componente stateless, dispara el evento Activate antes de ser llamado. Entonces su método se ejecutará. Cuando el método se complete, el evento Deactivate es disparado. Considere crear un método en un componente ancestro que se conecte a la base de datos. En el evento Activate de los descendientes, Ud. puede llamar a este método para conectarse si su componente necesita conectarse a la base de datos. Cuando Ud. emite el CONNECT USING itr_trans; PowerBuilder automáticamente no crea una conexión física a la base de datos como lo haría en un ambiente two-tier. PowerBuilder pregunta al EAServer connection cache para una conexión válida. Si una conexión está disponible en el cache, entonces una conexión es retornada. El objeto transaction está ahora asociado con una conexión válida. Si una conexión no está disponible en el cache, una conexión física es establecida. Tip: Ud. puede pegar el código para publicar el objeto transaction. 1. Abrir el diálogo Database Profiles en PowerBuilder. 2. Seleccionar la base de datos para desear conectarse y click en el botón Edit. 3. Seleccionar el tab EAServer/MTS. 4. Seleccionar el checkbox Use Transaction Context Object para usar el
objeto TransactionServer y los state primitives para manejar su transacción. 5. Seleccionar el checkbox Access Cache by Name para accesar al connection
cache por su nombre cn se definió en el EAServer Manager. 6. Opcionalmente, Ud. puede especificar los valores para las propiedades
GetConnectionOption, ReleaseConnectionOption y ProxyUserNames. 7. Seleccione el tab Preview. 8. El código para publicar un objeto transaction es mostrado. Click al botón
Copy. Entonces pegar el código en su script y modificar el código necesario.
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 23 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Recuperando un DataWindow en un Componente EAServer
Asuma que Ud.desea mostrar datos en un DataWindow nombrado dw_1 que ds recuperado de un componente remoto. Asuma que el cliente tiene su conexión satisfactoria al EAServer con un objeto connection nombrado gn_connect. Vea “Conectándose al EAServer” en esta guía. También asuma que el componente ha sido instanciado satisfactoriamente y la variable de referencia es nombrado in_customer. Vea “Inicializando un Proxy” en esta guía. 1. Obtener una conexión desde un EAServer connection cache. Vea
“Obteniendo una Conexión de la Base de Datos” en esta guía. 2. Declare una variable de instancia protected para un DataStore. 3. Después el código que obtiene una conexión en el evento Activate, codifique
lo siguiente: a. Crear el DataStore si este no ha sido creado. b. Asignar el objeto DataWindow. c. Asociar un objeto transaction con el SetTransObject( ).
4. Definir una función que toma un argumento blob por referencia y retorna un long.
5. Recuperar el DataStore con la función Retrieve( ). 6. Empaqueta el DataWindow en el argumento blob con GetFullState( ). 7. Return. Ud. podría retornar el número de filas recuperadas si es satisfactorio
y retornar –1 si hubo un error. Codifique lo siguiente cada vez que Ud. desee recuperar el DataWindow. 1. Declare una variable local de tipo blob. 2. Llame al método remoto pasando la variable blob. 3. Si la llamada fue satisfactoria, apliqué los cambios al DataWindow con
SetFullState( ). Asegúrese que SetFullState( ) sea satisfactorio.
Procedimiento
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
______________________________________________________________________________________________ Lab- 25 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Actualizando un DataWindow en un Componente EAServer
Asuma que Ud. Desea recuperar los clientes desde un componente, modificar los datos en el cliente, y entonces actualizar lo datos desde un componente. Asuma que el método es llamado save( ). Esto es una extención del escenario en la sección anterior, “Recuperando un DataWindow en un Componente EAServer.” Refiérase a esta sección como sea necesario. También referirse a “Proporcionando soporte para la Administración de la Transacción.” Asumiento que Ud. Tiene codificado los eventos Activate y Deactivate y la función de recuperación de datos, codificar lo siguiente: 1. Declarar una variable TransactionServer. 2. Definir una función que tome un argumento blob y retorne un long. El
argumento blob debe tener que ser poblado en el cliente con la función GetChanges( ). Aquí está un ejemplo de declaración:
long save ( blob lbl_data )
3. Aplicar los cambios hechos en el cliente al DataStore con SetChanges( ). 4. Llamar a la función Update() del DataStore para actualizar los cambios a la
base de datos. 5. Si la actualización es satisfactoria, llamar al State Primitive SetComplete( )
para emitirle un commit al EAServer. Si la actualización falla, llamar al SetAbort( ).
6. Return. Ud podría retornar el número de filas recuperadas si es satisfactorio y retornar –1 si es que hubo fallas.
1. Declare una variable local blob para almacenar los cambios de usuario. 2. Llamar a la función AcceptText del DataWindow para validar el contenido
del control editado. 3. Empaquetar los cambios de usuario en el blob con GetChanges( ). 4. Llamar al método save( ) del componente, pasando el blob cambiado. 5. Si la actualización es satisfactorio, llamar a la función ResetUpdate( ) para
reestablecer los flags actualizados. Si la actualización falla, procesar el error y no llamar al ResetUpdate( ).
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 26 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Notas: El objeto DataWindow debe ser asignado al DataStore antes de que se realice un SetChanges( ). Por consiguiente, cada objeto DataWindow debe existir en el servidor o el DataStore debe tener poblado con un SetFullState( ). Ud llama a la función AcceptText( ) en el cliente para validar el contenido de los campos y puedan ser movidos al primary buffer. Recuerde que la actualización es realizada en el componente. Por consiguiente el AcceptTexr por defecto en la función Update( ) no se aplica al DataWindow cliente.
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 27 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Recuperando un objeto ResultSet en un Componente EAServer
1. Defina un método en un componente que toma un objeto ResultSet como argumento por reference y retorna un long.
2. Instanciar, inicializar y recuperar un DataStore como Ud. Lo haría típicamente.
3. Llame a la función GenerateResultSet( ) para publicar el argumento ResultSet desde el DataStore. Verifique el código de retorno.
4. Retorne satisfactorio o falla.
1. Declare variables locales a los objetos ResultSet y DataStore. 2. Invoque el método del componente, pasando la variable local
ResultSet. 3. Si la llamada al método es satisfactorio, entonces realizar lo
siguiente: a. Crear un DataStore. b. Cargue el ResultSet en un DataStore con la función
CreateFrom(). c. Compartir el DataStore con el control DataWindow para mostrar
los datos. Use la función ShareData().
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 28 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Notas: el objeto DataWindow debe ser asignado al DataStore en el componente y el control DataWindow en el cliente. El objeto DataWindow no necesita ser asignado al DataStore en el cliente. Use el DataStore en el cliente como el primary buffer cuando Ud. Comparte datos. El control DataWindow debe ser el secondary buffer. Cuando Ud. declara la función, el ResultSet no está en el dropdown list para los tipos de argumento. Ingresar ResultSet directamente en el text box del dropdown.
DataWindow Synchronization
ResultSet
Pros La tecnología DataWindow soportada en PowerBuilder, PowerJ y HTML. El objeto DataWindow no tiene que ser instalado en el lado del cliente. Si la definición del objeto DataWindow cambia, la aplicación cliente no tiene que realizar el redespliegue.
Más estándard y abierto a la estructura de datos (CORBA standard). Puede ser manipulado desde una variedad de herramientas.
ResultSet versus La Sincronización de DataWindow
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 29 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Cons Clientes que no soporten
DataWindow/DataStoree No pueden manipular lo que retorna el blob.
No construye un mecanismo para capturar los cambios hechos en la aplicación cliente y enviar esto al componente EAServer.
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 30 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Definiendo un Componente EAServer Ancestro
Para usar la funcionalidad del EAServer en un componente, Ud. Puede declarar varias variables de instancias. Lo más comúnmente usado es el manejo de Transacciones, error logging, y la conexión. Definir una variable de instancia protected para cada uno de estos objetos. He aquí un ejemplo: Protected: TransactionServer its_jag ErrorLogging iel_jag Transaction itr_trans Un componente EAServer debe tener eventos EAServer relacionados en adición a los estándares Constructor y Destructor. El servidor EAServer disparará estos eventos. Seleccionar Insert | Event desde el menu en el painter del User Object y adicionar los siguientes eventos EAServer:
Event Name
Returns Type
Event ID
Activate Long pbm_component_activate CanBePooled Long pbm_component_canbepooled Deactivate Long pbm_component_deactivate
El evento Activate es llamado cada vez que una instancia de un componente es ligado al cliente. Este evento es usado para inicializar variables y obtener los recursos necesarios. Aquí esta algunos ejemplos de código en el evento Activate:
// Crear un objeto ErrorLogging this.GetContextService ( "ErrorLogging", iel_jag ) // Identificar que este evento dispara el log iel_jag.log ( "ACTIVATE de " + this.classname() ) // Obtener un TransactionServer para manejar transacciones IF this.GetContextService ( "TransactionServer", & its_jag ) <> 1 THEN // error de log return -1 END IF // Obtener una conexión desde un connection cache IF NOT IsValid ( itr_trans ) THEN itr_trans = CREATE transaction END IF itr_trans.dbms = "ODBC" itr_trans.DBParm = & "UseContextObject='Yes',CacheName='<<cachename>>'" CONNECT USING itr_trans; IF itr_trans.sqlcode <> 0 THEN // error de log return -1 END IF
El evento CanBePooled es llamado justo antes del evento Deactivate cuando una instancia es desligada del cliente. CanBePooled es llamado solo cuando la opción Pooling es desactivada. Si el evento retorna un 1, entonces la instancia es reusada.
// Identificar que este evento dispara en el log iel_jag.log ( "CANBEPOOLED de "+ this.classname() )
CanBePooled
Activate
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 31 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
/* Realiza lógica para determinar si la instancia debe ser reusada. Retorna 1 si esto debe ser pooled. Retorna otro valor diferente de 1 si esto debe ser destruido */
El evento Deactivate es llamado cada vez que una instancia es desligada de un cliente. Este evento es bueno para liberar cualquier recurso usado por la instancia, como un connection cache.
// Identificar que este evento dispara el log iel_jag.log ( "DEACTIVATE de " + this.classname() ) // Liberar la conexión DISCONNECT USING itr_trans;
Para cada componente, Ud. Necesita adicionar los eventos Activate, Deactivate, y CanBePooled para tomar completa ventaja de la funcionalidad de EAServer.:
Manualmente adicionar cada uno para cada custom class user object (CCUO). Seleccionar la opción Insert | Event en el painter del User Object.
Si el CCUOs tiene un ancestro común, Ud. puede manualmente insertar los eventos listados en la tabla anterior al ancestro. Los eventos son entonces disponibles para los descendientes.
Si el CCUOs no tiene un ancestro común, o si Ud. desea adicionar una nueva capa específicamente al código relacionado al EAServer, Ud. puede crear el componente ancestro usando el wizard EAServer Component. Ud. puede entonces hacer este componente ancestro para un CCUO existente.
Asuma que un CCUO llamado n_customer no tiene un ancestro (heredado directamente dede el NonvisualObject system class). También asuma que Ud. Desea hacer ancestro el n_ancestor para n_customer. 1. Click al objeto n_customer desde el System Tree. 2. Seleccionar Edit Source desde el menu de contexto. 3. Cambiar las dos instancias de NonvisualObject a la nuevo clase ancestro . En su caso, cambiar NonvisualObject por n_ancestor. Grabar el archivo.
$PBExportHeader$n_customer.sru forward global type n_customer from nonvisualobject end type end forward global type n_customer from nonvisualobject end type global n_customer n_customer
4. Salir del painter y grabar sus cambios. Nota: los eventos EAServer no son obligatorios. Ud. podría desplegar CCUOx directamente al EAServer. Sin embargo, si el componente es desplegado como stateless, Ud. No puede inicializar la instancia. Esto podría crear errores impredecibles, , que podría ser muy difícil de depurar.
Actualizando un Objeto a un Componente EAServer
Deactivate
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 32 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Para realizar la migración se tiene que seguir los siguientes pasos para lograr una migración adecuada, ejemplos como el de cambiar Commits y Rollbacks por funciones SetComplete( ) y SetAbort( ). Si una variable de instancia es declarada pública, hacerla que sea
protegida, porque algunos objetos de PowerBuilder no son soportados por CORBA. Si se declara en el objecto ancestro EAServer, entonces borrar la variable de instancia pública y usar la variable del ancestro.
Si un método retorna o toma un argumento EAServer no soportado,
entonces cambiar el tipo del método. Cambie el tipo de dato o si la función no tiene que ser pública, hacerla privada o protegida.
Para acceder a la base de datos, obtener una conexión desde un
connection cache. No se puede pasar un objeto transaction en un método del componente.
Para el manejo de Transacciones:
o Reemplazar el Commit de la base de datos con SetComplete().
o Reemplazar el Rollback de la base de datos con SetAbort().
o Asegurarse que en el dbparm el UseContextObject = ‘Yes’ de un objeto transaction sea ubicado.
Antes de retornar un método :
o Si es satisfactorio, invocar SetComplete(). o Si falla, escribir un mensaje al archivo log e invocar
SetAbort(). Remover todas las llamadas a las funciones MessageBox(). Escribir
los mensajes en el archivo Log del servidor. Si la llamada entre componentes existe, reemplazar la inicialización
típica de los objetos PowerBuilder (la sentencia create) con la creación a través del Objeto TransactionServer (y el método CreateInstance). Use la función IsTransactionAborted() desde la llamada de entre componentes.
Configurar el ciclo de vida y las propiedades transaccionales en un
proyecto de despliegue PowerBuilder o en el EAServer Manager. Ponga atención particular a las siguientes propiedades:
o Nombre del Package o Nombre del componente EAServer o Tipo de componente o Transaction support o Automatic demarcation/deactivation
Soporte del instance pooling
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 33 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Invocando un método de otro Componente de Servidor
Asuma que Ud. tiene los siguientes componentes definidos en un package llamado orderentry: Componente Método n_cart PlaceOrder( ) n_order Add( int ai_cust )
En algún punto en la lógica del método PlaceOrder( ) de n_cart, Ud. llamará al método Add( ) de n_order. 1. Cree un objeto TransactionServer usando el método GetContextService( ).
Típicamente el evento Activate es un buen lugar para hacer esto. Use una variable de instancia para que Ud. Lo pueda usar en cualquier evento.
TransactionServer its_jag IF this.GetContextService ( "TransactionServer", & its_jag ) <> 1 THEN // proceso de error END IF
2. Declare una variable de referencia para la clase que Ud. Desea crear.
n_order ln_order 3. Obtener una referencia para otro componente usando el método
CreateInstance( ) del objeto TransactionServer. El primer parámetro debe ser una variable de referencia de la clase que Ud. desea crear. El segundo parámetro debe ser una cadena con este formato:
<PACKAGE>/<COMPONENT> IF its_jag.CreateInstance ( ln_order, & "orderentry/n_order" ) <> 0 THEN // proceso de error END IF
4. Invocar el método usando la notación estándar object.method. ln_order.Add (li_cust_id)
5. (Opcional) Verificar para ver donde el componente vota para abortar la transacción usando la función IsTransactionAborted( ). IF its_jag.IsTransactionAborted() THEN its_jag.SetAbort() return ELSE // Continua el proceso END IF
Notas: el método GetContextService("TransactionServer", its_jag ) instancia un objeto TransactionServer y ubica la referencia en la variable its_jag (que es de tipo TransactionServer). El método CreateInstance( ) es un método de la clase TransactionServer. Este método es similar al método CreateInstance( ) del connection class y tiene similar propósito. Si Ud. está llamando un método de un componente que reside en una máquina diferente, Ud. No puede usar el TransactionServer. Ud. debe crear un objeto connection y conectarse al EAServer así como Ud. Lo hace la aplicación cliente.
Proporcionando soporte para el Instance Pooling
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 34 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Ud. puede poner el Instance Pooling de muchas maneras: 1. Especificar el Instance Pooling en el wizard EAServer Component 2. Especificar el Instance Pooling en el project que despliega el componente.
Seleccionar el tab Components de la hoja de propiedades.
3. En el EAServer Manager, seleccionar el tab Instances de la hoja de
propiedades del componente. 4. Retornar 1 desde el evento CanBePooled. Nota: el evento CanBePooled es llamado solo cuando la propiedad instance pooling no es seleccionado.
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 35 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Proporcionando Soporte para Administrar las Transacciones
Use la siguiente tabla para determinar el comportamiento que Ud. desea para sus componentes.
Component Instantiated By Transactional Behavior Client Do not participate in
transaction Other intercomponent call executing in a transaction
Do not participate in transaction
Other component not executing in a transaction
Do not participate in transaction
Component Instantiated By Transactional Behavior Client Do not participate in
transaction Other intercomponent call executing in a transaction
Participate in caller’s transaction
Other component not executing in a transaction
Do not participate in transaction
Component Instantiated By Transactional Behavior Client Begin new transaction Other intercomponent call executing in a transaction
Participate in caller’s transaction
Other component not executing in a transaction
Begin new transaction
Component Instantiated By Transactional Behavior Client Begin new transaction Other intercomponent call executing in a transaction
Begin new transaction
Other component not executing in a transaction
Begin new transaction
Not Support
Support Transaction
Requires transaction
Requires new transaction
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 36 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Después Ud. determina el tipo de transacción del componente, Ud. puede poner esta propiedad de dos maneras diferentes:
Poner la propiedad transaction support en el PowerBuilder project y entonces desplegar los componentes.
o
Poner el tipo de transaction en el EAServer Manager. Ir a la hoja de propiedades para el componente. Click al tab Transaction.
Use uno de los cuatro State primitives para votar por satisfactorio o falla de la transacción. también, use un State primitive para indicar si el componente debe ser desactivado o no. Use la tabla de abajo para seleccionar los State primitive apropiados. Desactiva No Desactiva Vote for success SetComplete( ) EnableCommit( ) Vote for failure SetAbort( ) DisableCommit( )
Estos métodos pertenecen al objeto TransactionServer. Para crear un objeto TransactionServer: 1.Declare una variable de tipo TransactionServer:
TransactionServer its_jag 2. Obtener una referencia para el objeto con el método GetContextService( ):
this.GetContextService("TransactionServer", &
Votando para satisfactorio o falla
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 37 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
its_jag)
Definiendo un Componente Service
Asuma que Ud. necesita un método llamado Stock que captura los precios de stock y lo hace disponible para una variedad de aplicaciones cliente. Los precios de stock son recuperados cada 10 minutos desde un servicio externo. Ud. desea crear un componente service que llamará a un método que obtendrá los stock cada 10 minutos y luego ir a esperar. 1. Defina un nuevo componente EAServer con el wizard EAServer
Component. Cuando le pida el tipo de componente, seleccionar Service Component como el tipo de componente. Un componente service tiene los métodos start( ), run( ), y stop( ).
2. Declare una variable de instancia protected de tipo boolean. Esta variable permite iniciar y parar el método run( ).
boolean ib_continue = TRUE
3. Codificar el método start( ). Típicamente Ud. inicializa variables y obtiene
los recursos requeridos. 4. Codificar el método run( ). El método run( ) debe hacer un loop forever y
periódicamente llamar al método Sleep( ). Ud. puede usar una variable boolean para controlar el loop. Inicializar la variable en TRUE. Aquí está un ejemplo:
boolean ib_continue = TRUE
El siguiente código le dice al componente Stock para refrescar su cache interno y esperar por diez minutos.
do while ib_continue iel_jag.log ("refrescar stocks…") in_stock.getData() Sleep ( 60*10 ) // sleep por 10 minutos loop
5. Codificar el método stop( ) si es necesario. El método stop( ) le permite
parar la ejecución del método run( ). EAServer no llama a este. Típicamente, Ud. podría crear otro componente que llame a los métodos stop( ) y run() y por consiguiente, y le permite controlar como el componente service opera.
6. Agregue el componente service a la propiedad services del servidor para que este sea creado cuando el servidor EASErver es iniciado. a. Iniciar el servidor EAServer y el EAServer Manager. b. En el EAServer Manager, ir a las propiedades del servidor. c. Seleccionar el tab All Properties. Ud. puede tener que desplazarse
por los tabs para encontrarlo. d. Doble-click en la propiedad com.sybase.jaguar.server.services para
abrir la ventana de diálogo Modify Property. e. Ingrese el nombre del component ID en el formato de
<Package>/<Component> como se muestra:
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 38 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
service/ServiceProduct
Notas: Reiniciar el servidor EAServer para ejecutar los nuevos servicios. Ud. puede especificar multiples componentes services en esta propiedad. Separe esto con una coma. Aquí está un ejemplo: service/ProductService,finance/Stock,service/Rates Cuando el servidor EAServer inicia, cada componente listado en esta propiedad es instanciado. El método start( ) es entonces invocado, inmediatamente seguido por el método run( ). Para más detalles , vea "Creando un Componente Service " en la documentación de EAServer..
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 39 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Manejando los Errores de Comunicación
Notas: el evento Error del objeto connection es disparado siempre que hay un error de comunicación, el servidor EAServer envia un exception, o un componente del servidor envia un exception. Procese el error en este evento y proceselo apropiadamente.
// evento Error del objeto connection int li_choice li_choice = MessageBox ( "Erro de Conexión " & + string(ErrorNumber), ErrorText, & Question!, AbortRetryIgnore! ) CHOOSE CASE li_choice CASE 1
action = ExceptionFail! CASE 2
action = ExceptionRetry! CASE 3
action = ExceptionIgnore! END CHOOSE
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 40 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Monitoreando un Servidor EAServer en tiempo de ejecución
1. Iniciar el servidor EAServer. 2. Iniciar el EAServer Manager y conectarse al servidor EAServer. 3. Expandir el servidor que Ud. desea monitorear en el tree view en el
EAServer Manager. 4. Expandir el Runtime Monitoring. Ud. puede monitorear componentes,
connection caches, y comunicaciones de red. 5. Seleccione el componente, connection cache, o item de red que Ud. desea
monitorear. 6. Click derecho al item que Ud. Desea monitorear y seleccionar View Values
para abrir una ventana de diálogo Runtime Display.
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 41 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Creando un Servidor EAServer
1. Expandir el folder Servers. 2. Click derecho en Servers y seleccionar New Server para abrir la ventana de
diálogo New Server. 3. Ingrese el nomre del nuevo servidor que Ud. desea crear y click al botón
Create New Server. 4. Ud. puede ahora definir las propiedades para el servidor, abriendo la hoja de
propiedades.
Procedimiento
PowerBuilder Distributed Developer v10.0
______________________________________________________________________________________________ Lab- 42 PowerBuilder Distributed Developer v10.0 2005 TechEra e-Learning
Este producto solo puede ser usado para uso personal y no para otros fines
Configurando los EAServer Listener
1. En el EAServer Manager, expandir el folder Servers. 2. Expandir el servidor específico donde Ud. desea configurar los listeners (
como Jaguar). 3. Expandir el fólder Listeners. Una lista de listeners aparecen en el panel
derecho. 4. Para cada listener, doble-click al listener para que le muestra una ventana de
información. Cambie el Host de localhost al nombre de su máquina, si es que no fue modificado
5. Para cada cliente que necesite conectarse a este servidor, cambia la
propiedade de locación del objeto connection de localhost al nombre de la máquina especificado en el diálogo Listener.
6. Reinicie el servidor EAServer para que los cambios tomen efecto.
Procedimiento