J2EE Y .NET: LA RIVALIDAD PERMANENTE

    A lo largo de los último meses se han vertido miles de líneas (impresas y electrónicas) sobre la estrategia .NET de Microsoft y su comparación con la plataforma J2EE. Desgraciadamente, la mayor parte de ellas carecen de la más mínima objetividad y están escritas con un tono evangélico que llena los oídos pero deja vacía las cabezas. En ocasiones, algunos defensores y detractores de .NET o de J2EE se expresan más en términos de sus gustos personales (muy loables, por cierto, pero que reducen el debate a algo parecido a las campañas Pepsi-Coca Cola) que en términos de las ventajas y desvantajas objetivas de ambas plataformas (intrínsecamente, cualquier lenguaje de programación o plataforma de desarrollo ofrece ventajas y desventajas con respecto a otros pues sus desarrolladores pensaban en orientarlo hacia ciertos servicios y no -necesariamente- hacia otros).

    Es innegable que Microsoft ha ofrecido y está ofreciendo un despliegue impresionante de marketing y relaciones públicas en torno a su nuevo producto, pero ello no dice nada de la calidad del mismo, solo habla de su capacidad económica y, por ende, de su capacidad para llevar a cabo una buena campaña de publicidad. Por otro lado, Sun Microsystems lleva también a cabo una campaña de publicidad, más modesta, pero avalada por sus clientes.

    El propósito de este texto no es entrar a debatir argumentos publicitarios o de marketing, sino intentar valorar y comparar J2EE y .Net. Premeditadamente, he evitado el uso de afirmaciones "X ha copiado el producto de Y", "el lenguaje X es un Y++ ó un Y--" o "X es un calco mal hecho de Y", porque es una batalla estéril, que no conduce a ningún lugar, lo que el desarrollador necesita saber es cuándo es conveniente utilizar X y cuándo es conveniente utilizar Y, y por qué. Bajo mi punto de vista, no tiene nada de malo inspirarse en otros lenguajes para crear otros nuevos, siempre que tengan algunas mejoras adicionales intrínsecas o proporcionen nuevas perspectivas a los desarrolladores. Por hacer una comparación con un terreno muy alejado del informático: ¿Se puede culpar a Dalí por inspirarse repetidamente en el Ángelus de Millet para sus propios cuadros? ¿Y a Picasso por construir/deconstruir una y otra vez Las Meninas de Velázquez?

1.-J2EE Y .NET: UNA PANORÁMICA GENERAL

