Cliente/Servidor en Web: la era de los objetos de JavaIntroducción a JavaInternet es la aplicación por excelencia que acelerará el uso de objetos, a los que ha transformado en una oportunidad de mercado masivo que atrae a los mejores y más brillantes desarrolladores de todo el mundo. Cambio de Paradigma La
aparición de Java obedece a un cambio de paradigma: de Cliente/Servidor
(C/S) hacia NCA (Network Computer Architecture). La arquitectura cliente/servidor
que ha caracterizado a las redes de los últimos años ha sufrido
un cambio con la aparición de Java. Y aunque la arquitectura siga
siendo Cliente/Servidor, el manejo del software ha cambiado y ha dado entrada
a toda una nueva forma de aplicaciones.
Java es el primer paso hacia una Web de
Objetos. Java no es suficiente por si mismo necesita tener una complementación
con una infraestructura de objetos distribuidos, esto nos sirve para dar
la entrada a un nuevo tema, más allá de Java.
Cliente/Servidor en el Web, estilo Java Java
introduce un modelo completamente nuevo de interacción de cliente/servidor
en el Web. Nos permite generar pequeños programas como componentes
llamados applets, que pueden descargarse en un visualizador compatible
con Java. Los applets nos permiten distribuir contenido ejecutable a lo
largo del Web junto con los datos.
Sistema de código movil de JavaJava cuenta con muchos mecanismos que permiten una suerte de movimientos transparente; es como crear aplicaciones capaces de viajar po la red en forma segura. Aparte
del intercambio de contenido tradicional - como texto, gráficos
, audio y video - java permite que aplicaciones Web intercambien código
movil. Java es un sistema de código movil. Otros ejemplos de sistemas
de código móvil son Safe-Tel, Omniware de Colusa y Telescript
de General Magic. Microsoft quizá provea también una versión
exportable de su mecanismo de Visual Basic Script (VBScript).
Los sistemas de código movil constituyen la tecnología de base para los agentes móviles. Permiten distribuir código (y datos) entre clientes y servidores. Los objetos móviles - que Java llama applets - son piezas autónomas de código ejecutable. Como el software tradicional, el software tradicional, es dinámicamente cargado y ejecutado por programas independientes como visualizadores y servidores Web. Como mínimo, el código movil debe ser exportable y seguro. A medida que el uso de visualizadores Web se incremente, se descargarán y ejecutarán cientos de estos módulos de código ejecutable, de manera que es crucial controlar con toda precisión el acceso de los módulos a recursos importantes. He aquí una breve lista de los servicios que cabría esperar de un sistema de código móvil:
La magia de los códigos de bytes Al
igual que todos los sistemas de código móvil, Java ofrece
tanto exportabilidad como seguridad. Un applet de Java es una unidad exportable
de código móvil. Java logra la exportabilidad compilando
applets en la máquina virtual de Java, La cual sigue el modelo de
instrucciones de un procesador RISC virtual. Estas primitivas instrucciones
se llaman códigos de bytes (bytecodes). Los códigos
de bytes trasladan las instrucciones compiladas al nivel más bajo
posible sin volverlas dependientes de la máquina. El lenguaje Java
se afirma especificando el tamaño de sus tipos de datos básicos
y el comportamiento de sus operadores aritméticos. Los programas
son los mismos en cualquier plataforma; no existen incompatibilidades de
tipos de datos entre arquitecturas de hardware y software.
Los códigos de bytes hace de Java un lenguaje parcialmente compilado. La creación de códigos de bytes representa alrededor del 80% de la labor de compilación; el otro 20% es realizado por el tiempo de ejecución de Java. Así puede decirse que Java es un 80% de compilación y 20% de interpretación. Esta combinación parece ofrecer una excelente exportabilidad de código; la abstracción de códigos de bytes fue diseñada para el eficiente transporte de código entre múltiples plataformas. Por supuesto esto implica un costo. En
este caso, se gana en exportabilidad lo que se pierde en desempeño;
el código interpretado en Java es unas 15 veces más lento
que el código compilado nativo. Java también soporta compiladores
regulares, así como compiladores JIT (Just In Time), capaces de
generar código que corra a velocidades nativas de C++.
El verificador de Java En
la imagen aparecen los pasos a seguir para crear y ejecutar un applet de
Java. En primer término, usted corre un applet a través de
un compilador de máquina virtal de Java para crear los códigos
de bytes y almacenarlos en un servidor. Sus códigos de bytes serán
copiados en una máquina cliente destino cuando un visualizador solicite
su applet. Tan pronto como los códigos de bytes arriben a la máquina
destino, correrán a través de un verificador de Java, sumamente
suspicaz en cuanto al código que recibe.
El verificador corre los códigos de bytes por un guante de pruebas. Analiza la presencia de cosas como punteros falsificados, violaciones de acceso, desajustes de tipos de parámetros y sobreflujos de pilas. En cierto sentido, el verificador actúa como un "portero"; asegura que el código que recibe de fuentes tanto locales como remotas sea seguro. No se permite la ejecución de ningún código que no apruebe los análisis del verificador. Si éste se muestra satisfecho, cede los códigos de bytes al cargados de clases. El cargador de clases suele trasmitir los códigos de bytes a un intérprete. Este es el elemento de tiempo de ejecución que ejecuta las instrucciones de Java en la máquina destino. El intérprete puede proceder a la ejecución sin revisar nada, porque sabe que el código recibido ha sido purificado. Puede correr a toda velocidad sin demérito de la confiabilidad. Sin embargo, incluso "a toda velocidad"
un intérprete es de un orden de magnitud más lento que el
código compilado nativo. Así, los diseñadores de Java
intentan ahora arreglar la situación con técnicas de compilador
justo a tiempo JIT, lo que significa traducir un applet completo a código
nativo antes de ejecutarlo. Eso puede incrementar un tanto la carga general
durante el proceso de traducción, pero permite que el código
resultante corra a casi velocidad nativa.
Seguridad en Java La
importación de código por la red es potencialmetne una invitación
abierta a todo tipo de problemas. Sin las verificaciones adecuadas, los
applets de Java pueden convertirse en campo de cultivo de virus terribles.
Java parte del supuesto de que no se puede confiar en nada, y procesde
en consecuencia. Su entorno ofrece cinco mecanismos de defensa, o perímetros
defensivos entrelazados: 1) el propio lenguaje Java, 2) el verificador,
3) el cargador de códigos de bytes, 4) las listas de control de
acceso y 5) el visualizador de Java. He aquí una veloz descripción
de los perímetros defensivos:
El Lenguaje JavaSun describe el lenguaje Java como "simple, orientado a objetos, distribuido, interpretado, robusto, seguro, neutral en cuanto a arquitecturas, exportable, multihilos y dinámico".Java viene a ser como C más-más-menos-menos A diferencia del C++, Java sólo soporta un solo modelo de herencia para implmentaciones de clases de objetos. Sin embargo, soporta herencia múltiple al nivel de interfaces. Una interfaz de Java es muy semejante a un IDL de CORBA; especifica los contratos de interfaces de una clase sin inmiscuirse en la implementación. Una clase de Java puede implementar una o más interfaces, así como añadir sus propias funciones. Sin embargo, puesto que Java carece de herencia de implementación múltiple, se debe reimplementar la funcionalidad de la interfaz en cada clase que implemente esta interfaz. Java aborda el probelma de colisiones de nombre con C++ introduciendo un concepto de espacio para nombres llamado paquetes o packages. Un paquete, como los modulos de IDL de CORBA, reúne clases afines en paquetes nombrados. A diferencia de c++, Java ofrece recolección
automática de basura. Usted no tiene que ocuparse de la destrucción
de los objetos por medio de destructores. Esto quiere decir que se pueden
crear instancias de nuevos objetos sin temor a fugas de memoria. Las características
multihilos de Java también son muy útiles; facilitan enormemente
la provisión de código exportable asegurado con hilos. Java
integra asimismo manejo de excepciones; la documentación de un método
debe indicar las exepciones que tolera. En general, Java es una delicia
para le programador de C++. Conserva las bondades del C++ y elimina todo
lo desagradable. Lo único que lamentamos es la pérdida de
herencia de implementaciones múltiples.
Applets: Componentes, estilo JavaUsted puede correr aplicaciones Java como programas independientes o como applets invocados por un navegador. Técnicamente, un applet es una pieza de código que hereda su comportamietno de la clase Applet de Java, que extiende con el programa. Un applet no es una aplicación completa. En realidad es un componente que corre en el entorn de un visualizador. En realidad el navegador sirve como estructura de apoyo para la ejecución del applet.El navegador ofrece a sus applets tres servicios útile.
Administración del ciclo de vida de los appletsUn navegador administra todas las fases del ciclo de vida de un applet. Recuérdese que el visualizador descarga primero el applet y después lo corre en su entorno. Tiene adema´s la gentileza de informarle al applet acerca de los eventos más importantes ocurridos en su ciclo de vida. La interfaz Runnable de java define los métodos que un visualizador invoca en un applet durante su ciclo de vida. La mayoría de los applets de Java Implementan códigoq ue reacciona a estas invocaciones de métodos.El navegador invoca init
después de cargar el applet en la memoria. Invoca start
para indicarle al applet que haga todo lo necesario antes de correr. Paint
instruye al applet para que exhiba su contenido. Stop
y Destroy le indica anular
todos sus hilos, detener la ejecución y liberar todos sus recursos.
Esto ocurre cuando el navegador reemplaza la página Web que contiene
al applet por otra página. En síntesis, el navegador es el
dueño del applet.
La etiqueta <APPLET> de HTMLEl principal propósito en la vida de un applet de Java es aportar contenido vivo a las páginas Web exhibidas en un navegador con integración de Java. En contraste con ello, una aplicación Java puede correr por fuera del navegador. La etiqueta APPLET de HTML sirve para colocar un applet en una página Web y describir sus atributos y entorno. La etiqueta le indica al visualizador donde encontrar el applet para descargar. Java propociona un conjunto de métodos para su uso por un applet a fin de que obtenga información sobre su entorno, como los atributos de tiquetas incrustadas y sus valores.La etiqueta APPLET prové la inforamción esencial que conecta al visualizador Web con el applet incrustado. Permite asimismo que usted especifique la información de atributos clave; estos atributos le sirven para configurar un applet y controlara su comportamiento sin tener que generar una solalínea de código. Un applet bien diseñado aportará todos los atributos necesarios para que usted controle su comportamiento a través de HTML. La etiqueta APPLET contiene los atributos requeridos "CODE" (código), "WIDTH" (anchura), y "HEIGHT" (alto); contiene así mismo atributos opcionales como "CODEBASE" (báse de código) y "ALIGN" (alineación). El atributo "CODE" especifica el archivo que contiene el código de bytes del applet. Normalmetne este archivo se encuentra en el mismo directorio que la hoja HTML. Sin embargo, se puede emplear el atributo opcional "CODEBASE" para especificar una ubicación diferente. Los atributos "WIDTH" y "HEIGHT" especifican el área dentro de una página de HTML que pertenece al applet. Se puede usar el atributo opcional "ALIGN" para indicarle al navegador donde se desea que coloque el applet. Ejemplo: <APPLET CODE=Hello.class CODEBASE="applets/miaplicacion" WIDTH=300 HEIGHT=200 ALIGN=left> <PARAM NAME=Param1 VALUE="valor 1" <PARAM NAME=Param2 VALUE="Valor 2" </APPLET>Los atributos PARAM son específicos de cada applet. Cada uno de ellos puede definir tantos parámetros como necesite. Usted debe proporcionar una etiqueta "PARAM" para cada par "nombre/valor. Un applet puede acceder a cualquier parámetro que se le pase con getParameter. Bibliotecas de JavaLas bibliotecas de Java exitenden el lenguaje; aportan un entorno exportable para la generación de aplicaciones de Java aseguradas con hilos. Se componen de seis paquetes de Java en los que se implementan cientos de clases.Para mayor información vea la hoja de productos de Java . He aquí una breve descripción de lo que ofrecen estos paquetes:
Desventaja del Paradigma Cliente/Servidor Anterior
Java da respuesta a algunos problemasLas respuestas que Java presenta al mundo son los siguientes:
Objetivos de Diseño en Java Los
requerimientos de diseño de Java son determinados por la naturaleza
de los ambientes de computación en los cuales el software debe ser
entregado.
El crecimiento masivo de Internet y del World-Wide Web lleva a una forma completamente nueva de ver el desarrollo y la distribución de software. Para vivir en el mundo del comercio y distribución electrónicos, Java debe habilitar el desarrollo de aplicaciones altamente robustas, seguras y de alto rendimiento en plataformas múltiples y redes distribuidas, hetereogéneas. La operación en plataformas múltiples en redes hetereogéneas invalida los esquemas tradicionales de distribución binaria, release, actualización, patch, etc. Para sobrevivir en esta jungla, Java debe ser neutral en arquitectura, portable y dinámicamente adaptable. El sistema de Java que emergió para lograr estas necesidades es simple, de forma que pueda ser fácilmente programado por la mayoría de los desarrolladores; es familiar, de manera que los actuales desarrolladores puedan aprender Java fácilmente; es orientado a objetos, para tomar ventaja de las metodologías modernas de desarrollo de software y para tener cabida dentro de las aplicaciones Cliente/Servidor; tiene multihilamiento (multithreaded), para lograr alto rendimiento en aplicaciones que necesitan hacer actividades múltiples concurrentes, tales como multimedia; y es interpretado, para máxima portabilidad y capacidades dinámicas. Vamos ahora a examinar en más detalle las palabras clave de lo anterior: 1.2.1
Simple, Orientado a Objectos y Familiar
1.2.1 Simple, Orientado a Objectos y FamiliarLa características primarias de Java incluyen un lenguaje simple que puede ser programado sin entrenamiento de programador extensivo mientras que está siendo puesto a tono de la prácticas de software actuales. Los conceptos fundamentales de Java son captados rápidamente, los programadores pueden ser productivos desde el mismo principio.Java es diseñado para ser orientado a objetos desde sus bases. La tecnología de objetos ha encontrado finalmente su entrada en la corriente principal de la programación luego de un período de gestación de treinta años. Las necesidades de sistemas basados en Cliente/Servidor coinciden con las prácticas de paso de mensajes y encapsulamiento del software orientado a objetos. Para funcionar dentro de ambientes basados en red cada vez más complejos, los sistemas de programación debe adoptar conceptos orientados a objetos. Java da una plataforma de desarrollo basada en objetos limpia y eficiente. Los programadores que usan Java pueden accesar la librería existentes de objetos probados que dan funcionalidad yendo desde los tipos de datos básicos a través de I/O y las interfaces de red hasta cajas de herramientas de interfaz de usuario gráfico. Estas librerías pueden ser extendidas para dar un nuevo comportamiento. Aún dado que C++ fue rechazado como un lenguaje de implementación, es un lenguaje familiar pues mantiene su similaridad con el C++ tanto como es posible. Las complejidades innecesarias del C++ se han retirado. 1.2.2 Robusto y SeguroJava está diseñado para crear software altamente confiable. Hace chequeo muy amplio al tiempo de compilación, seguido por un segundo nivel de chequeo al momento de correr. Las características del lenguaje guían a los programadores hacia hábitos de programación confiables.El modelo de manejo de memoria es extremadamente simple: los objetos son creados con un operador new. No hay variables tipo apuntador definidas por el programador, no hay aritmética de apuntadores y hay recolección automática de basura. Este modelo de manejo simple de memoria elimina todas las clases de errores de programación que agobian a los programadores de C y C++. Usted puede desarrollar código en lenguaje Java con confianza de que el sistema encontrará muchos errores rápidamente y que los problemas principales no permanecerán dormidos hasta que su código de producción ha sido enviado al usuario. Java está diseñado para operar en ambientes distribuidos, lo que significa que la seguridad es de importancia monumental. Con características de seguridad diseñadas dentro del lenguaje y el sistema de Run-time, Java lle permite construir aplicaciones que no pueden ser invadidas desde afuera. En el ambiente de red, la aplicaciones escritas en Java son seguras con respecto a intrusión de código no autorizado intentando ver detrás de bambalinas y la creación de virus o invasión de sistemas de archivos. 1.2.3 Neutral en Arquitectura y PortableJava está diseñado para soportar aplicaciones que serán entregadas en ambientes de red hetereogéneos. En tales ambientes, las aplicaciones deben ser capaces de ejecutarse en una variedad de arquitecturas de hardware. Dentro de esta variedad de plataformas de hardware, las aplicaciones deben ejecutarse encima de una variedad de sistemas operativos e interoperar con interfaces de lenguaje de programación múltiples. Para acomodarse a la diversidad de ambientes operativos, el compilador Java genera bytecodes- un formato intermedio neutral en arquitectura diseñado para transportar código eficientemente a plataformas de hardware y software múltiples. La naturaleza interpretada de Java resuelve el problema de distribución binaria y el problema de versión; el mismo bytecodes de Lenguaje Java correrá en cualquier plataforma.La neutralidad de Arquitectura es sólo una parte de un sistema realmente portable. Java va más allá en portabilidad siendo estricto en su definición de lenguaje básico. Java coloca un estaca en la tierra y especifica los tamaños de sus tipos de datos básicos y el comportamiento de sus operadores aritméticos. Sus programas son los mismos en cualquier plataforma - no hay incompatibilidades de datos a través de las arquitecturas de hardware y software. La neutralidad de arquitectura y la plataforma de lenguaje portable de Java es conocido como la Máquina Virtual de Java. Es la especificación de una máquina abstracta para la cual los compiladores de lenguaje Java pueden generar código. Las implementaciones específicas de la Máquina Virtual de Java para plataformas de hardware y software específicos entonces logran la realización completa de máquina virtual. La Máquina Virtual de Java está basada primariamente en la definición del estándar de la industria de especificación de interfaz POSIX de un interfaz de sistema portable. La implementación de la Máquina Virtual de Java en nuevas arquitecturas es una tarea relativamente recta siempre que la plataforma objeto cumpla con los requerimientos básicos tales como soporte de multithreading. 1.2.4 Alto RendimientoEl rendimiento es siempre una consideración. Java logra mayor rendimiento adoptando un esquema por el cual el interpretador puede correr con velocidad total sin necesitar chequear el ambiente de run-time. El recolector de basura automático corre como un hilo en background con baja prioridad, asegurando una alta probabilidad de que la memoria esté disponible cuando se requiera, llevando a un mejor rendimiento. Las aplicaciones que requieren grandes cantidades de poder computacional pueden ser diseñadas de forma que las secciones de cálculos intensivos puedan ser reescritas en código de máquina nativo si lo requiere y con la interfaz correspondiente a la plataforma de Java. En general, los usuarios perciben que las aplicaciones interactivas respondan rápidamente aún dado que son interpretadas.1.2.5 Interpretado, Con multihilamiento y DinámicoEl interpretador de Java puede ejecutar bytecodes de Java directamente en cualquier máquina para la cual el interpretador y el sistema run-time haya sido transportado. En una plataforma interpretada tal como el sistema Java, la fase de linkado de un programa es simple, incremental, y de peso liviano. Usted se beneficia de desarrollo, prototipos, experimentación, y desarrollo rápido mucho más rápido en contra de los ciclos de compilación, linkado y prueba de peso pesado.Las aplicaciones modernas basadas en red, tales como el HotJava World-Wide Web, típicamente necesitan hacer varias cosas al mismo tiempo. Un usuario trabajando con HotJava puede correr varias animaciones concurrentemente mientras que hace download de una imagen y está haciendo scroll en la página. La capacidad de multithreading de Java da los medios para construir aplicaciones con muchos hilos concurrentes de actividad. Multithreading por eso resulta en un alto mayor de interactividad para el usuario final. Java soporta multithreading a nivel de lenguaje con la adición de primitivas de sincronización sofisticadas: la librería de lenguaje da la clase Thread, y el sistema de run-time da primitivas de monitor y condition lock. A nivel de librería, más aún, las librerías de sistema de alto nivel de Java han sido escritas para ser seguras en cuanto a threads: la funcionalidad dada por las librerías está disponible sin conflictos para múltiples hilos de ejecución concurrentes. Mientras que el compilador de Java es estricto en su chequeo estático al momento de compilación, el lenguaje y el sistema de run-time en sus etapas de linkaje. Las clases son linkadas sólo si se necesitan. Los nuevos módulos de código pueden ser linkados según demanda desde una variedad de fuentes, aún desde fuentes a través de una red. En el caso del browser HotJava y aplicaciones similares, el código ejecutable interactivo puede ser cargado desde cualquier lugar, que habilita la actualización transparente de aplicaciones. El resultado serán servicios en línea que evolucionesn constantemente; ellos pueden permanener innovadores y frescos, atender más clientes e incitar el crecimiento del comercio electrónico en la Internet.
1.3 LA PLATAFORMA JAVA - UNA NUEVA APROXIMACION A COMPUTACION DISTRIBUIDADesarrollar sus aplicaciones usando Java tendrá un software que es portable a través de múltiples arquitecturas de máquinas, sistemas operativos, e interfaces gráficas de usuarios, que es seguro y de alto rendimiento. Webliografía ORFALI, Robert; HARKEY, Dan. EDWARDS, Jeri. |