miércoles, agosto 10, 2005

Analisís los cimientos de las aplicaciones web :::::: .Net Versus J2EE

J2EE y .Net son los dos titanes que se enfrentan en el ring de los servidores para aplicaciones web.
Cualquier empresa que comience a planificar un proyecto al respecto debe conocer sus características.

Aquí presentamos algunos elementos de cada una de las plataformas.
Con la masificación de la tecnología basada en el protocolo de Internet, las empresas comenzaron a desarrollar una serie de aplicaciones para su negocio basándose en este estándar, tanto para colaborar dentro de sus secciones, como para interrelacionarse con sus clientes, proveedores u otras compañías.
En este aspecto, la generación de "aplicaciones web" ha sido tan fuerte que frente a esta nueva demanda surgieron una serie de tecnologías, donde las más destacadas son la J2EE de Sun Microsystems y .NET de Microsoft.
Cada una posee diferentes aspectos técnicos, ventajas y desventajas, pero ambas tienen algo en común: el trabajo a través del web gracias a una fuerte infraestructura de bases de datos.".NET" nació a principios de este siglo, producto de una serie de herramientas de software que Microsoft ya ofrecía a sus clientes -especialmente en lo que a servidores se refiere-, las que montó en una estructura de administración amigable. ".NET es una plataforma llena de servicios para construir aplicaciones basadas en web y desarrollar experiencias interactivas para los usuarios y sus sistemas", señaló el 2001 Steven B. Levy, redactor de Microsoft TechNet, confirmando además la importante estrategia de marketing que ha realizado la compañía de Redmond.
Los servidores web basados en .NET son un conjunto de aplicaciones que pueden usarse en conjunción con el .NET Framework para facilitar el desarrollo de aplicaciones empresariales.
Como por ejemplo, SQL Server 2000, Exchange 2000 Server o BizTalk Server 2000.

En la otra cara de la moneda está el rival de Microsoft, Sun Microsystems, con su Java 2 Enterprise Edition (J2EE), que ha logrado una gran aceptación en la industria informática por la facilidad de uso que posee y la posibilidad de instalarlo en diversos dispositivos y con varios sistemas operativos.
J2EE define un estándar para el desarrollo de aplicaciones empresariales multicapa, (usuario, intermedia y de datos) simplificando las aplicaciones empresariales y basándolas en componentes modulares y estandarizados, proveyendo un completo conjunto de servicios a estos componentes y manejando muchas de las funciones de la aplicación de forma automática, sin necesidad de una programación compleja.

A diferencia de Microsoft .NET, que es un producto, J2EE es un estándar.
Por lo tanto, no es posible descargar J2EE, sino que es necesario adquirir alguna de las versiones de plataformas de desarrollo basadas en J2EE que existen en el mercado, como IBM WebSphere, BEA Weblogic, Oracle9iAS o Sun ONE.

Cada una estas versiones proporcionan servicios añadidos a los propuestos en el estándar.La Solidez de J2EEJ2EE es un grupo de especificaciones diseñadas por Sun que permiten la creación de aplicaciones empresariales, como por ejemplo acceso a bases de datos (JDBC), utilizando directorios distribuidos (JNDI), acceso a métodos remotos (RMI/CORBA), funciones de correo electrónico (JavaMail) y aplicaciones Web (JSP y Servlets), entre otras herramientas.
J2EE posee una estructura estándar basada en tres capas:

Capa de usuario: Representa lo que el usuario ve. Por ejemplo, las páginas HTML.

Capa Intermendia. Es la que se utiliza en el negocio de una empresa y contiene la gestión de la aplicación, como es el caso de objetos Java que acceden a datos (Servlets)

Capa de datos: Representa la base de datos.

Este tipo de estructuras permiten que exista cierta independencia entre la visualización, la gestión y la base de datos. Además, permite acceder a la información que interesa vía http.

Por lo tanto, se envía la información a través de una página HTML (capa cliente), la cual es interpretada por la capa intermedia, que a su vez accede a la base de datos.

La capa intermedia resuelve las peticiones del cliente mediante el servidor de aplicaciones, que puede ser J2EE o bien, desarrollos de otras compañías como OAS, de Oracle.

Por otro lado, la arquitectura de J2EE se puede dividir en cinco partes:

- El lenguaje de programación Java.

- El modelo de programación del cliente.

- La infraestructura de la capa de middleware.

- La API (*) de negocios para los programadores.

- La API no visible para los programadores.

Aunque varios productos Java están diseñados alrededor de estas especificaciones, no todos cumplen con el estándar completo. Sin embargo, existen productos como Websphere que son considerados "Fully J2EE Compliant".
Otros como "Sun One Application Server" son 100% compatible con J2EE.

En otras palabras, cumplen con todas las especificaciones definidas por Sun. Por otro lado, el único lenguaje que soporta J2EE es Java y es el que se tendrá que utilizar para el desarrollo de todos los componentes. Existen sólo dos formas oficiales para acceder a la plataforma J2EE con otros lenguajes: a través de JNI (Java Native Interface) o mediante la interoperabilidad que ofrece CORBA.

