Objetivo

El objetivo del presente documento es brindar el concepto fundamental de las aplicaciones multi-capas, y de qué forma las mismas pueden ser fácilmente implementadas con GeneXus.

El documento busca introducir al lector en las características y beneficios de este tipo de aplicaciones, y que el mismo sirva como punto de partida para los iniciados en el tema.


Introducción

La idea principal de un sistema distribuido es la división lógica de la aplicación en varias capas, de forma de repartir las responsabilidades de realizar tareas específicas en cada una de ellas. En el caso de GeneXus, las aplicaciones distribuidas van a estar basadas en una arquitectura de 3 capas, es decir, que cada una de las capas se va a especializar en realizar determinadas tareas.

En la primer capa se encuentran los componentes de la aplicación que implementan la interfaz de la misma con el cliente (Capa de Presentación), en la segunda se hayan los componentes que se ocupan de ejecutar la lógica del negocio de la aplicación, es decir todo lo que es comportamiento del sistema (Servidor de Aplicaciones), y en la tercer capa están los componentes encargados de realizar toda la manipulación y persistencia de los datos (Servidor de Base de Datos).

A diferencia de las aplicaciones Cliente/Servidor tradicionales (2 capas), donde la ejecución de todo el código de la aplicación (
lógica del negocio) se realiza en el cliente, en una aplicación 3 capas, se distribuye el código ejecutando parte en el cliente y parte en el servidor de aplicaciones. De esta forma logramos ganar en escalabilidad, seguridad y performance.

 GX3Tiers_01

Cuando el cliente requiere algo (por ejemplo datos), se comunica con el servidor de aplicaciones solicitándole que ejecute determinado proceso remoto, con determinados parámetros. El servidor de aplicaciones dispara dicho proceso, y luego se comunica con el cliente para retornarle el resultado si corresponde.

¿Por qué implementar una aplicación en 3 capas?

En una arquitectura tradicional en 2 capas (cliente/servidor), toda la lógica de la aplicación se ejecuta en el cliente y el acceso a la base de datos se realiza desde el cliente. Por lo que podemos decir que deberíamos tener clientes con alto potencial, capaces de ejecutar la aplicación con una alta performance; además, cada uno de estos clientes debería estar configurado para acceder a la base de datos con el driver que corresponda según el DBMS utilizado.

Con esto logramos un alto acoplamiento con los clientes; nuestras aplicaciones dependen muchísimo de los clientes en los cuales están corriendo. No solo dependemos del tipo de cliente, sino que juega un rol muy importante la cantidad de clientes conectados a la base de datos; recordar que por cada cliente hay una conexión a la misma.

Aplicaciones multi-capas con GeneXus

¿Qué ventajas nos ofrece GeneXus a la hora de generar una aplicación multi-capa? El desafío que se plantea al desarrollar aplicaciones multi-capa, ¿es el de mantener todos los componentes de la misma sincronizados Esto es, ¿el componente del cliente sincronizado con el de negocio, con el de acceso a datos, y demás? Además, esto puede implicar adicionar una complejidad significante a la lógica de la aplicación.

En el caso de GeneXus, se abstrae al desarrollador de esta complejidad, liberándolo de tener que implementar la sincronización entre los diferentes componentes. Con GeneXus si bien se implementa un único objeto, se generan componentes para cada una de las capas correspondientes, y esto permite que todos los componentes de la aplicación estén siempre sincronizados.

GeneXus nos ofrece dos posibilidades a la hora de implementar una aplicación en 3 capas: podemos optar por el generador Java o por el generador .NET.

Para generar una aplicación en 3 capas con GeneXus, sólo basta cambiar una propiedad a nivel del modelo. Así de fácil, ¡con un simple paso! En esta propiedad, llamada Protocol, se selecciona el protocolo de comunicación entre cliente y el servidor de aplicaciones según la plataforma en la cual se va a generar la aplicación. El valor predeterminado de esta propiedad es NO y si no se cambia, se genera en 2 capas (cliente/servidor tradicional).

A continuación mostramos cuales son las posibilidades que nos brinda GeneXus en cada plataforma para implementar una aplicación Win en 3 capas:

GX3Tiers_02

En el caso de una aplicación Web distribuida, sería similar que la implementación en plataforma Win. En una arquitectura de aplicación Web distribuida, se debería tener un servidor web, un servidor de aplicaciones donde corren los programas, y un servidor de base de datos que es accedido desde el servidor de aplicaciones.

Si bien es posible implementar una aplicación Web distribuida con GeneXus (esto es: Ambiente = Web y Propiedad Protocol =/= NO), no resulta recomendable dado el costo de performance y mantenimiento de una arquitectura tan compleja como esta.