1.1- J2EE

    J2EE (Java 2 Platform, Enterprise Edition) es, según la definicion de Sun Microsystems, un conjunto de estándares y especificaciones para el desarrollo de aplicaciones empresariales basado en la tecnología Java. Esquemáticamente se resumiría en la siguiente fórmula= Java + Componentes adicionales orientados a empresas (EJBs, JSPs).

    De acuerdo con Microsoft, J2EE es solo un conjunto de especificaciones que están orientadas hacia el desarrollo de aplicaciones de servidor.

    La plataforma J2EE ha sido creada con la participación de cientos de empresas de diversa índole y es, sin lugar a dudas una plataforma conjunta, no exclusiva de Sun o de ninguna otra compañía. Actualmente se han desarrollado una serie de herramientas (quizá las más conocidas sean JBuilder, de Borland, y ForteTM de la propia Sun) comerciales para implementar esta plataforma.

    El lenguaje en el que se basa J2EE es Java, un lenguaje orientado a objetos que alcanzó su madurez con la popularización de Internet y que es en cierta manera el heredero legítimo de C++. La expansión de este lenguaje entre la comunidad de programadores ha sido vertiginosa y se ha impuesto como el paradigma de los lenguajes de programación orientados a objetos. En el entorno académico e investigador, la enseñanza de Java ha reemplazado (y está reemplazando) a la enseñanza de lenguajes de programación estructurada como Pascal e incluso C que siempre se consideraban lenguajes de elección para la introducción a la programación.

    De forma resumida, Java es un lenguaje neutral, portable, robusto, estable, independiente de la plataforma, sencillo de aprender para programadores que hayan trabajado previamente con lenguajes orientados a objetos. Java puede utilizarse para realizar aplicaciones en múltiples plataformas hardware y sistemas operativos (Unix, Linux, OS/390, Windows 2000, ó HP-UX entre otros sistemas operativos para ordenadores personales o estaciones de trabajo, y Palm OS ó EPOC entre otros sistemas operativos para dispositivos de telefonía móvil).

    La sintaxis de Java es muy similar a la de otro lenguaje orientada a objetos tremendamente popular entre la comunidad programadora: C++, pero su filosofía se encuentra a medio camino entre éste y Smalltalk. Java incorpora un recolector automático de memoria (garbage collector), al igual que Smalltalk, con lo que elimina una fuente tradicional de problemas en C/C++. Sin embargo, tal y como sucede con C++, Java es un lenguaje fuertemente "tipado", en el que se comprueban los tipos declarados en tiempo de compilación, a diferencia de lo que sucede en Smalltalk, donde esto se comprueba en tiempo de ejecución (lo cual suele retrasar el proceso de depuración). Desde su origen, Java dispuso de una líbrería de clases estándar (al igual que Smalltalk y al contrario de lo que sucedió con C++, que al principio no tenía). En Java existe un clase básica única: la clase Object de la cual se derivan todas las otras, de modo similar a lo que ocurre en Smalltalk, mientras que en C++ una clase no tiene por qué tener una clase base de la cual derive. Java admite la herencia múltiple (es decir, una clase puede derivar de varias clases distintas) de un modo distinto a lo que lo hace C++, usando interfaces. Un interfaz es una colección de nombres de métodos sin definiciones reales (o lo que es lo mismo: sin implementación) que indican que una clase tiene un conjunto de comportamientos, además de los que la clase hereda de sus superclases.

    Existe una diferencia esencial entre Java y C++, desde el punto de vista de la orientación a objetos: no es posible -al igual que ocurre en Smalltalk- utilizar funciones libres o una programación estructurada en Java, desde un comienzo hay que programar mediante clases y objetos en Java; sin embargo, en C++ es posible utilizar funciones libres y realizar programas que no estén orientados a objetos e incluso utilizar código orientado a objetos y código orientado a programación estructurada en un mismo programa, lo cual (con un mal uso) puede llevar a la escritura de código de dudosa legibilidad. Java, por cuestión de eficiencia, dispone de tipos de datos primitivos (enteros, carácteres, etc.) que no son clases, aunque sí tienen clases asociadas, con sus correspondientes métodos. Lo mismo sucede con C++, pero no con Smalltalk: en este lenguaje todos los tipos de datos son clases: es un lenguaje OO completamente "puro". Java, por otra parte, no admite punteros, uno de los principales problemas de los programadores en C/C++.

    Una de las novedades revolucionarias de Java fue la portabilidad: Sun abordó el problema introduciendo el modelo de bytecodes: cuando un programa Java se compila no se transforma en un conjunto de instrucciones código máquina nativas de la plataforma utilizada (lo cual impediría su completa portabilidad), sino que se transforma en un conjunto de bytecodes independientes de la plataforma utilizada que son leídos e interpretados por la máquina virtual Java (JVM) para ejecutar el programa. Por ejemplo, cuando se compila un programa Java en una plataforma Windows/Intel, se obtiene la misma salida compilada (o los mismos bytecodes) que en un sistema Macinstosh o Unix.

    Esta máquina virtual Java (recibe este nombre porque es una máquina imaginaria que se implementa emulando por software una máquina real) es una aplicación que debe ser instalada en el ordenador para que los programas Java puedan ser ejecutados y será diferente para cada plataforma. A la hora de hacer funcionar una aplicación Java en una plataforma distinta a aquella en la que se escribió el programa, bastará con llevar los archivos de bytecodes generados por la primera plataforma a la otra plataforma (donde deberá haberse instalado la máquina virtual Java correspondiente a ésta, que será distinta a la máquina virtual Java de la primera plataforma).

    En la práctica, a partir de la aparición de Java 2 (ó Java 1.2) ni siquiera es necesario que la plataforma de destino tenga la JVM correspondiente, basta con que tenga instalado el JRE (Java Runtime Environment), que tiene el permiso de Sun para distribuirse gratuitamente junto con las aplicaciones realizadas por los desarrolladores. Lógicamente, Sun provee de un gran número de versiones de JVM y JRE, para distintos ordenadores y sistemas operativos. En resumidas cuentas: los archivos binarios Java, que se obtienen al compilar el código fuente, son independientes de la plataforma y pueden ejecutarse en múltiples plataformas sin necesidad de volver a compilar el archivo fuente, al contrario de lo que sucede en lenguajes como Visual Basic 6.0 ó Delphi.