Un elemento fundamental en las aplicaciones web soportadas bajo Java son los denominados "patrones J2EE", que describen los típicos problemas encontrados por desarrolladores de aplicaciones empresariales y proveen soluciones para éstos.

En esencia, estos patrones contienen las mejores soluciones para ayudar a los desarrolladores a diseñar y construir aplicaciones para la plataforma J2EE.

Las características y usos de estos patrones para su implementación se pueden encontrar en la web de Sun.

Para hacerse una idea de su importancia, durante los 60 primeros días que estuvieron a disposición de los desarrolladores a través de Internet (8 de marzo de 2001) fueron accedidos más de 120 mil veces, un gran logro para ese entonces, evidenciando el éxito de estas soluciones dentro de la comunidad Java.

El diseño de aplicaciones Web basadas en los Patrones J2EE se organizan alrededor de la utilización de varios elementos: un controlador frontal, dispatchers (despachadores), vistas compuestas (composite views), vistas (JSPs) y los helpers (ayudantes) de las vistas (JavaBeans).

Controlador Frontal: Este elemento provee un controlador centralizado para gestionar las peticiones webs a la aplicación. Un controlador frontal recibe todas las peticiones entrantes de los clientes, remitiendo a su vez cada una al gestor de peticiones (dispatcher) adecuado, que se encargará de gestionar la construcción de una respuesta adecuada al cliente.

Dispatcher: Existe toda una colección de estos elementos. En cada uno se codifica la construcción de la respuesta al usuario. Básicamente lo que hacen es componer vistas y configurarlas para que muestren la información adecuada como respuesta a la petición del usuario.

Composite View (Vista Compuesta). Este patrón hace que la representación de vistas sea más manejable, ya que gestiona los diferentes elementos de una página por medio de una plantilla, sean éstos de contenido estático o dinámico.

Páginas JSPs: Se encargan de generar contenido visual específico que responda a las necesidades del usuario.

Las páginas JSPs por lo general están parametrizadas de tal forma que muestren diferente información según los parámetros enviados. Por lo general, una vista (JSP) produce un trozo de la página web que recibe el usuario.

View Helper (Ayudante o Auxiliar de Vista). Un 'View Helper' encapsula los trozos de lógica (código java) correspondientes a la presentación y al acceso a datos y componentes que necesita una vista, haciendo que permanezca de esta forma mucho más simple, reutilizable y fácil de mantener.

La Estrategia de .NET, más que una plataforma, es un concepto creado por Microsoft para generar servicios a través de Internet, gracias a servidores de bases de datos que contienen la información.

Si bien .NET fue desarrollada varios años más tarde que Java, ha tenido un crecimiento bastante importante, especialmente en el segmento de la pequeña y mediana empresa (Pyme)

La parte más importante de la plataforma .NET es NET framework, una suite de herramientas que incluye COM+ (Component Object Model), un entorno de ejecución común, un compilador JIT (just-in-time) y un conjunto de librerías de sistema que dan acceso a un amplio conjunto de servicios.

Otra pieza fundamental es el CLR (Common Language Runtime), que es una aplicación similar a un máquina virtual que se encarga de gestionar la ejecución de las aplicaciones para ella escritas. A estas aplicaciones les ofrece numerosos servicios que facilita su desarrollo y mantenimiento y favorecen su fiabilidad y seguridad.

Entre ellos los principales son .NET:

Modelo de programación consistente y sencillo, completamente orientado a objetos.

Eliminación del temido problema de compatibilidad entre DLLs, conocido como "infierno de las DLLs".

Ejecución multiplataforma.

Ejecución multilenguaje.

Recolección de basura.

Gestión del acceso a objetos remotos que permite el desarrollo de aplicaciones distribuidas de manera transparente a la ubicación real de cada uno de los objetos utilizados en las mismas.
Seguridad avanzada, hasta el punto de que es posible limitar los permisos de ejecución del código en función de su procedencia (Internet, red local, CD-ROM, etc.), el usuario que lo ejecuta o la empresa que lo creó.

Interoperabilidad con código preexistente, de manera que es posible utilizar con facilidad cualquier librería de funciones u objetos COM y COM+ creados con anterioridad a la aparición de la plataforma .NET.

Adecuación automática de la eficiencia de las aplicaciones a las características concretas de cada máquina donde se vaya a ejecutar.

Pero quizá una de las características que más se ha destacado es la obtención de un entorno específicamente diseñado para el desarrollo y ejecución del software en forma de servicios que pueden ser tanto publicados como accedidos a través de Internet de forma independiente del lenguaje de programación, modelo de objetos, sistema operativo y hardware utilizados, tanto para desarrollarlos como para publicarlos.

Éste entorno es lo que se denomina la plataforma .NET y los servicios antes mencionados son a los que se les denomina servicios web.

Para el desarrollo y ejecución de aplicaciones en este nuevo entorno tecnológico, Microsoft proporciona el conjunto de herramientas conocido .NET Framework SDK e incluye compiladores de lenguajes como C#, Visual Basic.NET, Managed C++ y JScript.NET específicamente diseñados para crear aplicaciones.