Comparativo de los generadores

GeneXus nos ofrece la posibilidad de generar aplicaciones Java y .NET. Ambos generadores son el resultado del avance tecnológico que ha ido surgiendo en base a las necesidades del mercado.

Mediante ambos generadores se generan todas las modificaciones del esquema y se manejan todas las funciones de transformación de datos, tal como lo hacen todos los generadores de GeneXus.

Por un lado, contamos con el generador .NET generando código inteligente para Microsoft .NET Framework (100% de código nativo C#). Los programas generados son archivos de código fuente C#, que son compilados a archivos DLL o EXE (Aplicaciones Web (DLL), Aplicaciones GUI (EXE)) en .NET IL (Intermediate Language). Posteriormente, son compilados al código del equipo por la máquina virtual de .NET, en tiempo de ejecución. Las aplicaciones .NET puede ser generadas en 2 y 3 capas.

Por otro lado, se encuentra el generador Java, que genera código fuente JAVA estándar. El generador Java posibilita el desarrollo de Aplicaciones Web (servlets) y Aplicaciones GUI (de 2 y 3 capas).

Ambos generadores utilizan los beneficios de cada uno de los lenguajes utilizados.

A continuación se observa una tabla comparativa con las características de ambos generadores:

 

Característica

.NET

Java

Curva de aprendizaje

Baja

No hay necesidad de aprender Visual Studio .NET ni programación C# para crear aplicaciones en .NET.

Baja

No hay necesidad de aprender Java para crear aplicaciones en Java.

Facilidad de configuración y utilización

Alta

GeneXus .NET es fácil de instalar y configurar. Solo se necesita instalar .NET Framework en el equipo correspondiente.

Alta

GeneXus Java es fácil de instalar y configurar. Solo se necesita instalar la JDK en el equipo correspondiente.

Multiplataforma

No

Ejecución en múltiples capas

Servidores de aplicaciones

· Internet Information Server

· GeneXus .Net Application Server

· Si el protocolo es HTTP, el servidor de aplicaciones será uno externo al generador, y servirá cualquiera que tenga un motor de servlets (RESIN, Jakarta-tomcat, Websphere, Jrun, etc.)

· GeneXus Java Application Server para el resto de los protocolos de comunicación con el servidor de aplicaciones.

Comunicación con el Servidor de Aplicaciones

.NET Remoting

RMI / CORBA / HTTP

DBMS soportados

DB2 UDB for iSeries

DB2 Universal Database

Informix

Oracle

PostgreSQL

SQLServer

MySQL

DB2 UDB for iSeries

DB2 Universal Database

Informix

Oracle

PostgreSQL

SQLServer

MySQL

Conexión a la base de datos

ADO.NET

JDBC

Pool de conexiones a la base de datos

Lo maneja el propio framework de .NET utilizando el ?Connection Pooling? de ADO.NET.

Lo maneja el Servidor de Aplicaciones Java.

Cache de sentencias

Deployment Wizard provisto por GeneXus

GeneXus .NET Publication Assistant

GeneXus Deployment Wizard

 


Para más información, pueden consultarse los siguientes links:

Curso de desarrollo de aplicaciones distribuidas con GeneXus 8.0:
http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,5,105,O,S,0,MNU;E;31;1;MNU;,

Generador Java:

Aplicaciones Multi-capa con HTTP como protocolo de comunicación (Documento conceptual):
http://www.gxtechnical.com/gxdlsp/pub/iehelp.htm?GeneXus/Java/Docum/ReleaseNotes/7.5/3capasHTTP.htm

Primer modelo Java 3 capas HTTP:
http://www.gxtechnical.com/gxdlsp/pub/iehelp.htm?GeneXus/Java/TechnicalPapers/8.0/PrimerModeloJava803cHTTP.htm

Preferencias modelos 3 capas:
http://www.gxtechnical.com/gxdlsp/pub/iehelp.htm?GeneXus/Java/Docum/Manuals/7.5/Mjava75spF2.htm

Ejecución de aplicaciones distribuidas con el generador Java:
http://www.gxtechnical.com/gxdlsp/pub/iehelp.htm?genexus/java/whitepapers/paperjava3capas.htm

Generador .NET:

Aplicaciones Win en 3 capas (.NET):
http://www.gxtechnical.com/gxdlsp/pub/iehelp.htm?genexus/csharp/docum/releasenotes/8.0/aplicacioneswintrescapas.htm

Primer modelo con .NET utilizando ADO.NET (2 y 3 capas):
http://www.gxtechnical.com/gxdlsp/pub/iehelp.htm?genexus/csharp/docum/releasenotes/8.0/primermodeloadonet.htm