Está en la página 1de 22

Desarrollo de aplicaciones

GeneXus en 3 capas

Ing. Ursula Bartram


ubartram@artech.com.uy
Agenda

Arquitecturas 2 y 3 capas
¿Cómo y qué generamos en 3 capas?
¿Cómo optimizar?
Stateless y Stateful
Hacia dónde vamos
Conclusiones, recomendaciones
Arquitectura 2 capas

Cliente Servidor
Base de datos

JDBC
Problemas... ODBC

Mucha lógica en el cliente


Escalabilidad
Seguridad
Performance
Arquitectura 3 capas

Distribuir el código entre cliente y servidor

Servidor Servidor
Cliente Aplicaciones Base de datos

Plataformas
RMI JDBC
Java CORBA/Visibroker
DCOM
HTTP

Remoting ADO
.Net
Aplicaciones 3 capas con GeneXus

Propiedad a nivel de modelo


¿Cómo distribuye GX el código generado?

Cliente Servidor
• Forms y eventos de Accesos a la base de datos
Work panels y Transacciones Reglas de Transacciones
• Lógica de Procedimientos y
Reportes
¿Cómo optimizar?

Transferir por la red solo lo necesario


Distribuir mejor el código

Cliente Servidor
Capa presentación Capa de negocios

• User Interface (UI) • Lógica y accesos a la base de


datos
Analicemos los objetos

Sin interfaz
Reportes y Procedimientos

Con Interfaz
Reportes y Procedimientos con print blocks
Transacciones
Work panels
Procedimientos y Reportes

Ejecutarlos en el servidor
Propiedad “Location”
Consideraciones
Marcar sus parámetros: “IN”, “OUT” o “INOUT”
Los llamados por éstos se ejecutan en el servidor
Cuidado con los llamados a objetos con UI
Reportes y Procedimientos
con print blocks
Ejecutarlos en el servidor y visualizarlos en el
cliente
Cómo?
Salvando el reporte en el servidor
Utilizando en el cliente las funciones getRemoteFile
y openGxReport
Transacciones

Rules en el servidor
Propiedad ‘Optimize for multi-tier execution’ = YES
Problema: si tenemos un call a un objeto con UI
en las rules ?

Falla al ejecutar, se levantará en el servidor...


Transacciones, solución

Cambiar la propiedad a NO
Dejamos la transaccion sin optimizar
Tratemos entonces de eliminar esa regla, pasarla por
ejemplo a los eventos

En caso de call(wkp), tratar de usar la regla msg o


error
Work panels

Eventos se ejecutan en el cliente


Para cada For Each viajan por la red los parámetros
(where) y resultados (atributos leídos)
Ejemplo...
Event ‘XXX’
For Each
Where CliCod = &CliCod
&CliNom = CliNom
if CliEdad >18
&flag=1
endif
EndFor
EndEvent
¿Cómo optimizar work panels?

Pasar eventos con for each al servidor


Event ‘XXX’
Call(PEvXXX, &CliCod, &CliNom)
EndEvent

Pasar el evento Load al servidor


Manejar nuevos tipos de datos estructurados
Evento load en el servidor

Propiedad “Execute Load Events in the


Application Server” = Yes

Consideraciones
No tener llamadas a objetos con UI
No programar nada de interfaz en el load
Button.enable = 1
Call(wkp)
etc
Utilizar tipos de datos estructurados

Definir una variable de tipo estructurado y


cargarla con los valores del load
¿Cómo optimizar en la 7.5 ?

No contamos con load en el server ni tipos de


datos estructurados
Llamar a un proc remoto que cargue
una tabla temporal, y leer desde ella
o de un xml
o de vectores
En resumen...

Transacciones
Ejecutar las Rules en el servidor

Procedimientos y reportes
Ejecutarlos en el servidor
Manejar parámetros IN, OUT

Work panels
Load en el servidor
Caso real: de VFP a Java 3 capas

Antes y después de optimizar

Serie de transacciones anidadas

Sin optimizar Optimizado Diferencia Porcentual

Paquetes 943 520 423 45%

Bytes 144869 82078 62791 43%

Carga de un menu con 7 opciones

Sin optimizar Optimizado Diferencia Porcentual

Paquetes 78 17 61 79%

Bytes 16194 3184 13010 80%


Stateful vs. Stateless

Dos formas de comunicar cliente con servidor de aplicaciones

Stateless Stateful

Mantiene el estado? No Si

Requiere Si No
conversión?

La más escalable?

La más acorde a
esquema 3 capas?

Protocolos HTTP RMI, Corba/Visibroker


soportados DCOM, HTTP y Remoting
Hacia dónde vamos...

Mejor soporte en GX para construir aplicaciones en


múltiples capas Stateless

Charlas recomendadas
GeneXus y .net 3 capas – Alejandro Silva
A continuación
Oh OO! – Andrés Aguiar
Mañana a las 9 en el 2B
2025 GeneXus.net – Equipo GX .Net
Hoy a las 11 en 4R - Sala Renoir - 4to Piso
Cara a Cara: GX Java – Equipo GX Java
Hoy a las 11:45 en 4R - Sala Renoir - 4to Piso
Conclusiones

No sólo cambiar una propiedad


Hay que cambiar la cabeza
No todo se puede. A veces hay que elegir entre
funcionalidad y performance
Manejar la idea de una buena distribución
desde un principio del desarrollo
Cliente Servidor
Capa presentación Capa de negocios

• User Interface (UI) • Lógica y accesos a la base de


datos
¡ Muchas gracias !

También podría gustarte