1.2.-.NET

    Microsoft .Net es, de acuerdo con la definición de Microsoft, una plataforma que comprende servidores, clientes y servicios. Consiste en un conjunto de aplicaciones como Visual Studio .Net, los servicios .Net, etc. Esta plataforma es una implementación basada en estándares abiertos como SOAP, WSDL, C#, y el CLI (Command Line Interface). Desde el punto de vista del programador, el entorno .NET ofrece un solo entorno de desarrollo para todos los lenguajes que soporta (actualmente [Abril 2002] unos 30: Visual Basic, C++, C#, Visual J#, Fortran, Cobol...). La manera en que lo hace se verá más adelante.

    La estrategia .Net es innovadora en el sentido de que no compila aplicaciones en código nativo -es decir, no compila aplicaciones en código específico para Intel o Mac, por ejemplo-. La compilación, al igual que sucede con Java, se realiza en dos pasos sucesivos. El código escrito por el programador se compila en el lenguaje intermedio de Microsoft (MSIL: Microsoft Intermediate Language), del mismo modo que las instrucciones en Java se convierten en bytecodes. Es entonces cuando el CLR (CLR: Common Language Runtime ó entorno común de ejecución) de Microsoft compila en tiempo de ejecución las aplicaciones en código nativo de la plataforma Intel ó Mac, por ejemplo. El CLR también revisa el código, verificando la seguridad del mismo y recolectando los objetos para los cuales no existe ya ninguna referencia (recolección de basura), además de gestionar las excepciones entre otras tareas. Es inevitable comparar este manera de trabajar con los bytecodes de Java.

    Para generar el código MSIL, los compiladores de .NET utilizan la información recogida en el CTS (Common Type System), un sistema de tipos comunes en el que se incluyen todos los tipos de datos, estructuras y operaciones de muchos lenguajes de alto nivel distintos. Para que el código pueda utilizarse en otras aplicaciones escritas en otro/otros lenguajes es necesario que los lenguajes usados cumplan la CLS (Common Language Specification), una especificación de los tipos de datos, estructuras y operaciones comunes a todos los lenguajes de programación (y, por tanto, un subconjunto del CTS).

    El código escrito en un lenguaje que cumpla la CLS puede ser utilizado en el entorno .NET en aplicaciones escritas en otros lenguajes que también cumplan la CLS (Nota: Es precisa la exigencia de que cumplan la CLS, pues el CTS es demasiado general y podría suceder que un lenguaje A usara características del CTS de las que otro lenguaje B carece, por lo que no sería posible utilizar código escrito en A en aplicaciones escritas en B -y viceversa-). Por ejemplo, es posible definir una clase en C# y derivar una subclase de ella usando Visual Basic .Net, pues ambos lenguajes se ajustan a la CLS aunque su sintaxis sea muy diferente. Del mismo modo, y por poner otro ejemplo, un bucle que imprima diez veces el tradicional mensaje "Hola Mundo" se escribirá de distinta manera en C# y Visual Basic .Net (o en lenguajes de terceras partes como Fortran, Cobol, etc.), pero los compilador de estos lenguajes -si cumplen la CLS- generarán el mismo código MSIL.

    Por otro lado, Visual Basic ha experimentado un profundo cambio y puede ya ser considerado como un verdadero lenguaje orientado a objetos. Estos cambios se deben a que debe cumplir la CLS para que pueda utilizarse junto a otros lenguajes de la plataforma .NET en aplicaciones .NET. Sólo en VB 4.0 se introdujeron algunas de las características de la orientación a objetos, pero ni siguiera en la versión 6.0 se implementaron todas.

    C# (C Sharp) es un nuevo lenguaje de programación incluido en la plataforma .Net por vez primera. Es un lenguaje orientado a objetos fuertemente "tipado", diseñado por Microsoft para obtener una elevado rendimiento con una relativa simplicidad del lenguaje. Como ya se ha apuntado antes, pero vale la pena remarcar este punto, la plataforma .NET está centrada en torno al Common Languaje Runtime (similar a la Java Virtual Machine de Sun) y a un conjunto de bibliotecas que pueden ser usadas por una amplia variedad de lenguajes capaces de trabajar conjuntamente al ser compilados todos en el lenguaje intermedio MSIL, ya citado anteriormente. C# juega un importante papel en .NET porque ha sido diseñado para trabajar de forma óptima con .NET y ciertas características de .NET se implementaron pensando en que su rendimiento fuera óptimo con C# (de hecho, algunas bibliotecas de .NET como Collection, XML, ADO+, ASP+, GDI+ y otras fueron escritas en C#).

    A la vista del lenguaje, puede decirse que fue concebido basándose en Java y C++. Algunas (no todas) de las similitudes entre Java y C# son las siguientes:

  • Ambos lenguajes compilan un código independiente de la máquina y el sistema operativo que se ejecuta mediante sus correspondientes entornos (JVM o entorno .NET).
  • Incorporan un "recolector de basura".
  • No necesitan punteros (Java no los permite y C# permite un uso restringido dentro del código señalado como unsafe (inseguro).
  • No se utilizan ficheros de cabecera (como en C y C++), todo el código se empaqueta en packages (Java) o assemblies (C#).
  • Admiten hilos (threads).
  • Admiten herencia múltiple mediante interfaces.
  • Permiten clases internas (clases en el interior de otras clases).
  • No admiten programación estructurada, cualquier "cosa" pertenece a una clase.

    Entre las ventajas mencionadas por Microsoft de utilizar este lenguaje, sintácticamente también parecido a Java, es que ha sido diseñado pensando en Internet y arquitecturas de componentes: En C#, cualquier objeto puede representarse como un objeto COM, permitiendo una integración relativamente sencilla con aplicaciones escritas en otros lenguajes.

    Posiblemente, C# se utilizará para escribir aplicaciones (o partes de aplicaciones) que requieran un alto rendimiento (como el que podría proporcionar C ó C++) sin tener necesidad de preocuparse de aspectos como la gestión de la memoria, la construcción de bibliotecas de bajo nivel, la comprobación de los índices de los arrays, etc.

    La plataforma .Net permite utilizar un lenguaje llamado Visual J# (todavía no he tenido la ocasión de utilizarlo, por lo que me baso en lo comentado de forma oficial por Microsoft y algunos articulistas independientes), que implementa casi de forma completa el JDK 1.1.4 (Java Development Kit) de Sun dentro de .Net. Al igual que sucedía con Visual J++, el JNI (Java Native Interface) ha sido excluido de Visual J#. Aunque aún es pronto para juzgar este lenguaje y sus herramientas de desarrollo asociadas, posiblemente tendrá una fuerte dependencia del entorno Windows (Ver EL FUTURO). De todos modos, debido a que solo alcanza hasta el JDK 1.1.4 (quizás por los problemas legales que tuvo y tiene Microsoft con Sun) estará en desventaja con J2EE, cuya última versión utiliza el SDK 1.4.x.

    Por último, la plataforma .NET se ha diseñado teniendo muy presente los servicios Web, una nueva forma de enfocar el negocio del software. Aunque una explicación en detalle de los servicios Web excede con mucho los propósitos de este artículo, puede decirse que los servicios Web son una prolongación lógica de la arquitectura cliente/servidor.

    Para intentar clarificar, aunque sea sólo un poco, el concepto básico de servicio Web expondré informalmente el caso de un usuario que necesitara una aplicación para hacer cálculos de distintos tipos (estadísticos, financieros, científicos, etc.). La aplicación que necesita podría, pues, considerarse formada por distintos servicios o componentes (el servicio que se encarga de realizar los cálculos estadísticos mediante las fórmulas que lleva incorporadas, el que realiza los cálculos financieros, y así sucesivamente). Hasta hace poco tiempo, nuestro usuario compraría una aplicación estándar X, comercializada por la compañía Y, que incluiría -al menos- todos los servicios que necesitara y probablemente muchos otros que no necesitaría. La aparición de los servicios Web cambia radicalmente el modo de hacer comercio: ahora la empresa Y podría tener instalados los componentes o servicios de la aplicación X en un servidor Web propio y nuestro usuario se conectaría, mediante un navegador Web, a ese servidor y utilizaría, previo pago, los servicios de la aplicación (que ahora serían también servicios Web) que realmente necesitara.

    Las consecuencias que se derivan del uso de los servicios Web cambian totalmente las reglas del juego: los usuarios pueden optar por alquilar los componentes que necesiten, que siempre estarán actualizados, sin necesidad de comprar aplicaciones completas mediante el sistema actual de licencias. Aún así, pese al entusiasmo despertado en la comunidad de programadores alrededor de los servicios Web, aún hay un largo camino que recorrer (unificación de estándares, adaptación de las empresas y consumidores a estos servicios).

1.3.- SIMILITUDES ENTRE J2EE Y .NET

  • El propósito tanto de J2EE como de la plataforma .NET es facilitar y simplificar el desarrollo de aplicaciones empresariales o corporativas. De cara al comercio electrónico, las JSP (Java Server Pages) son muy similares a ASP (Active Server Pages) o a su descendiente ASP .Net, y los EJB (Enterprise JavaBeans) son muy similares a los COM/COM+ de Microsoft.
  • Los servidores de aplicaciones J2EE y .Net proporcionan un modelo de acceso de componentes a datos y de lógica del negocio, separados por una capa intermedia de presentación implementada mediante ASP .Net (:Net) ó Servlets (J2EE).
  • Visual Basic .Net y C# son lenguajes orientados a objetos, al igual que Java, y en su diseño ha tenido mucha importancia la existencia de Internet.
  • Desde la perspectiva de los desarrolladores, J2EE y .Net proporcionan las herramientas para crear Servicios Web.
  • Tal y como se ha expuesto J2EE y .Net son multiplataforma. Al usar .Net una compilación en dos pasos, le permitiría teóricamente proporcionar en el futuro entornos de ejecución para diferentes plataformas de forma similar a Java y sus JREs y SDKs.

2.- COMPARACIÓN DE J2EE Y .NET.

2.1- Ventajas de .Net frente a J2EE

    a) Una ventaja muy importante del entorno .Net frente a J2EE es la posibilidad de emplear múltiples lenguajes de programación, mientras que J2EE sólo trabaja con uno: Java. Aunque sin duda algún teórico pensara que lo ideal sería que solo hubiera un lenguaje de programación (a ser posible estandarizado), esta idea es tan utópica como pensar que el esperanto acabará substituyendo a otros idiomas humanos. La realidad es que esta alta diversidad de lenguajes es obligatoria por la misma variedad de las necesidades de los programadores. Todavía hoy existen más líneas de código escritas en Cobol que en C++ ó Java. Un lenguaje moderno y orientado a objetos como Java puede resultar totalmente ineficaz -y hasta inadecuado- a la hora de abordar problemas que involucren cálculos matemáticos masivos y complejos, mientras que esos mismos cálculos pueden ser abordados mucho más adecuadamente con un lenguaje tan primitivo como Fortran 77. Por otro lado, .Net posibilita así que programadores de terceros lenguajes pasen a esta plataforma reduciendo el tiempo de aprendizaje y entrenamiento.

    b) Las herramientas de desarrollo incluidas por Microsoft en su Visual Studio .Net son mucho más simples, intuitivas y sencillas de manejar que las herramientas de desarrollo equivalentes en J2EE suministradas por otras empresas (entre ellas la propia Sun). Cualquier programador medio/avanzado se manejará rápidamente con la programación del interface de usuario en Visual Studio .Net, al igual que sucedía con versiones anteriores de Visual Studio.

    c) C# es un lenguaje interesante, fácil de aprender por los programadores de Java (de hecho, Microsoft ofrece un conversor de Java a C#), que en caso de estandarizarse podría resultar un lenguaje muy conveniente para ciertas tareas de programación en diferentes plataformas. No está escrito en ninguna parte que los lenguajes no puedan evolucionar (de hecho, tanto los lenguajes de programación como los lenguajes humanos lo hacen) y, en ese sentido, C# es una rama evolutiva más del árbol de los lenguajes orientados a objetos.

    d) Microsoft ha impulsado con gran energía los servicios Web y ha resaltado su importancia entre toda la comunidad de desarrolladores (utilicen o no los productos de esta compañía). La plataforma .Net se ha diseñado considerando los servicios Web (mientras que J2EE no) siendo estos servicios propios de la plataforma y ofrece una nueve versión de ASP, ASP .Net, que puede considerarse un entorno de programación "de verdad" en lugar de un entorno basado en scripts. En términos de la propia Microsoft ".Net fue construido para la integración a través de los servicios Web XML usando protocolos y formatos de ficheros como SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language), y UDDI (Universal Description, Discovery, and Integration)". Comparativamente, .Net va por delante con respecto a J2EE con respecto a servicios Web y estos servicios son propios de la plataforma, aunque J2EE respondió ya con el lanzamiento del Java Web Services Developer Pack. De todos modos, la facilidad, rapidez y sencillez con la que se pueden construir servicios Web con el Asistente de servicios Web de Visual Studio .Net son muy superiores a las de las herramientas para construir servicios Web dentro del entorno de J2EE.