Por otra parte, Microsoft .NET ofrece soporte oficial para Visual Basic.NET, C++.NET y un nuevo lenguaje C#, que es equivalente (con la excepción de portabilidad) a Java.

Otros lenguajes desarrollados por terceros estarán disponibles en breve como COBOL, Eiffel o Delphi.Microsoft .NET va más allá de soportar estos lenguajes, sino que también ofrece plena interoperabilidad entre ellos, por lo que es posible construir un componente en un lenguaje, introducirlo en una aplicación escrita en otro distinto e incluso heredarlo y añadir nuevas características en un tercero.

Algunas Comparaciones La Escalabilidad es la capacidad de un sistema de incrementar sus prestaciones en función del número de usuarios simultáneos que lo utilizan.

Tanto J2EE como .NET ofrecen métodos de escalabilidad que permiten a un cluster de servidores colaborar y dar un servicio de forma simultánea.

La ventaja de usar J2EE respecto a .NET en la escalabilidad se debe a que existe hardware disponible más potente en el entorno UNIX que en el entorno Windows, por lo que es necesario un menor número de máquinas para ofrecer el mismo rendimiento en las dos plataformas.

Según el sitio objectwatch.com, la plataforma .NET puede escalar desde 16.000 transacciones por minuto a más de 500.000, mientras que IBM WebSphere, usando tecnología J2EE/UNIX, puede pasar de 17 mil a 110.000 transacciones por minuto, con un coste monetario mucho mayor por transacción.

Por lo tanto, con .NET se obtendría mayor posibilidad de escalado a un mejor precio.

En cuanto a La Portabilidad, otro concepto importante para quienes deseen implementar aplicaciones web, es conocido el lema de Java "escríbelo una vez, ejecútalo en cualquier parte", que hace referencia a que este lenguaje es independiente de la plataforma de hardware o sistema operativo utilizado. Esta portabilidad ocurre gracias a que el entorno de ejecución de Java (JRE) existe para varios sistemas operativos y plataformas.

Por su parte, Microsoft continua con su voluntad de apoyar a Windows, por lo que, por supuesto Microsoft .NET funciona únicamente en plataformas basadas en Win32.

A pesar de la gran portabilidad que se le supone inicialmente a J2EE, existe el problema de que J2EE es un estándar y no un producto en sí. Este hecho, que facilita la adopción de esta tecnología por parte de varios fabricantes, también conlleva que las implementaciones de J2EE no son 100% compatibles entre sí, ya que cada vendedor ha realizado su propia interpretación del estándar y ha añadido nuevas características que no tienen por qué incluir el resto de competidores.

Chad Vawter y Ed Román, en su documento "J2EE v/s Microsoft .NET", realizan un buen análisis de cuando es importante la portabilidad al elegir entre una plataforma u otra.

Consideran tres escenarios para la decisión de cuál es la arquitectura correcta:

- "Si se desarrolla software para otros negocios o si es una compañía consultora y los usuarios tienen una gran variedad de plataformas, recomiendan especializarse en la arquitectura J2EE.
Si no puedes garantizar que sus clientes aceptarán Windows/.NET como solución, estarás restringiendo a los vendedores de grandes cuentas que seguramente han desarrollado sus soluciones en UNIX o Mainframes"

.- "Si los clientes están en la plataforma Windows, en ese caso puede servir tanto J2EE como .NET, ya que ambas soluciones se ejecutan en Windows"

.- "Si aloja sus propias soluciones, entonces controla el entorno de implantación. Esto permite escoger libremente entre J2EE y .NET".

Independientemente de este análisis, cabe destacar que tan importante como la propia arquitectura que plantean estas dos plataformas de desarrollo, son las empresas que las apoyan, ya que contribuirán de forma decisiva en su éxito o fracaso.

J2EE tiene el soporte de grandes empresas de software que han realizado su propia implementación del estándar: IBM, BEA, Oracle o la misma Sun, ofrecen sus plataformas de desarrollo de aplicaciones, en las que junto a J2EE proporcionan otros productos como bases datos, caché, firewalls, etc. para dar una solución completa a sus clientes.

Por su parte, Microsoft, y su gran equipo de marketing, están decididos a conseguir que .NET sea la plataforma de desarrollo de aplicaciones eBusiness preferida, por lo que han logrado su adopción en importantes multinacionales.

J2EE tiene la gran ventaja de haber empezado antes y un gran respaldo de la industria informática.

Microsoft, por su parte, al ser la compañía de software más grande del mundo, logra llegar a una importante comunidad de desarrolladores y puede bajar bastante los precios de las licencias.

Sea como sea, los expertos creen que finalmente J2EE será la plataforma utilizada por las grandes empresas y .NET por la PYME.


(*) Las API son interfaces de programación de aplicaciones (Application Programmet Interface) y constituyen un conjunto de funciones o mandatos que un entorno concreto (por ejemplo, un sistema operativo) pone a disposición del usuario para poder actuar con él