Com, Dcom, Corba
Com, Dcom, Corba
com
Componentes
1. Introducción.
2. COM / DCOM
3. CORBA
4. Common Gateway Interface (CGI)
5. Java en Computación Distribuida
6. Comparación de Arquitecturas
7. Bibliografía
INTRODUCCIÓN.
En las primeras épocas de la computación las computadoras operaban independientemente una de
otra sin tener comunicación entre ellas. Las aplicaciones de software eran comúnmente
desarrolladas para un propósito especifico. Compartir los datos entre sistemas era mínimo y se
hacías de una manera muy fácil, se transportaban los medios de almacenamiento (tarjetas, cintas,
discos, etc.) de un lado a otro. El próximo paso fue conectar las computadoras a través de una red
usando protocolos propietarios, luego los protocolos fueron estandarizados. Luego llego la era de
los sistemas abiertos y la integración de sistemas por los cuales un cliente podía elegir varios
componentes de hardware de diferentes vendedores e integrarlos para crear una configuración
necesaria con costos razonables.
Así siguió el paso de los años. Nuevas técnicas de desarrollo de software se fueron sucediendo
una tras otra, desde la programación estructurada y modular hasta la programación orientada a
objetos, siempre buscando reducir costos y aumentar la capacidad de reuso. Si bien la
programación orientada a objetos fomentó el reuso y permitió reducir costos, no se ha logrado aún
el objetivo último: comprar componentes de varios proveedores e integrarlos para formar
aplicaciones que a su vez se integren para formar sistemas completos.
Para lograr la integración total de componentes realizados por terceras partes es necesario llegar a
un acuerdo común en el que se establezcan los mecanismos necesarios para que esa integración
se haga efectiva. Será necesario especificar de manera independiente al lenguaje de programación
en el que se desarrolló el componente cuáles son sus puntos de acceso (funciones), luego será
necesario establecer los mecanismos de comunicación entre componentes, que podrían estar
ejecutándose en una máquina remota.
En este sentido, y buscando satisfacer esa necesidad de mecanismos estándar e interfaces
abiertas, son tres los esfuerzos que más han sobresalido. Por un lado, Microsoft ha introducido en
el mercado sus tecnologías COM, DCOM y COM+. Otro participante es Sun Microsystems, que ha
presentado Java Beans. El tercero es el Object Management Group, un consorcio integrado por
varias industrias importantes, que ha desarrollado CORBA (Common Request Broker Architecture).
1. COM / DCOM
Microsoft Distributed COM (DCOM) extiende COM (Component Object Model) para soportar
comunicación entre objetos en ordenadores distintos, en una LAN, WAN, o incluso en Internet. Con
DCOM una aplicación puede ser distribuida en lugares que dan más sentido al cliente y a la
aplicación.
Como DCOM es una evolución lógica de COM, se pueden utilizar los componentes creados en
aplicaciones basadas en COM, y trasladarlas a entornos distribuidos. DCOM maneja detales muy
bajos de protocolos de red, por lo que uno se puede centrar en la realidad de los negocios:
proporcionar soluciones a clientes.
Atualmente DCOM viene con los sistemas operativos Windows 2000, NT, 98 y también está
disponible una versión para Windows 95 en la página de Microsoft. También hay una
implementación de DCOM para Apple Macintosh y se está trabajando en implementaciones para
plataformas UNIX como Solaris.
1.1 La arquitectura DCOM
DCOM es una extensión de COM, y éste define como los componentes y sus clientes interactuan
entre sí. Esta interacción es definida de tal manera que el cliente y el componente puede conectar
sin la necesidad de un sistema intermedio. El cliente llama a los métodos del componente sin tener
que preocuparse de niveles más complejos.
En los actuales sistemas operativos, los procesos están separados unos de otros. Un cliente que
necesita comunicarse con un componente en otro proceso no puede llamarlo directamente, y
tendrá que utilizar alguna forma de comunicación entre procesos que proporcione el sistema
operativo. COM proporciona este tipo de comunicación de una forma transparente: intercepta las
llamadas del cliente y las reenvía al componente que está en otro proceso.
Cuando el cliente y el componente residen en distintas máquinas, DCOM simplemente reemplaza
la comunicación entre procesos locales por un protocolo de red. Ni el cliente ni el componente se
enteran de que la unión que los conecta es ahora un poco más grande.
Las librería de COM proporcionan servicios orientados a objetos a los clientes y componentes, y
utilizan RPC y un proveedor de seguridad para generar paquetes de red estándar que entienda el
protocolo estándar de DCOM.
1.2 Los Componentes y su reutilización
Muchas aplicaciones distribuidas no están desarrolladas
Al existir infraestructuras de hardware, software, componentes, al igual que herramientas, se
necesita poder integrarlas y nivelarlas para reducir el desarrollo y el tiempo de trabajo y coste.
DCOM toma ventaja de forma directa y transparente de los componentes COM y herramientas ya
existentes. Un gran mercado de todos los componentes disponibles haría posible reducir el tiempo
de desarrollo integrando soluciones estandarizadas en las aplicaciones de usuario. Muchos
desarrolladores están familiarizados con COM y pueden aplicar fácilmente sus conocimientos a las
aplicaciones distribuidas basadas en DCOM.
Cualquier componente que sea desarrollado como una parte de una aplicación distribuida es un
candidato para ser reutilizado. Organizando los procesos de desarrollo alrededor del paradigma de
los componentes permite continuar aumentando el nivel de funcionalidad en las nuevas
aplicaciones y reducir el tiempo de desarrollo.
Diseñando para COM y DCOM se asegura que los componentes creados serán útiles ahora y en el
futuro.
1.3 Independencia de la localización
Cuando se comienza a implementar una aplicación distribuida en una red reak, aparecen distintos
conflictos en el diseño:
Los componentes que interactuan más a menudo deberían estar localizados más cerca.
Algunos componentes solo pueden ser ejecutados en máquinas específicas o lugares
específicos.
Los componentes más pequeños aumentan la flexibilidad, pero aumentan el tráfico de red.
Los componentes grandes reducen el tráfico de red, pero también reducen la flexibilidad.
Con DCOM, estos temas críticos de diseño pueden ser tratados se forma bastante sencilla, ya que
estos detalles no se especifican en el código fuente. DCOM olvida completamente la localización
de los componentes, ya esté en el mismo proceso que el cliente o en una máquina en cualquier
lugar del mundo. En cualquier caso, la forma en la que el cliente se conecta a un componente y
llama a los métodos de éste es identica. No es solo que DCOM no necesite cambios en el código
fuente, sino que además no necesita que el programa sea recompilado. Una simple reconfiguración
cambia la forma en la que los componentes se conectan entre sí.
La independencia de localización en DCOM simplifica enormemente las tarea de los componentes
de aplicaciones distribuidas para alcanzar un nivel de funcionamiento óptimo. Supongamos, por
ejemplo, que cierto componente debe ser localizado en una máquina específica en un lugar
determinado. Si la aplicación tiene numerosos componentes pequeños, se puede reducir la carga
de la red situándolos en la misma LAN, en la misma máquina, o incluso en el mismo proceso. Si la
aplicación está compuesta por un pequeño número de grandes componentes, la carga de red es
menor y no es un problema, por tanto se pueden poner en las máquinas más rápidas disponibles
independientemente de donde esten situadas.
Con la independencia de localización de DCOM, la aplicación puede combinar componentes
relacionados en máquinas "cercanas" entre si, en una sola máquina o incluso en el mismo proceso.
Incluso si un gran número de pequeños componentes implementan la funcionalidad de un gran
módulo lógico, podrán interactuar eficientemente entre ellos.
1.4 Independencia del lenguaje de programación
Una cuestión importante durante el diseño e implementación de una aplicación distribuida es la
elección del lenguaje o herramienta de programación. La elección es generalmente un termino
medio entre el coste de desarrollo, la experiencia disponible y la funcionalidad. Como una
extensión de COM, DCOM es completamente independiente del lenguaje. Virtualmentem cualquier
lenguaje puede ser utilizado para crear componentes COM, y estos componentes puede ser
utilizado por muchos más lenguajes y herramientas. Java, Microsoft Visual C++, Microsoft Visual
Basic, Delphi, PowerBuilder, y Micro Focus COBOL interactuan perfectamente con DCOM.
Con la independencia de lenguaje de DCOM, los desarrolladores de aplicaciones puede elegir las
herramientas y lenguajes con los que estén más familiarizados. La independencia del lenguaje
permite crear componentes en lenguajes de nivel superior como Microsoft Visual Basic, y después
reimplementarlos en distintos lenguajes como C++ o Java, que permiten tomar ventaja de
características avanzadas como multihilo.
1.5 Independencia del protocolo
Muchas aplicaciones distribuidas tienen que ser integradas en la infraestructura de una red
existente. Necesitar un protocolo específico de red, obligará a mejorar todos los cliente, lo que es
inaceptable en muchas situaciones. Los desarrolladores de aplicaciones tienen que tener cuidado
de mantener la aplicación lo más independiente posible de la infraestructura de la red.
DCOM proporciona esta transparencia: DCOM puede utilizar cualquier protocolo de transporte,
como TCP/IP, UDP, IPX/SPX y NetBIOS. DCOM proporciona un marco de seguridad a todos estos
protocolos.
Los desarrolladores pueden simplemente utilizar las características proporcionadas por DCOM y
asegurar que sus aplicaciones son completamente independiente del protocolo.
2. CORBA
CORBA es un Middeware o marco de trabajo estándar y abierto de objetos distribuidos que permite
a los componentes en la red interoperar en un ambiente común sin importar el lenguaje de
desarrollo, sistema operacional, tipo de red, etc. En esta arquitectura, los métodos de un objeto
remoto pueden ser invocados “transparentemente” en un ambiente distribuido y heterogéneo a
través de un ORB (Object Request Broker). Además del objetivo básico de ejecutar simplemente
métodos en objetos remotos, CORBA adiciona un conjunto de servicios que amplían las
potencialidades de éstos objetos y conforman una infraestructura sólida para el desarrollo de
aplicaciones críticas de negocio.
CORBA es la respuesta del “Grupo de Gestión de Objetos” (Object Management Group – OMG) a
la necesidad de interoperabilidad ante la gran proliferación de productos hardware y software, es
decir permitir a una aplicación comunicarse con otra sin importar el tipo de red, protocolo, sistema
operacional o lenguaje de desarrollo.
CORBA automatiza muchas tareas comunes y “pesadas” de programación de redes tales como
registro, localización y activación de objetos; manejo de errores y excepciones; codificación y
decodificación de parámetros, y protocolo de transmisión.
En un ambiente CORBA, cada Implementación de Objeto, define bien su Interface a través una
especificación normalizada conocida como IDL (Interface Definition Language) a través de la cual
en forma Estática (en el momento de compilación) o en forma Dinámica (en el momento de
ejecución) un Cliente que requiera el servicio de una Implementación de Objeto, puede ser
ejecutada. Las invocaciones a métodos remotos son enviados por los clientes llamando objetos
locales llamados “Stubs” (generados por un compilador de IDL - Estático), el cual intercepta dichas
invocaciones y continua el proceso de llevar y retornar automáticamente dicha invocación. La
Implementación del objeto, no tiene que conocer el mecanismo por el cual un Cliente le ha
invocado un servicio.
Cuando el Cliente y una Implementación de Objeto están distribuidos por una red, ellos usan el
protocolo GIOP/IIOP suministrado por la arquitectura para lograr la comunicación.
La forma de cómo una Implementación de Objeto (desarrollada por un programador de
aplicaciones) se conecta a un ORB, es a través de un Adaptador de Objetos. Este adaptador recibe
las peticiones por la red e invoca los servicios a la implementación correspondiente.
Actualmente CORBA ya se han resuelto los problemas fundamentales de interoperabilidad y
comunicación entre objetos [Omg95a] [Omg99a] [Vin98] y se han definido y especificado un
conjunto de servicios comunes requeridos para la construcción de las aplicaciones [Omg95b]
[Omg95c] [Omg98c], pero donde hay gran actividad es en la especificación de objetos comunes
por dominio de aplicación o conocidas en CORBA como Interfaces de Dominio. Allí se trabajan en
áreas como Telecomunicaciones, Medicina, Finanzas, Manufactura, etc. [Omg98a] [Omg98b]
[Omg99b] [Omg99c].
CORBA esta fundamentado en dos modelos: Un modelo de Objetos, el cual agrega todas las
características de Orientación por Objetos como Tipos de Datos, Abstracción, Polimorfismo y
Herencia y un modelo de referencia o arquitectura conocida como OMA (Object Management
Architecture).
2.1 Servicios Middleware
Para resolver los problemas inherentes a sistemas heterogéneos y distribuidos, que dificultan la
implementación de verdaderas aplicaciones empresariales, los proveedores de software están
ofreciendo interfaces de programación y protocolos estándares. Estos servicios se denominan
usualmente servicios middleware, porque se encuentran en una capa intermedia, por encima del
sistema operativo y del software de red y por debajo de las aplicaciones de los usuarios finales. En
esta sección se describen las características principales de los servicios middleware [2].
Un servicio middleware es un servicio de propósito general que se ubica entre plataformas y
aplicaciones. Por plataformas se entiende el conjunto de servicios de bajo nivel ofrecidos por la
arquitectura de un procesador y el conjunto de API´s de un sistema operativo. Como ejemplos de
plataformas se pueden citar: Intel x86 y Win-32, SunSPARCStation y Solaris, IBM RS/6000 y AIX,
entre otros.
Un servicio middleware está definido por las API´s y el conjunto de protocolos que ofrece. Pueden
existir varias implementaciones que satisfagan las especificaciones de protocolos e interfaces. Los
componentes middleware se distinguen de aplicaciones finales y de servicios de plataformas
específicas por cuatro importantes propiedades:
Son independientes de las aplicaciones y de las industrias para las que éstas se
desarrollan.
Se pueden ejecutar en múltiples plataformas.
Se encuentran distribuidos.
Soportan interfaces y protocolos estándar.
Debido al importante rol que juegan una interfaz estándar en la portabilidad de aplicaciones y un
protocolo estándar en la interoperabilidad entre aplicaciones, varios esfuerzos se han realizado
para establecer un estándar que pueda ser reconocido por los mayores participantes en la industria
del software. Algunos de ellos han alcanzado instituciones como ANSI e ISO; otros han sido
propuestos por consorcios de industrias como ser la Open Software Foundation y el Object
Management Group y otros han sido impulsados por industrias con una gran cuota de mercado.
Este último es el caso de Microsoft con su Windows Open Services Architecture.
CORBA es el estándar propuesto por el OMG. EL OMG fue fundado en 1989 y es el más grande
consorcio de industrias de la actualidad, con más de 700 compañías que son miembros del grupo.
Opera como una organización no comercial sin fines de lucro, cuyo objetivo es lograr establecer
todos los estándares necesarios para lograr interoperabilidad en todos los niveles de un mercado
de objetos.
Originalmente los esfuerzos de la OMG se centraron en resolver un problema fundamental: cómo
lograr que sistemas distribuidos orientados a objetos implementados en diferentes lenguajes y
ejecutándose en diferentes plataformas interactúen entre ellos. Más allá de los problemas
planteados por la computación distribuida, problemas más simples como la falta de comunicación
entre dos sistemas generados por compiladores de C++ distintos que corren en la misma
plataforma frenaron los esfuerzos de integración no bien comenzados. Para opacar aún más el
escenario, distintos lenguajes de programación ofrecen modelos de objetos distintos. Los primeros
años de la OMG estuvieron dedicados a resolver los principales problemas de cableado. Como
resultado se obtuvo la primer versión del Common Object Request Broker, publicado en 1991. Hoy
en día, el último estándar aprobado de CORBA está por la versión 2.3, y la versión 3.0 está a punto
de ser lanzada.
Desde sus principios, el objetivo de CORBA fue permitir la interconexión abierta de distintos
lenguajes, implementaciones y plataformas. De esta forma, CORBA cumple con las cuatro
propiedades enumeradas como deseables de los servicios middleware. Para lograr estos objetivos,
la OMG decidió no establecer estándares binarios (como es el caso de COM); todo está
estandarizado para permitir implementaciones diferentes y permitir que aquellos proveedores que
desarrollan CORBA pueden ofrecer valor agregado. La contrapartida es la imposibilidad de
interactuar de manera eficiente a nivel binario. Todo producto que sea compatible con CORBA
debe utilizar los costosos protocolos de alto nivel.
CORBA está constituido esencialmente de tres partes: un conjunto de interfaces de invocación, el
ORB (object request broker) y un conjunto de adaptadores de objetos (objects adapters). CORBA
va más allá de simples servicios middleware, provee una infraestructura (framework) para construir
aplicaciones orientadas a objetos. Las interfaces definen los servicios que prestan los objetos, el
ORB se encarga de la localización e invocación de los métodos sobre los objetos y el object
adapter es quien liga la implementación del objeto con el ORB.
Para que las interfaces de invocación y los adaptadores de objetos funcionen correctamente, se
deben cumplir dos requisitos importantes. En primer lugar, las interfaces de los objetos deben
describirse en un lenguaje común. En segundo lugar, todos los lenguajes en los que se quieran
implementar los objetos deben proveer un mapeo entre los elementos propios del lenguaje de
programación y el lenguaje común. La primer condición permite generalizar los mecanismos de
pasaje de parámetros (marshaling y unmarshaling). La segunda permite relacionar llamadas de o a
un lenguaje en particular con el lenguaje de especificación común. Este lenguaje común fue una
parte esencial de CORBA desde sus orígenes y es conocido como el OMG IDL: Interface Definition
Language. Existen mapeos del OMG IDL a C, C++, Java y Smalltalk,
2.2 Arquitectura de CORBA
CORBA define una arquitectura para los objetos distribuidos. El paradigma básico de CORBA es el
de un pedido servicios de un objeto distribuido. Todo definido por el OMG está en términos de este
paradigma básico.
Los servicios que un objeto proporciona son dados por su interfaz . Los interfaces se definen en la
lengua de la definición de interfaz de OMG (IDL). Los objetos distribuidos son identificados por las
referencias del objeto, que son mecanografiadas por los interfaces de IDL.
La figura abajo representa gráficamente una petición. Un cliente lleva a cabo una referencia del
objeto a un objeto distribuido. La referencia del objeto es mecanografiada por un interfaz. En la
figura debajo del objeto la referencia es mecanografiada por Conejo interfaz. El corredor de la
petición del objeto, u ORB, entrega la petición al objeto y vuelve cualquier resultado al cliente. En la
figura, a salto la petición vuelve una referencia del objeto mecanografiada por AnotherObject
interfaz.
2.3 CORBA como estándar para los objetos distribuidos
Una de las metas de la especificación de CORBA es que los clientes y las puestas en práctica del
objeto son portables. La especificación de CORBA define el interfaz de un programador del uso
(API) para los clientes de un objeto distribuido así como un API para la puesta en práctica de un
objeto de CORBA. Esto significa que el código escrito para un producto de CORBA del vendedor
podría, con un mínimo de esfuerzo, ser reescrito para trabajar con el producto de un diverso
vendedor. Sin embargo, la realidad de los productos de CORBA en el mercado es hoy que los
clientes de CORBA son portables pero las puestas en práctica del objeto necesitan alguna
reanudación virar hacia el lado de babor a partir de un producto de CORBA a otro.
CORBA 2,0 agregó interoperabilidad como meta en la especificaciones. El detalle de En, CORBA
2,0 definen el protocolo del un de la red, llamado IIOP (el Internet Enterrar-orbe protocolo), permite
del que un clientes usando un productos de CORBA del cualquier vendedor para comunicarse
hacen trampas el los objetos usando un producto de CORBA del vendedor de otro de cualquier. El
trabaja de IIOP un del del través Internet, el o más exacto, un través de la cualquier puesta en
práctica de TCP/IP.
Interoperability es más importante en un sistema distribuído que la portabilidad. IIOP se usa en
otros sistemas que no intentan proporcionar el API de CORBA ni siquiera. En particular, IIOP se
usa como el protocolo de transporte para una versión de Java RMI (para que llamó "RMI encima de
IIOP"). Desde que EJB se define por lo que se refiere a RMI, puede usar IIOP también. Los varios
servidores de la aplicación disponible en el uso del mercado IIOP pero no expone el API de
CORBA entero. Porque ellos todos usan IIOP, programas escritos entre sí al interoperate de la lata
de estos API diferente y con programas escritos al API de CORBA.
2.4 CORBA y el desarrollo basado en componentes
Como se mencionó anteriormente, el desarrollo basado en componentes que se puedan comprar y
poner en marcha sin mayores dificultades (Plug & Play) es una meta a alcanzar que facilitaría el
reúso de software. En esta sección se hace una pequeña introducción al desarrollo basado en
componentes y el rol que le compete a CORBA en este ámbito.
Muy frecuentemente el término componente se utiliza sin precisar su significado, dando por
sentado que todos lo conocen. Pero no siempre es así, y al utilizar el término componente puede
suceder que no siempre se esé hablando de lo mismo. Es deseable entonces comenzar con una
definición de componente.
Un componente ha sido definido en la European Conference on Object Oriented Programming
(ECOOP) de 1996 como una “una unidad de composición con interfaces contractuales
especificadas y dependencias de contexto explícitas.”[7] Un componente de software puede ser
desarrollado independientemente y utilizado por terceras partes para integrarlo mediante
1
composición a sus sistemas.” Los componentes son para crear software utilizando composición,
por eso es esencial que sean independientes y que se presenten en formato binario, permitiendo
así distintos vendedores e integración robusta.
Para que un componente pueda ser integrado por terceras partes en sus sistemas, éste deber ser
suficientemente autocontenido y debe proveer una especificación de lo que requiere y provee. En
otras palabras, los componentes deben encapsular su implementación e interactuar con otros
componentes a través de interfaces bien definidas.
Un componente no es un objeto. A diferencia de los objetos, los componentes no tienen estado.
Esto quiere decir que un componente no puede distinguirse de una copia de sí mismo. Un
componente puede tomar la forma de un archivo ejecutable o una biblioteca dinámica que
usualmente cobra vida a través de objetos, pero no es este un requisito indispensable. De hecho,
los primeros componentes conocidos (aunque en su momento no se los haya definido así) fueron
las bibliotecas de prodecimientos. Sin embargo, los objetos, con sus características de
encapsulación y polimorfismo, facilitan la construcción e integración de componentes.
Y al hablar de objetos vale la pena distinguir aquí los objetos de las clases. Una clase es una
definición de propiedades y funcionalidades ha ser provistas por los objetos. A partir de una clase
es posible instanciar objetos. Los componentes pueden contener una o más clases y serán los
clientes de los componentes quienes soliciten la creación de las instancias de estas clases.
Como escenario de ejemplo para mostrar cómo sería la construcción de software basado en
componentes, se podría pensar en una librería. Una librería necesita un sistema que le permita
llevar el stock de sus libros, contabilizar sus ventas y gestionar los pedidos a sus proveedores.
Quien estuviera a cargo de este proyecto de desarrollo podría adquirir un componente de
facturación que provee las siguientes clases (entre otras):
Producto Venta
ID Nro Venta
Nombre Productos
Precio Subtotal
Cantidad En IVA
Stock Total
Figura 1: Clases provistas por el componente Facturación
RMI pasa objetos por su tipo verdadero permitiendo que nuevos tipos sean introducidos en una
máquina virtual remota por consiguiente extendiendo el comportamiento de una aplicación de
manera dinámica. RMI trata un objeto remoto de manera diferente de un objeto local cuando el
objeto se le pasa de una máquina virtual a otra. En lugar de hacer una copia de la implementación
del objeto en la máquina virtual receptora. El solicitante invoca un método en el stub local que tiene
como responsabilidad cargar la llamada al método en el objeto remoto. Un stub para objetos
remotos implementa el mismo conjunto de interfaces remotas que el mismo objeto remoto
implementa. Esto permite que un stub se acople a cualquiera de las interfaces que el objeto remoto
implemente. Sin embargo, esto también significa que solamente aquellos métodos, definidos en
una interface remota, estén disponibles para su solicitud en la máquina virtual receptora.
Java IDL
Java IDL esta basado en CORBA (Common Object Request Brokerage Architecture). Una
característica clave de CORBA es un lenguaje-neutral IDL (Interface Definition Language). Cada
lenguaje que soporta CORBA tiene su propio traductor IDL y como su nombre lo dice, Java IDL
soporta la traducción para Java. Para soportar la interacción entre objetos en programas
separados, Java IDL proporciona un ORB (Object Request Broker). El ORB es una librería clase
que facilita la comunicación de bajo nivel entre las aplicaciones Java IDL y otras aplicaciones
CORBA.
¿RMI o IDL?
Java RMI es una solución 100% Java para objetos remotos que proporciona todas
las ventajas de las capacidades de Java "una vez escrito, ejecutarlo en cualquier
parte". Los servidores y clientes desarrollados con Java RMI se muestran en
cualquier lugar en la red sobre cualquier plataforma que soporta el ambiente de
ejecución de Java. Java IDL, en contraste, está basado en una industria estándar
para solicitar, de manera remota, a objetos escritos en cualquier lenguaje de
programación. Como resultado, Java IDL proporciona un medio para conectar
aplicaciones "transferidas" que aún cubren las necesidades de comercio pero que
fueron escritos en otros lenguajes.
Actualmente Java RMI y Java IDL emplean protocolos diferentes para la
comunicación entre objetos sobre diferentes plataformas. Java IDL utiliza el
protocolo estándar de CORBA IIOP (Internet Inter-Orb Protocol). Al igual que IDL,
IIOP facilita la residencia de objetos en diversas plataformas y escritos en diversos
lenguajes para interactuar de manera estándar. Actualmente Java RMI utiliza el
protocolo JRMP (Java Remote Messaging Protocol), un protocolo desarrollado
específicamente para los objetos remotos de Java.
En Java IDL, un cliente interactúa con un objeto remoto por referencia. Esto es, el
cliente nunca tiene una copia actual del objeto servidor en su propio ambiente de
ejecución. En su lugar, el cliente utiliza stubs en la ejecución local para manipular
el objeto servidor residiendo sobre la plataforma remota. En contraste, RMI facilita
que un cliente interactúe con un objeto remoto por referencia, o por su valor
descargándolo y manipulándolo en el ambiente de ejecución local. Esto se debe a
que todos los objetos en RMI son objetos Java. RMI utiliza las capacidades de
serialización del objeto, que proporciona el lenguaje Java, para transportar los
objetos desde el servidor al cliente. Java IDL, dado que interactúa con objetos
escritos en cualquier lenguaje, no toma ventaja de "una vez escrito, ejecutarlo en
cualquier parte", característica del lenguaje de programación Java.
5. Comparación de Arquitecturas
Bases
La base para las arquitecturas de objeto distribuido presentadas, es la arquitectura
cliente-servidor.
La arquitectura utiliza un tipo de protocolo de transporte (IIOP, JRMP, DCOM o
HTTP) para enviar mensajes a través de las computadoras en una red.
Utilizan un tipo de invocación de método remoto.
Neutralidad de la Arquitectura vs. Transparencia en la Comunicación
CORBA proporciona transparencia en la comunicación, transparencia local/remota
e independencia de la plataforma. Java RMI proporciona una arquitectura neutral,
transparencia en la comunicación pero no proporciona transparencia local/remota.
DCOM proporciona soporte para solamente plataformas Windows. CGI, por su
parte, proporciona transparencia en la comunicación, transparencia local/remota,
independencia de la plataforma y una arquitectura neutral.
Abastracción
CORBA proporciona una solución abstracta de cómputo distribuido, que se puede
implementar a través de plataformas, sistemas operativos y lenguajes. Mientras
que DCOM, CGI y los Componentes Distribuidos Java especifican detalles de
implementación.
Independencia del Lenguaje
Los estándares de CORBA, CGI y DCOM se utilizan en distintos lenguajes
mientras que Java RMI se utilizan solamente con lenguaje Java. Sin embargo,
Java IDL se utiliza en diversos lenguajes.
Java RMI también es un ORB en el sentido genérico, esto es nativo al lenguaje
Java.
Complejidad y Madurez
CORBA es más maduro que las otras tres tecnologías y están disponibles diversas
implementaciones de éste estándar.
CORBA utliza IDL debido a lo cual, el desarrollo de aplicaciones es más complejo
que DCOM, CGI y los Componentes Java.
Tecnología
A pesar que Java y CGI's proporciona medios para cómputo distribuido es aún una
tecnología de programación mientras que CORBA es una tecnología de
integración. DCOM es también una tecnología de integración pero sólamente bajo
plataformas Windows.
Servicios Distribuidos
CORBA proporciona un conjunto más completo de servicios distribuidos que Java
y DCOM. Aunque Java esta creciendo con API's para proporcionar éstos servicios.
Paso por Valor/Referencia
CORBA actualmente no soporta el paso de objetos por valor mientras que DCOM,
Java RMI y CGI's (en desarrollo a través de URN) si los soporta.
Simplicidad en el desarrollo de aplicaciones
Las aplicaciones distribuidas se producen fácilmente empleando DCOM y Java
puesto que existen herramientas disponibles para el desarrollo de la aplicación.
CORBA carece de esta facilidad y así es difícil construir aplicaciones CORBA, lo
mismo sucede con CGI's.
Herencia
DCOM proporciona soporte para objetos que tienen interfaces múltiples pero no
soporta herencia en la interfaz. CORBA soporta herencia en la interfaz pero no
soporta objetos que tienen interfaces múltiples.
Recolección de Basura (Garbage Collection GC)
DCOM y los objetos Java tienen recolección de basura, lo cual no tiene CORBA ni
CGI's.
Otros
CORBA realiza la tarea de registro de objetos, la generación de referencia a objeto
y la inicialización del skeleton de manera implícita. En DCOM éstas tareas son
manejadas por el programador explícitamente o bien, se realizan dinámicamente
durante el tiempo de ejecución.
El protocolo DCOM esta fuertemente atado a RPC, CORBA no lo está.
Las tecnologías desarrolladas en la parte cliente tales como Java, no son
probables que reemplacen a los CGI porque existen ciertas aplicaciones que las
del lado del servidor están mejor adaptados para realizarse.
Muchas de las limitaciones de CGI son limitaciones de HTML o HTTP. Dado que los estándares del
Web, en general, que involucran éstas limitaciones no afectan las capacidades de CGI.
Cuadro Comparativo
Arquitectura Independencia del Independencia del Tecnología Paso por Garbage Independencia
Lenguaje Lenguaje Valor/Referenci Collection de Plataforma
a
CORBA si integración por referencia no si
BIBLIOGRAFIA
http://www.microsoft.com/Com/ Página oficial de Microsoft
http://msdn.microsoft.com/library/en-us/dndcom/html/msdn_dcomarch.asp Arquitectura DCOM
http://msdn.microsoft.com/library/en-us/dndcom/html/msdn_dcomtec.asp Resumen Técnico de
DCOM
http://www.cvc.uab.es/shared/teach/a20383/practiques/ Introducción al modelo COM
http://www.gsi.dit.upm.es/~jcg/is/curso97-98/grupos/y3/html_doc/indice2.htm OLE/COM/DCOM
http://www.dis.eafit.edu.co/areas/telematica/online/corba/intro/ Objetos distribuidos
CORBA/RMI/DCOM
http://www.gsyc.inf.uc3m.es/~jjmunoz/lro/9798/copia/%257Eatrigo/datos/indice.html Programación
COM/DCOM
http://club.idecnet.com/~chavesj/dcom/ DCOM for children
http://www.codeguru.com/activex/index.shtml Código fuente ActiveX/COM/DCOM
http://www.cs.concordia.ca/~teaching/comp690j/dcomTutorial/comTutorial.html Tutorial
DCOM/COM
http://www.codeproject.com/com Código fuente COM/DCOM
http://journal.iftech.com/articles/dcom_1/ Excelente Tutorial de COM/DCOM
http://www.cs.wustl.edu/~schmidt/submit/Paper.html DCOM y CORBA (comparación)
http://shrike.depaul.edu/~tliu/ds520/link.htm Links ActiveX y DCOM
http://www.dalmatian.com/com_dcom.htm DCOM
http://swt.informatik.uni-jena.de/~stolle/f/CompSem2000/works/COM-paper_html/ Introducción a
COM, DCOM y COM+
http://sern.ucalgary.ca/Courses/CPSC/547/W2000/webnotes/COM/COM.html ActiveX, Com y
DCOM
http://tochna.technion.ac.il/project/LearnDCOM/html/LearnDCOM.html COM/DCOM/ActiveX
http://www.elai.upm.es/spain/Investiga/GCII/areas/administracion/DCOM.htm Introducción DCOM
http://delta.cs.cinvestav.mx/~gmorales/seminario2000/ArtLuis/ArtLuis.html; comparación entre
arquitecturas