2.2- Ventajas de J2EE frente a .Net

    a) Las implementaciones de J2EE pueden adquirirse a distintas compañías, mientras que .Net solo puede comprarse a Microsoft. El hecho de que haya distintas organizaciones implementando J2EE ofrece mayor variedad para los usuarios finales y permite la existencia de una cierta competencia entre ellas para obtener mejores productos que no existe en el caso de Microsoft y su .Net.

    b) Debido al proceso evolutivo de los productos de Microsoft, y en muchos casos, por motivos de compatibilidad la seguridad frente a virus informáticos de los productos de Microsoft es menor que los basados en Java, pues desde un comienzo Java se fundamentó en un estricto modelo de seguridad.

    c) Como se ha escrito ya, las aplicaciones Java pueden correr en una amplia gama de sistemas operativos (desde sistemas empresariales como Windows 2000, OS/390, Solaris, HP-UX, IRIX u otras versiones de Unix hasta en sistemas orientados más a ordenadores personales como Mac OS, Windows 9x ó Linux ,y en sistemas operativos para dispositivos móviles) y de arquitecturas hardware. Hasta la fecha, .Net corre solamente sobre sistemas operativos de Microsoft (aunque esta situación podría cambiar en el futuro), siendo J2EE el único entorno de desarrollo que ofrece una independencia real de la plataforma.

    d) La tecnología Java es una tecnología abierta (en el sentido de que el código de la plataforma completa puede ser obtenido, revisado y estudiado por cualquiera que esté interesado) y se basa en gran parte en estándares de organizaciones de normalización y estándares empresariales "de facto". Esto posibilita que los desarrolladores puedan conocer y entender completamente cómo hace las cosas Java y aprovecharlo para sus aplicaciones y, por otro lado, al basarse en estándares empresariales, simplifica la integración con productos de múltiples compañías. En contraposición, solo el código fuente del Nuevo lenguaje C# de la plataforma .Net ha sido abierto al público general (aunque Microsoft permite a compañías con las que le unen intereses comunes el acceso al código fuente de ciertas partes de .Net).

    e) Aunque Java fue creado originalmente por una compañía: Sun MicroSystems, lo cierto es que J2EE es ahora el producto de la colaboración de más de 400 empresas y organizaciones de todo tipo (públicas, privadas sin ánimo de lucro, privadas con ánimo de lucro, y de normalización en ámbitos nacionales e internaciones). La plataforma .Net es -y será- el producto de una sola compañía, que aunque haya implementado algunos estándares en .Net y esté intentando conseguir que ciertos tecnologías se conviertan en estándares "oficiales", no puede tener el mismo consenso que .Net (sobretodo teniendo en cuenta que la mayor parte de su código no es público).

    f) La tecnología Java goza ya de una cierta veteranía (6 años en el mercado). J2EE y ha probado su eficacia en muchos entornos y situaciones empresariales distintas, mientras que .Net ha visto oficialmente la luz el presente año.

