Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Primeros Pasos
Autor: Rahul Jain
(Email: rahul.jain@cynergysystems.com)
INDICE
Page 2 of 26
Instalando EAServer
Luego de descargar EAServer (el cual probablemente sea un archivo comprimido),
doble click en setup.exe para instalar EAServer.
Notas para
usuarios de
Windows XP
Configurando EAServer
Arrancando el Servidor y revisando la instalacin
Despus de instalar el EAServer, puede querer revisar si el servidor trabaja
correctamente. Inicie el Servidor Jaguar (Inicio | Programas | Sybase | EAServer |
Jaguar Server). Luego la ventana de consola mostrar el mensaje: Aceptando
conexiones. (Ver imagen a continuacin), podr probar desde su navegador y
verificar.
Page 3 of 26
Jagadmin
Dejar en blanco.
SuMaquina
9000
Page 4 of 26
en este tem se le mostrar todos los caches de conexin disponibles para el Servidor
Jaguar en el panel derecho.
Si no recibe este mensaje, revise el nombre del DSN ODBC en el perfil del cache de
conexin. Si el nombre es correcto revise el nombre de base de datos y la ubicacin
del archivo.
Tip:
Page 5 of 26
Nota:
Arranca el servidor
Arranca el Jaguar Manager
Este es el archivo de log mas importante. Este es el
archivo que usaremos para registrar los mensajes de log
desde nuestro PB NVO o componentes de Java.
Page 6 of 26
Jaguarhttpservlet.log
Jaguarhttperror.log
Jaguarhttprequest.log
\html: Esta carpeta tiene acceso publico desde su servidor web. Sea cuidadoso
con el contenido que se coloca en esta carpeta. Puede usar esta carpeta para
guardar archivos JavaScript comunes y archivos HTML comunes. Puede notar que la
pgina de inicio de Jaguar index.html tambin esta en esta carpeta.
Jaguar usa esta carpeta para guardar los stubs para los componentes.
\java: Esta carpeta debera ser usada para guardar sus clases de Java. No use la
carpeta HTML de la que hablamos antes para guardar los archivos Java, esta es la
carpeta correcta.
Jaguar usa esta carpeta para guardar la estructura de sus componentes.
Nota: Los componentes de PB no necesitan estructuras.
\Repository\Component\: Jaguar almacena todos sus archivos de components
en esta carpeta con versiones. Los componentes en esta carpeta son almacenados
por paquete. Hablando especficamente acerca de los componentes de PB, cada NVO
recibe su propia carpeta con el mismo nombre del NVO. Dentro de la carpeta del
NVO, Jaguar crea carpetas separadas con versiones del NVO. La primera vez que
implementa un NVO llamado n_sample en el paquete pkg_sample, tendr una
jerarqua de carpetas como esta:
Repository
n Component
n pkg_sample
n n_sample
n c1
File: sample.PBD
La carpeta c1 es el nmero de versin. La siguiente vez que implemente n_sample,
encontrar 2 carpetas c1 y c2. Puede borrar de manera segura c1.
Si encuentra una carpeta llamada SurfSideVideoPB, expandala. EAServer instala
este paquete por defecto como un ejemplo. Busque los 3 componentes que este
contiene y encontrar una jerarqua de carpetas similar a la que se habl
anteriormente.
\Repository\WebApplication\: Esta es la carpeta donde Jaguar guarda todas
las aplicaciones web. Si se cre exitosamente la aplicacin web sample como se
indic, debe ver una carpeta llamada sample bajo esta carpeta. Puede colocar
manualmente los archivos en esta carpeta e inmediatamente estarn accesibles a
travs de su aplicacin web. Probemos esto.
Cree un archivo HTML simple (simple.htm) y guardelo en la carpeta de la aplicacin
web sample. Ahora digite esta url desde su navegador:
Page 7 of 26
http://SuMaquina:8080/sample/simple.htm
Debe ver su pgina en el navegador. De lo contrario, reinicie su servidor. Esto
tambin verifica que nuestra aplicacin web esta trabajando apropiadamente.
Esta es la carpeta a la que estar ingresando la mayora del tiempo durante el
desarrollo de sus pginas web (JSP, html, etc.). Si esta usando PowerJ, no es
sugerido que cambie los archivos directamente en esta carpeta porque no hay
manera, AFAIK, de sincronizar de vuelta los cambios en el repositorio de PowerJ.
Para nuestro ejemplo, no debo usar PowerJ. Personalmente me agrada TextPad, pero
puede usar cualquier editor de texto de su preferencia.
Crear DataWindow
Vamos a crear un datawindow de la tabla employee. Crear un datawindow de estilo
tabular de la tabla employee y guardarlo como d_employee.
Nota:
Page 8 of 26
Crear NVO
Usaremos el asistente de componentes del EAServer para crear el componente. Click
File | New en PowerBuilder. Vaya a la pestaa PB Object y de doble click en el
icono EAServer Component Wizard. Siga las instrucciones en el asistente y guarde
el NVO como n_sample.
Una vez que haya concluido con el asistente y haya guardado el NVO, esta listo para
la codificacin. Por si todava no lo nota este componente NVO-Jaguar es casi igual
que un PB NVO. La nica diferencia que encontrar es el nmero de eventos. Este
NVO tiene 2 eventos mas: activate y deactivate. Estos eventos se disparan cuando el
componente es activado (trado del pool/ construido) y cuando el componente se
desactiva (enviado de vuelta al pool/ destruido). Para mas informacin sobre el tema
consulte la ayuda de PB.
Existen algunas restricciones en cuanto a lo que pueden y no pueden aceptar los
mtodos del componente de PB. Puesto que este NVO va a ser implementado en el
EAServer, es obvio que debe hablar el lenguaje del EAServer, el cual es CORBA.
Entonces, su NVO solo podr aceptar argumentos y retornar valores que CORBA
comprenda. No podr pasar un datastore a un mtodo pblico el datastore es una
clase de PB.
Los Tipos de datos autorizados como argumentos son:
v
v
v
v
(None)
Tipos de dato estndar ( a excepcin de any)
Estructuras
Componentes Jaguar (referencia al objeto proxy)
No se preocupe ahora por los argumentos, su propsito ser explicado mas tarde.
Lo primero que haremos desde el mtodo es registrar la invocacin del mtodo. Esto
no es necesario, pero es una buena tcnica para seguir luego la ejecucin del
programa. Tambin le dar una mejor comprensin de como registrar mensajes en
el archivo de log del Jaguar.
Page 9 of 26
errorlogging
lerr_log
Transaction
lt_demo
// Connect to database
lt_demo = CREATE Transaction
lt_demo.DBMS = "ODBC"
lt_demo.DBParm = "UseContextObject='Yes',CacheName='EASDemo'"
CONNECT USING lt_demo;
IF lt_demo.SQLCode <> 0 THEN
lerr_log.log( METHOD_NAME + &
"Error connecting
connection cache")
END IF
to
databse
using
EASDemo
Page 10 of 26
Ahora tenemos los datos. Necesitamos preparar nuestro datawindow antes de que
generemos el HTML.
Error
Code
"
Acerca de la generacin del HTML: Para que un datawindow sea capaz de generar
HTML correctamente, necesita conocer algo del cliente. Quin es el? el DataWindow
genera diferente HTML para IE y para NS. Esto es exactamente lo que el primer
argumento le dice al mtodo.
El Segundo argumento es la accin requerida por el usuario al datawindow. Esto nos
dice que es lo que quiere hacer con el datawindow, por ejemplo Actualizar, Eliminar
Fila, Insertar Fila, Ordenar, Filtrar, etc. Cuando se hace la peticin de la pgina por
primera vez no se realiza ninguna accin. Esa es la razn por la que no invocamos el
mtodo SetHTMLAction si no hay una accin.
El tercer argumento lleva los cambios hechos a los datos en el navegador que
pueden ser aplicados al datawindow en el componente.
Ahora el bebe DW esta listo para entregar el HTML. Solamente una lnea de cdigo
nos dar el HTML que el navegador al otro lado comprender.
// Generate HTML
ls_dwhtml = lds_working.object.datawindow.data.html
Page 11 of 26
Eso es todo. Es todo el cdigo que necesitamos para generar HTMLDW. Veamos el
cdigo completo.
/////////////////////////////////////////////////////////////////
//
Description:
//
Apply action to the datawindow
//
Generate Datawindow HTML
//
Return HTML
//
Arguments (name - explanation):
//
arg_browser
- Browser type passed from the client
//
arg_action
- Action to be applied on datawindow
//
arg_context
- Context of datawindow to be applied on
datawindow
//
Returns:
//
String
- HTML generated
////////////////////////////////////////////////////////////////
// Rahul Jain
// March 27 2002
////////////////////////////////////////////////////////////////
constant string METHOD_NAME = "getHTML "
// Local Variables
transaction
lt_demo
datastore
lds_working
string
ls_dwhtml
errorlogging lerr_log
long
Page 12 of 26
END IF
// Create our datastore
lds_working = create datastore
lds_working.dataobject = "d_employee"
lds_working.SetTransObject( lt_demo )
// Retrieve
ll_rc = lds_working.Retrieve()
IF ll_rc = 0 THEN
lerr_log.log( METHOD_NAME + "No row retrieved.")
ELSEIF ll_rc < 0 THEN
lerr_log.log( METHOD_NAME + "Error in retrieving rows from database.")
END IF
// Tell datawindow about the browser in use
lds_working.object.datawindow.htmlgen.browser = arg_browser
// Apply action and context if requested
If len( arg_action ) > 0 Then
lerr_log.log( METHOD_NAME + "Just before setHTMLAction")
ll_rc = lds_working.SetHTMLAction( arg_action, arg_context )
lerr_log.log( METHOD_NAME + "Just after setHTMLAction")
IF ll_rc < 0 THEN
lerr_log.log( METHOD_NAME + "Error in SetHTMLAction. Error Code =
" + String(ll_rc))
END IF
End If
// Generate HTML
ls_dwhtml = lds_working.object.datawindow.data.html
disconnect using lt_demo ;
lerr_log.Log ( METHOD_NAME + "----- End of getHTML method -------")
Return ls_dwhtml
Bueno, parte del cdigo puede ser reubicada a lugares mas apropiados, como el
comando disconnect puede ser (debera?) movido al evento deactivate. Esto es
porque cuando se desconecta, de destruye el componente. Si no se desconecta en el
mtodo, Jaguar enviar el componente de vuelta al pool (asumiendo que esta
activada la opcin Instance Pooling) y entonces cuando la instancia se agote, se
destruir automticamente. Para mas informacin sobre instance pooling, revisar la
ayuda de EAS.
Page 13 of 26
Page 14 of 26
Page 15 of 26
Page 16 of 26
Esta lista le mostrar todas las configuraciones de los perfiles de EAServer. Debe
configurar un perfil de EAServer antes de crear un proyecto.
Page 17 of 26
Page 18 of 26
Esta es una opcin importante. Auto Demarcation/ Deactivation har que nuestro
componente se quede sin un estado definido. Para leer mas acerca de los estados
revise las ayudas de PB-EAS o pregntenos J.
Page 19 of 26
Page 20 of 26
Para ser capaz de invocar al componente de PB desde Java/ JSP, necesitamos crear
stubs para el componente. Para hacer esto, abra el Jaguar Manager y conctese al
servidor. De click en el item Package del rbol. En el panel derecho, estar el
Page 21 of 26
paquete sample, de click sobre el. Seleccione File | Generate Stubs and Skeletons
en el men. Seleccione las opciones que se muestran en la figura.
No se debe digitar nada en esta pantalla. Solamente active las casillas apropiadas y
presione Generate. Luego de esto, de click derecho en Jaguar bajo el tem
servers del rbol y seleccione Refresh.
Eso es todo. Nuestro componente de PB componente esta listo para ser invocado
desde Java/ JSP.
n_sample lnv_sample
lnv_sample = CREATE n_sample
lnv_sample.GetHTML(, , )
El proceso en caso de invocar el NVO desde JSP, aunque luce similar involucra mas
cdigo que solamente la creacin de una instancia del NVO. Para simplicidad del
tutorial, omitir los detalles del cdigo que va en la clase CompWrapper. Si desea
puede revisar la fuente CompWrapper.java y ver la ayuda de EAServer:
http://sybooks.sybase.com/onlinebooks/groupeag/eag0420e/jagpg/@Generic__BookView
(Part 3, chapter 12, topic: Instantiating proxy instances)
De esta manera es como se referencia el componente en JSP:
sample.n_sample
lnv_sample
=
sample.n_sampleHelper.narrow
com.rahul.utility.CompWrapper.getComponent ( "sample/n_sample" ) );
Page 22 of 26
En donde:
sample
n_sample
n_sampleHelper
lnv_sample
Nota:
Paquete
NVO
Stub
Variable
Para sus componentes, tendr que cambiar el nombre del paquete, nombre de NVO
y nombre de la clase auxiliar.
La clase CompWrapper tiene un mtodo llamado getComponent, el cual obtiene la
referencia del componente. Una vez que tenemos la referencia del componente,
podemos invocar al mtodo del componente tal como invocamos el mtodo de
cualquier otro objeto.
String
String
String
ls_action ;
ls_context ;
ls_browser ;
<%=ls_html%>
Page 23 of 26
String
String
String
ls_action ;
ls_context ;
ls_browser ;
sample.n_sample
lnv_sample
=
sample.n_sampleHelper.narrow
(
com.rahul.utility.CompWrapper.getComponent ( "sample/n_sample" ) );
String ls_html = lnv_sample.gethtml ( ls_browser, ls_action,
ls_context );
%>
<html>
<head>
<title>EMPLOYEE SAMPLE</title>
</head>
<body bgColor="#EFEFEF" leftmargin="10" topmargin="10">
<!-- HEADER -->
<strong>Employees from EAS Demo DB</strong>
Page 24 of 26
onclick="htmldw.Update()"
value="Update"
<!-- DELETE BUTTON -->
<input
type="button"
onclick="htmldw.DeleteRow(htmldw.GetRow())"
value="Delete" name="b_delete"></input>
<br/>
<br/>
<!-- DATAWINDOW -->
<%=ls_html%>
</body>
</html>
http://SuMaquina:8080/sample/Sample.jsp
Page 25 of 26
Page 26 of 26