3- EL FUTURO

    Java es un lenguaje destinado a perdurar entre la comunidad programadora. Aunque Microsoft insista en que dentro de la estrategia .Net Java es un lenguaje más, lo cierto es que se ha extendido tanto entre la comunidad programadora, docente e investigadora que su futuro es incluso prometedor, pese a la fuerte competencia de Microsoft. Posiblemente muchos programadores de C++ acabarán programando en C#, por la propia naturaleza de las aplicaciones que desarrollan, pero también muchos de ellos terminaron programando en Java al desarrollar aplicaciones orientadas a la Red.

    Hasta el momento, la plataforma J2EE es la única plataforma que corre en múltiples sistemas operativos y múltiples máquinas hardware y cuyos usuarios pueden seleccionar la implementación que más le convenga. Esta plataforma corre actualmente no solo en ordenadores doméstico o servidores o estaciones de trabajo, sino también en multitud de dispositivos como teléfonos móviles, agendas electrónicas, componentes electrónicos industriales de automatización, etc. Su implantación en el mercado de la tos teléfonos móviles GMS y UMTS puede asegurar un próspero futuro, puesto que es más que probable que acaben convirtiéndose en un medio generalizado de acceso a Internet. Java ya ha hecho realidad el sueño de "escriba el código una vez, ejecútelo en cualquier parte". Mientras escribo estas líneas [Abril 2002], acabo de recibir un comunicado de prensa sobre la presentación de "Java 2 Micro Edition" (J2ME) por parte de Telefónica Móviles España y Sun Microsystems en dos facultades universitarias de San Sebastián (Facultad de Informática de la Universidad del País Vasco y la Escuela Superior de Ingenieros de Telecomunicación del campus donostiarra de la Universidad de Navarra). J2ME es, por supuesto, otra edición de la tecnología Java , completamente basada en éste y que en el comunicado de prensa se presenta como "Java2ME es, a la vez que un lenguaje de programación, una plataforma reducida que permite cargar y ejecutar pequeñas aplicaciones en los terminales móviles de forma sencilla y abierta. Es decir, convierte los teléfonos móviles en dispositivos programables e incrementa sus posibilidades de personalización con aplicaciones que elige el propio usuario." Según la propia Sun, J2ME es "un entorno de ejecución Java altamente optimizado dirigido a productos de consumo como teléfonos celulares, teléfonos con pantalla y sistemas de navegación de automóviles".

    Tal y como se señaló antes, es perfectamente posible que Microsoft proporcione en el futuro entornos de ejecución .NET para diferentes plataformas de forma similar a Sun (como para Windows 64 bits sobre Itanium ó para un Windows CE sobre un Pocket PC), pero aún no lo ha hecho para plataformas no Windows, y sería raro que lo hiciera por su propia estrategia de mercado hasta la fecha. Aún así, llegaría con un retraso considerable con respecto a J2EE. Por otro lado, no debe olvidarse que en el pasado anuncios de traslados de tecnologías Microsoft, por parte de la misma compañía, a otras plataformas (componentes DCOM, por ejemplo) no llegaron a materializarse.

    La política de Microsoft, por motivos internos (intentos de incorporar nuevas tecnologías y/o tendencias a sus productos) y legales, ha dado tantos virajes bruscos que, en algunos casos, ha abandonado a su suerte a desarrolladores y programadores que habían adoptado sus soluciones(un caso muy llamativo fueron los Active Documents; una solución que permitía a los programadores de Visual Basic crear aplicaciones Web sin utilizar programación script. Esta solución, por prometedora que pareciera, siguió idéntico camino que los dinosaurios).

    En parte también por motivos comerciales de Microsoft, la substitución de productos y tecnologías por otros ha resultado tan rápida y repetitiva que muchos desarrolladores de pequeñas y medianas empresas han renunciado a poder seguir esa evolución, y se han quedado con tecnologías de Microsoft a las que ya no da soporte (RDO, DAO, por ejemplo) o han migrado hacia Java. Los argumentos de Microsoft de que "programar es cada vez más fácil con .Net" son de poco peso para las empresas que han invertido multitud de recursos técnicos, económicos y de personal en productos y/o tecnologías de Microsoft ya obsoletas, y que además son incompatibles con los nuevos productos. Frente a esto, J2EE ofrece unas perspectivas comparativamente mucho más estables (grandes multinacionales han tomado la decisión de no comenzar a usar .Net y continuar o comenzar con J2EE).

    Por otro lado, la penetración de Microsoft en el mercado de los grandes sistemas corporativos y en las aplicaciones empresariales de alto nivel no es excesivamente alta. En la elaboración de J2EE han participado multitud de empresas, muchas de ellas especializadas en dar servicio software/hardware a grandes empresas y sistemas corporativos y que, por tanto, conocen muy bien ese sector del mercado informático. Esta pluralidad, también hace más probable que J2EE acabe convirtiéndose en un estándar "de facto", al haber sido desarrollado con la participación de muchas empresas que, inevitablemente, habrán mirado hacia sus propios productos a la hora de elaborarlo. J2EE quizá no llegue a convertirse en un estándar tipo ISO ó IEEE, pero al fin y al cabo el protocolo TCP/IP también es un estándar "de facto".

    Tal y como ya se ha comentado, dentro del Visual Studio .Net el lenguaje Visual Basic .Net es un verdadero lenguaje orientado a objetos. Esta conversión es un lenguaje 100% OO. -quizá, por otro lado, inevitable- no deja de tener sus inconvenientes: aunque muchos programadores profesionales consideraban a VB como un lenguaje menor, era (y es) el lenguaje más utilizado del planeta debido sobretodo a su sencillez. Con VB .Net, se precisan unos conocimientos sólidos de programación OO para apreciar en profundidad las ventajas del mismo y realizar programas que aprovechen todas sus posibilidades. Un programador que posea todos estos conocimientos optará probablemente por trabajar en C# ó Java, que tienen una sintaxis más estándar. Quién sabe, quizás suprimir la sencillez de Visual Basic en aras de hacerlo más moderno acabé con su principal encanto.

    C# es un lenguaje que puede convertirse en una estupenda herramienta para desarrolladores que quieran elaborar código de alta eficiencia, sin tener que nadar/naufragar en C++, pero aún es pronto para poder afirmar nada seguro sobre su futuro. Aún así, es un lenguaje de alta calidad y que seguramente será ideal para programar dentro de .Net por su simbiosis con el mismo.

    Después de la experiencia desastrosa del entorno de desarrollo Visual J++ (un entorno de desarrollo Java de Microsoft que amasó una gran cuota de mercado debido a su precio altamente competitivo, lo elaborado de sus herramientas y a su rápido compilador, pero al precio de ser un producto orientado a aprovechar los recursos específicos de Windows, no estándar, y que tenía su propia JVM ( Java Virtual Machine de Microsoft) y su WFC: (Windows Foundation Classes) que suponían una dependencia de Windows) que acabó con un alud de demandas judiciales y con el abandono del producto por parte de Microsoft, es difícil que cualquier programador serio de Java decida utilizar Visual J#, sean cual sean sus facilidades de uso.

    Los servicios Web aún deben recorrer un largo camino entre estándares, proveedores de servicios y consumidores de los mismos, pero hasta el momento Microsoft y específicamente .Net llevan una cierta ventaja sobre J2EE. Aún así, sigue planeando la cuestión de la independencia de la plataforma. Si .Net no acaba siendo realmente multiplataforma, posiblemente J2EE predominará en el desarrollo de servicios Web para grandes empresas y para servicios Web clientes que requieran no depender de una plataforma específica, y .Net predominará en el desarrollo de servicios Web para pequeñas y medianas empresas que usan Windows.

    Aún así, el futuro, como tantas otras cosas, es incierto y seguro que ahora mismo hay alguien que está diseñando -todavía dentro de su cabeza- un nuevo lenguaje de programación que irá un paso más allá. Le deseo suerte.

 

Copyright (c) 2004, Miguel Ángel Abián. Este documento puede ser distribuido solo bajo los términos y condiciones de la licencia de Documentación de javaHispano v1.0 o posterior (la última versión se encuentra en http://www.javahispano.org/licencias/).

Artículo Orginalmente publicado en JavaHispano

 

Pedro  Herrarte  Sánchez
J2EE Y .NET: LA RIVALIDAD PERMANENTE
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:29/05/2006
Última actualizacion:29/05/2006
Visitas totales:9986
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com