You are on page 1of 24

JXTA Java™ Standard Edition v2.

5
Programmers Guide

1. Capitulo 1: Introducción

JXTA™ es un conjunto abierto, de protocolos peer-to-peer (P2P) generalizados que permiten a


cualquier dispositivo en red -sensores, teléfonos celulares, PDAs, laptops, workstations,
servers y supercomputadores- comunicarse y colaborar mutuamente como iguales (peers, en
latin par = igual). Los protocolos JXTA son independientes del lenguaje de programación, e
implementaciones múltiples, también conocidas como bindings (atascamientos), existen para
diversos ambientes. El uso común de los protocolos JXTA significa que son todos totalmente
interoperables. Esta guía se centra en el binding para la plataforma Java™, Standard Edition
software (JSE™). Guías similares están siendo elaboradas para los bindigs de la plataforma
Java™ Micro Edition (JME™) y C/C++/.NET.

Esta guía es para desarrolladores de software que les gustaría escribir y distribuir servicios
P2P y aplicaciones usando la tecnología JXTA y el lenguaje de programación Java Standard
Edition. Esta provee una introducción a la tecnología JXTA, describe la arquitectura de red de
JXTA y conceptos claves, e incluye ejemplos y discusiones de construcciones de programación
esenciales usando JXTAJXSE.

POR QUE JXTA™?

A medida que la Web continúa creciendo en contenido y en número de dispositivos


conectados, la computación peer-to-peer está llegando a ser cada vez más frecuente.
Ejemplos populares incluyen intercambio de archivos, computación distribuida, y servicios de
mensajería instantánea. Mientras cada una de estas aplicaciones realiza tareas diferentes,
todas ellas comparten muchas de las mismas propiedades. tales como descubrimiento de
pares(peers), búsqueda y transferencia de archivos o datos. Actualmente, el desarrollo de
aplicaciones P2P es ineficiente, con desarrolladores resolviendo los mismos problemas y
duplicando implementaciones de infraestructura similares. Y, la mayoría de las aplicaciones
son especificadas a una sola plataforma y no pueden comunicarse y compartir datos con otras
aplicaciones.

Un principio primario de diseño de JXTA es proveer una plataforma que contenga las funciones
básicas de las redes P2P. por ejemplo, JXTA supera defectos potenciales de muchos sistemas
existentes del P2P:
• Interoperabilidad: La tecnología JXTA esta diseñada para habilitar la provisión de
servicios P2P al igual(peer) para localizar y comunicarse el uno con otro
independientemente de direcciones de red y protocolos físicos.

• Independiente de la Plataforma: La tecnología JXTA esta diseñada para ser


independiente del lenguaje de programación, protocolos de transporte de red, y
plataformas de despliegue.

• Presente en cualquier parte(Ubiquity): La tecnología JXTA esta diseñada para ser


accesible por cualquier dispositivo con pulso digital(digital heartbeat), no solo PCs o una
plataforma de despliegue especifica.

Una característica común de los iguales(peers) en una red P2P es que ellos frecuentemente
existen en el extremo de las redes regulares, este extremo frecuentemente se representa con
dispositivos conectados ocasionalmente que tienen asignadas direcciones no estáticas (ej.
DHCP). Debido a que están sujetos a conectividad imprevisible con direccionamientos de red
potencialmente variables, estos están fuera del alcance estándar del DNS. JXTA equipa a los
iguales(peers) en el extremo de la red con el aprovisionamiento de un esquema de dirección
global único de par(globally unique peer addressing scheme) que es independiente del
tradicional nombre de servicio (traditional name services). Como una consecuencia de el uso
de IDs JXTA, un igual(peer) puede migrar a través de redes físicas, cambiando transportes y
direcciones de red, incluso estando temporalmente desconectado, y continuar siendo
direccionable por otros iguales(peers).

QUE ES LA TECNOLOGIA JXTA™?

JXTA es una plataforma de computación de red abierta diseñada para computación peer-to-
peer(P2P) proveyendo los bloques de construcción básica y servicios requeridos para permitir
a cualquier cosa dondequiera conectividad de la aplicación.

El nombre “JXTA” no es un acrónimo. Es una contracción para yuxtapuesto, colocado junto a


algo o en posición inmediata a algo. Es es un reconocimiento que P2P es yuxtapuesto a
cliente-servidor o computación basada en Web, los cuales son modelos tradicionales de
computación distribuida hoy en día.

JXTA provee un conjunto común de protocolos abiertos que cuentan con implementaciones de
referencia de código abierto para el desarrollo de aplicaciones Peer to Peer. Los protocolos
JXTA estandarizan la forma en que sus iguales:

- Se descubren.

- Se autorgnizan en grupos de iguales.

- Publican y descubren recursos en la red.


- Se comunican entre sí.

- Se supervisan.

Los protocolos JXTA son diseñados para ser independientes de lenguajes de programación y
protocolos de transporte. los protocolos de comunicación pueden ser implementados en
lenguaje de programación Java, C/C++, .NET, ruby y muchos otros lenguajes. Por otra parte,
pueden ser aplicados sobre TCP/IP, HTTP, bluetooth y otras redes de transporte a la vez
manteniendo interoperabilidad mundial.

QUE SE PUEDE HACER CON LA TECNOLOGÍA JXTA™?

Los protocolos JXTA permiten a los desarrolladores construir y desplegar servicios y


aplicaciones P2P interoperables. Debido a que los protocolos son independientes del lenguaje
de programación y de los protocolos de transporte, dispositivos heterogéneos con diferente
pila de software pueden interoperar con otros. Utilizando la tecnología JXTA, los
desarrolladores pueden escribir aplicaciones conectadas, interoperables que pueden:

- Buscar otros iguales en la red con descubrimiento dinámico através de firewalls y NATs

- Fácilmente compartir recursos con cualquiera a través de la red.

- Buscar contenidos disponibles en los sitios de la red.

- Crear un grupo de iguales que ofrezcan un servicio.

- Supervisar las actividades de los iguales a distancia o remotamente.

- Mantener la comunicación con otros iguales en la red.

DONDE OBTENER LA TECNOLOGÍA JXTA™?

La información sobre la tecnología JXTA puede encontrarse en el sitio web del proyecto JXTA.
Los recursos incluyen información, documentación, listas de correo, código fuente, binarios y
tutoriales.
INVOLUCRARSE

Como con cualquier proyecto de código abierto, uno de los principales objetivos es conseguir
que la comunidad participe mediante la contribución a JXTA. Dos sugerencia para empezar
JXTA son: unirse a una lista de correo y chatear con otros usuarios JXTA.

- Sumarse a una lista de correo:

únase a la lista de correo para enviar un comentario general, peticiones de características, y


las solicitudes de ayuda. vea la página Lista de Correo de la comunidad Proyecto JXTA para
obtener detalles de cómo subscribirse.

Las actuales lista de correo incluyen:

Anunciar: Importantes anuncios de y para la comunidad JXTA.

Discutir: Discuciones generales osbre la tecnología JXTA, la comunidad JXTA y P2P.

Dev: Discuciones técnicas sobre el diseño e implementación de la tecnología JXTA.

usuario: Discuciones técnicas sobre el uso de JXTA y mejores prácticas para el diseño de
aplicaciones JXTA.

- Chatear con otros entusiasteas de JXTA:

Usted puede aprender sobre la tecnología JXTA usando la aplicación interactiva Shell y
chateando con otros usuarios JXTA y contribuyentes utilizando la aplicación myJXTA que se
puede obtener desde el sitio Project JXTA Downloads.

La demostración de las aplicaciones están disponibles para las siguientes plataformas:


Microsoft Windows, Sistema Operativo Solaris, Linux, Unix , Mac OS X, y otras plataformas
Java disponibles.

A medida que adquiera experiencia utilizando la tecnología JXTA, usted podría contribuir
mediante la presentación de informes de error, escribiendo o extendiendo tutoriales,
colaborando con proyectos existentes y proponiendo nuevos proyectos. La pagina principal del
proyecto JXSE contiene instrucciones adicionales para contribuir.
CAPITULO 2: ARQUITECTURA JXTA™

Descripción

La arquitectura software de JXTA está dividida en tres capas, como se muestra en la figura 2.

 Corazón de JXTA

El corazón de JXTA encapsula las primitivas mínimas y esenciales que son comunes para
interconexión P2P. Esto incluye componentes básicos para permitir mecanismos claves para
las aplicaciones P2P, incluyendo descubrimiento, transportes de comunicación (incluyendo
firewall (cortafuegos) y NAT traversal), la creación de iguales y grupos de iguales, y
primitivas asociadas con seguridad.

 Capa de Servicios

La capa de servicios incluye los servicios de red que podrían no ser absolutamente
necesarios para que una red P2P opere, pero son comunes o deseables en un ambiente
P2P. Los ejemplos de servicios de red incluyen búsqueda e indexación, directorios, sistemas
de almacenamiento, uso compartido de archivos, sistemas de archivos distribuidos,
agregación y de alquiler de recursos, protocolo de translación, autenticación y servicios de
PKI (Public Key Infrastructure).

 Capa de Aplicaciones

La capa de aplicaciones incluye implementación de aplicaciones integradas, P2P como


mensajería instantánea, distribución de documentos y de recursos, gestión y entrega de
contenidos de entretenimiento, sistemas de correo electrónico P2P, sistemas de subasta
distribuido, y muchos otros.

La frontera entre aplicaciones y servicios no es rígida. Un aplicación de cliente puede


considerarse como un servicio para otro cliente. El sistema entero está diseñado para ser
modular, permitiendo a los desarrolladores seleccionar y escoger una colección de servicios y
aplicaciones que se adapten a sus necesidades.

COMPONENTES DE JXTA

La red JXTA consiste de una serie de nodos interconectados, o iguales (peers). Un igual puede
ser cualquier tipo de de dispositivo desde un sensor hasta un supercomputador o incluso un
proceso virtual. Múltiples iguales (peers) pueden correr sobre un único dispositivo físico, y
potencialmente, varios dispositivos físicos podrían cooperar para actuar como un solo igual
(peer). Los iguales pueden ser conectados por cualquier protocolo de interconexión adecuado
incluyendo TCP/IP, http, Bluetooth, GSM, etc.

Cada igual ofrece un conjunto de servicios y recursos que están a disposición de otros iguales
(peers). Los servicios son programas interactivos y pueden incluir bases de datos, sistemas
de autenticación, servidores de chat o casi cualquier programa que pueda ser conectado. Dos
tipos de servicios son comunes con las redes JXTA, peer services (servicios de iguales) y
group services (servicios de grupo). Servicios de igual son aquellos proporcionados por un
único igual. Los servicios de grupo son los servicios que se prestan en una confederación,
redundante o de manera cooperativa por "todo el grupo". Cada instancia de un servicio de
igual es normalmente independiente de otras instancias. Las medidas adoptadas con una
instancia, no tienen efecto sobre otras instancias. Cada instancia de servicio de grupo de
iguales es normalmente uno de los participantes en una instancia común. Las medidas que se
adopten con una instancia (probable) tienen efectos sobre todas las instancias.

Todos los pares JXTA implementan un pequeño número de los servicios básicos requeridos y
frecuentemente también proporcionan varios servicios estándar adicionales. Cada grupo de
iguales, incluye como parte de su definición el conjunto de servicios de grupo que cada igual
debe ejecutar para participar en el grupo de iguales (group peer).
Los recursos de un igual son normalmente contenido estático (no-interactivo) los cuales el
igual controla, posee o simplemente tiene una copia de. Los recursos pueden incluir Archivos,
documentos, media, avisos, índices, pero también pueden ser recursos del mundo real tales
como switches, sensores e impresoras.

Los iguales JXTA publican sus servicios y recursos usando documentos XML llamados
advertisements(avisos). Los avisos habilitan a los iguales sobre la red para descubrir recursos
y servicios y para determinar conectarse e interactuar con estos servicios.

Los iguales pueden organizarse dentro de grupos de iguales. Un grupo de iguales, vagamente
definido, es cualquier conjunto de iguales que suministran y controlan(leverage) un conjunto
común de servicios para un propósito común. Hay dos aspectos claves a esta definición --
servicios comunes y propósitos comunes--. Dos grupos de iguales podrían tener el mismo
conjunto de servicios, por ejemplo una aplicación de chat, pero diferentes propósitos, por
ejemplo un chat político y otro de deportes. Los grupos de iguales pueden ser definidos
sobre casi cualquier base que los desarrolladores o los distribuidores elijan. En el ejemplo
anterior el grupo de iguales podría ser redefinido para proveer una aplicación de chat para
múltiples tópicos pero localizado dentro de una organización, por ejemplo un departamento de
universidad. Cuando se define un grupo de iguales las primeras dos preguntas que deben
contestarse siempre son; "Qué iguales son miembros de este grupo?", y "En qué aplicación o
servicio están los iguales cooperando para proporcionarla(o)?".

Los iguales JXTA utilizan sockets y pipes para enviar mensajes a otros. Los socketes de JXTA
son conexiones bidireccionales confiables usadas por las aplicaciones para comunicarse
confiablemente. Los pipes son un mecanismo de transferencia de mensajes asíncrono y
unidireccional usado para la comunicación del servicio. Los mensajes son simples documentos
XML cuya cubierta contiene información de (ruta)routing, resumen y credencial. Los pipes
están obligados a especificar puntos finales(endpoints), tales como puerto TCP y una dirección
IP asociada.

Estos conceptos son discutidos en gran detalle en los siguientes capítulos.

ASPECTOS CLAVES DE LA ARQUITECTURA DE JXTA

Cuatro aspectos esenciales de la arquitectura JXTA que la distinguen de otros modelos de red
distribuida son:

• El uso de documentos XML(advertisements) para describir recursos de red.


• La abstracción de pipes a iguales, y iguales a endpoints, sin depender de una autoridad
central de nombramiento/direccionamiento tal como DNS.
• Un esquema de direccionamiento uniforme de igual(IDs).
• Una infraestructura de busqueda descentralizada basada sobre Distributed Hash Table
(DHT) para indexación de recursos.

CAPITULO 3: CONCEPTOS DE JXTA™

En este capitulo define la terminología clave de JXTA y describe los componentes primarios de
JXTA.

Iguales (Peers)

Un igual es cualquier entidad de red que implemente uno o más de los protocolos de JXTA. Los
iguales pueden residir en sensores, teléfonos, y PDAs, tanbién como en PCs, servidores, y
supercomputadores. Cada igual opera independientemente y asincronamente de todos los
otros iguales y es identificado únicamente por un ID de igual.

Los iguales publican una o más direcciones de red para usarlas con los protocolos JXTA. Cada
dirección publicada se anuncia como un punto final (endpoint) del igual, que identifica la
dirección de red. Los puntos finales del igual son usados por los iguales para estabilizar
directamente conexiones punto-a-punto entre dos iguales.

Las conexiones de red punto-a-punto directas no siempre están disponibles entre iguales.
Iguales intermediarios pueden ser utilizados para encaminar(enrutar) mensajes a los iguales
que están separados debido a los límites físicos de la red. Los límites de la red pueden ser
límites naturales por ejemplo entre redes de Ethernet y de Bluetooth o creadas artificialmente
debido a la configuración de red. Las barreras artificiales pueden incluir NAT, cortafuegos y
servidores proxy. El uso de iguales intermedios alistados puede y cambiará en un cierto plazo
sin impacto en la aplicación de JXTA.

Configuran a los iguales típicamente para descubrirse unos a otros espontáneamente en la red
para formar las relaciones conocidas como grupos de iguales, que pueden ser transitorios o
persistentes en naturaleza.
Los iguales JXTA pueden ser categorizados dentro de tres tipos principales:

• Minimal-Edge peers: Iguales que implementan solo los servicios requeridos del
corazón(core) de JXTA y pueden contar con otros iguales para que actúen como su
proxy para otros servicios para participar completamente en una red JXTA. Los iguales
proxy actúan como un proxy para los servicios que no son del corazón(non-core
services). Los iguales Minimal-Edge incluyen típicamente sensores y dispositivos de
automatización de casas.
• Full-Edge peers: Iguales que implementan todos los servicios del corazón y estándar
de JXTA y pueden participar en todos los protocolos JXTA. Estos iguales conforman la
mayoría de iguales en una red JXTA y pueden incluir teléfonos, PC's, servidores, etc.
• Super-Peer: Iguales que implementan y proveen recursos para soportar el despliegue
y operación de una red JXTA. Hay tres funciones principales en un Super-Peer. Un igual
simple puede implementar una o más de estas funciones.
• Relay(receive, reinforce, and retransmit): Usada para almacenar y reenviar
mensajes entre iguales que no tienen conectividad directa debido cortafuegos o
NATs. Solamente los iguales que no están en capacidad de recibir conexiones de
otros iguales requieren un relay.
• Rendezvous: Mantiene los índices globales de publicidad y ayuda a iguales
extremos(edge) y proxys con el anuncio de búsquedas. También se ocupa de la
radiodifución de mensajes.
• Proxy: Utilizado por los Minimal-Edge peers para tener acceso a todas las
funcionalidades de la red JXTA. El igual proxy, traduce y resume las peticiones,
responde a las consultas y proporciona soporte para la funcionalidad de los
Minimal-Edge peers.

Esta categoría describe las configuraciones de iguales más comunes. Dependiendo de la aplicación y la
capacidad del igual puede tener sentido

desplegar los iguales con una combinación de funcionalidad. Por ejemplo, que ésto me sea razonable
para desplegar iguales con la plena funcionalidad de descubriemiento(discovery) y tubería(pipe), pero
requieren de un proxy para el funcionamiento de los servicios de grupo.

GRUPOS DE IGUALES (PEER GROUPS)

Un grupo de iguales, es una colección de iguales que se han puesto de acuerdo en un conjunto común
de servicios o intereses. Los iguales se autorganizan en grupos de iguales, cada uno de los cuales se
idéntica unívocamente por un ID de grupo de iguales. Cada grupo de iguales establece su propia política
de membresía incluyendo abierta (cualquier igual puede afiliarse) hasta la muy segura y protegida (que
requiere credenciales para poder ser miembro).

Los iguales pueden pertenecer a más de un grupo de iguales simultáneamente. Por defecto, el primer
grupo que se instancia es el Network Peer Group. Todos los iguales pertenecientes al Network Peer
Group, pueden optar por unirse a otros grupos de iguales en cualquier momento.

Los protocolos JXTA describen como los iguales pueden publicar, descubrir, unirse, y monitorear grupo
de iguales, ellos no dictan cuando o por qué los grupos de iguales son creados. Unirse a un grupo es
simplemente instanciar todos los servicios de grupo de iguales definidos por el grupo de iguales. Hay
varias motivaciones para la creación de grupos de iguales:

• Para crear un ambiente(entorno) seguro

Los grupos crean un dominio local de control en el cual una política de seguridad especifica puede
ser aplicada. La política de seguridad puede ser tan simple como un intercambio de texto plano
con nombre de usuario y contraseña, o tan sofisticada como criptografía de llave publica. Los
limites de un grupo de iguales permiten a los miembros acceder y publicar contenido protegido.
Los grupos de iguales forman regiones lógicas cuyos limites limitan el acceso a los recursos del
grupo de iguales.

• Para crear un ambiente(entorno) de alcance(scoping)

Grupos que permiten la creación de un dominio local de especialización. Por ejemplo, los iguales
pueden agruparse para implementar una red de documentos compartidos o una red de CPU
compartida. Los grupos de iguales sirven para subdividir la red en un resumen de regiones
proporcionando un mecanismo implícito de alcance. Las fronteras del grupo de iguales define
el alcance de la búsqueda cuando se busca por un contenido del grupo.

• Para crear un ambiente de Vigilancia (Monitoring)

Los grupos de iguales permiten a un igual monitoriar un conjunto de iguales para un fin especial
(por ejemplo, el latido del corazón, trafico introspección (traffic introspection) o la rendición
de cuentas.).

Los grupos también pueden formar una relación jerárquica padre-hijo, en donde cada grupo tiene un
único padre. Las solicitudes de búsqueda se propagan en el seno del grupo. El anuncio para el grupo
está publicado en el grupo de padres, como también en el propio grupo.

SERVICIOS DE RED (NETWORK SERVICES)

Los iguales cooperan y se comunican para publicar, descubrir, e invocar servicios de red. Los iguales
pueden publicar múltiples servicios los cuales, a su vez, son descubiertos a través del Peer Discovery
Protocol.

Los protocolos JXTA reconocen dos niveles de servicios de red:

• Servicios de Igual (Peer Services)

Un servicio de igual es accesible solamente en el igual que esta publicando ese


servicio. Sí ese igual fallara, el servicio también fallaría. Múltiples instancias del servicio
pueden ser ejecutadas en iguales diferentes, pero cada una de las instancias publica su
propio anuncio (advertisement).

• Servicios de Grupo de Iguales (Peer Group Services)


Un servicio de Grupo de iguales esta compuesto de una colección de instancias del
servicio, potencialmente cooperando entre sí, funcionando en múltiples miembros de la
organización del Grupo de Iguales. Sí falla cualquiera de los iguales, el servicio
colectivo de grupo de iguales no es afectado siempre y cuando el servicio este aún
disponible desde al menos un igual miembro. Los servicios de Grupo de iguales son
publicados como parte del anuncio de grupo de iguales (peer group advertisement).

Los servicios pueden ser tanto pre-instalados en un igual o cargados desde la red. Con el fin de ejecutar
un servicio, un igual puede tener que localizar una aplicación adecuada para el ambiente runtime del
igual. El proceso de búsqueda, descarga, e instalación de un servicio desde la red es análogo a realizar
una búsqueda en internet por una pagina Web, recibir la pagina, y luego un plug-in que es requerido
por la pagina.

SERVICIOS DE GRUPOS DE IGUALES (PEER GROUPS SERVICES)

Un grupo de iguales provee un conjunto de servicios colectivamente, conocido como servicios de grupo
de iguales(peer group services). JXTA define un conjunto básico de servicios de grupo de iguales. Estos
servicios de grupo de iguales forman la firma de servicio del grupo de iguales, cada uno de los iguales
que se unen al grupo tienen que implementar estos servicios. Servicios adicionales pueden se
desarrollados para proveer servicios específicos. De modo que para que dos iguales interactúen a través
de un servicio, ellos deben ser ambos miembros de el mismo grupo de iguales.

Los servicios de grupo de iguales básicos que cada uno de los iguales debe
implementar con el fin de participar en la red JXTA son:

• Endpoint Service:

El servicio de punto final(endpoint) es utilizado para enviar y recibir Mensajes entre


iguales. El servicio de punto final comúnmente implementa el Endpoint Routing
Protocol aunque implementaciones mínimas proporcionan sólo una pequeña parte del
total del protocolo.

• Resolver Service:

El servicio de resolución(resolver) es utilizado para enviar solicitudes de consulta


genérica a otros iguales. Los iguales pueden definir e intercambiar consultas para
encontrar cualquier información que pueda ser necesaria (e.g., encontrar anuncios,
determinar el estado de un servicio o la disponibilidad de una tubería de punto final
<pipe endpoint>).

Además de los servicios de grupo de iguales básicos exigidos a cada igual, varios servicios estándar
adicionales son comúnmente definidos para cada grupo de iguales. No todos los servicios estándar
deben ser implementados por cada grupo de iguales. Dependiendo de la definición del grupo de iguales
estos servicios pueden ser requeridos. Un grupo de iguales especifica sólo los servicios que encuentra
útiles. Un grupo de iguales puede también confiar en los servicios del grupo de iguales por defecto de la
red para proporcionar implementaciones genéricas de servicios básicos no-críticos. Los servicios de
grupo de iguales estándar que son encontrados en la mayoría de los grupos de iguales son:

• Discovery Service:
El servicio de descubrimiento es usado por los iguales miembros para buscar recursos
de grupo de iguales. Tales como iguales, grupos de iguales, tuberías y servicios.

• Membership Service:

El servicio de membresía(Membership) es utilizado por los miembros


iguales para establecer con seguridad la identidad y la confianza dentro
de un grupo de iguales. Las identidades permiten a las aplicaciones y los
servicios determinar quién está solicitando una operación y decidir si la
operación debe permitirse. Las aplicaciones pueden realizar su propio
control de acceso o pueden utilizar el servicio de acceso (Access
Service).
La definición del grupo de iguales especifica las políticas mediante las
cuales un igual puede establecer una identidad.

• Access Service:

El servicio de Acceso es usado para validar las peticiones hechas por un


igual a otro. El igual que recibe la petición verifica del igual que realiza
la petición las credenciales, e información sobre la petición hecha para
determinar sí el acceso es permitido. [Nota: No todas las acciones 
dentro del grupo de iguales necesitan comprobarse con el 
servicio de acceso; sólo aquellas acciones que son limitadas 
a algunos iguales necesitan ser comprobadas.]

• Pipe Service:

El servicio de tubería es utilizado para crear y manejar conexiones de


tubería(pipe connections) entre los miembros del grupo de iguales.

• Monitoring Service:

El servicio de monitoreo se utiliza para permitir a un igual monitoriar a


otros miembros del mismo grupo de iguales.

MÓDULOS
Los módulos de JXTA son una abstracción de JXTA de bajo nivel usada para representar cualquier pieza
de "código" y la interface (API) que proporciona ese código. Los módulos son utilizados para
implementar servicios, transporte de mensajes y otros bits cargables de código JXTA.
La mayoría de los desarrolladores JXTA normalmente no tienen que tratar con módulos mientras que la
distribución incluya el conjunto inicial de servicios requeridos por la mayoría de las aplicaciones. La
abstracción de Módulo no especifica la implementación física del "código", esta puede ser proveída como
un Java class, una Java jar, una librería dinámica DLL, un conjunto de mensajes de XML, o un script. La
implementación del comportamiento del módulo se dejada al implementador del módulo. Por ejemplo,
los módulos pueden ser utilizados para representar diferentes implementaciones de un servicio de red
en diferentes plataformas, por ejemplo la plataforma Java, Microsoft Windows, o el entorno operativo
de Solaris.

Los módulos proveen una abstracción genérica para permitir a un igual instanciar una función o
servicio. Cuando un igual se une a un grupo de iguales él puede encontrar nuevos comportamientos
que él podría querer instanciar. Por ejemplo, cuando se une a un grupo de iguales, un igual puede
necesitar proveer una nuevo servicio de búsqueda que es únicamente utilizado en este grupo de
iguales. Con el fin de unirse a este grupo, el igual debe instanciar este nuevo servicio de búsqueda. El
framework de módulo permite la representación y el anuncio de comportamientos independientes de la
plataforma, y permite a los iguales describir e instanciar cualquier tipo de implementación de un
comportamiento. Por ejemplo, un igual tiene la habilidad para instanciar una implementación Java o C
del comportamiento especifico.

La habilidad para describir y publicar un comportamiento independiente de la plataforma es esencial


para soportar el desarrollo de nuevos servicios de grupo de iguales que son proveidos por un
grupo heterogéneo de iguales. Los anuncios(advertisement) de módulo permiten a los iguales JXTA
describir un comportamiento en una forma independiente de la plataforma. De hecho, JXTA utiliza los
anuncios de módulo para auto-describir sus propios servicios.

La abstracción de módulo incluye una clase módulo(module class), una especificación de módulo, y una
implementación de módulo:

• Module Class

La clase de módulo es principlamente utilizada para anunciar la existencia de un comportamiento.


La definición de clase representa un comportamiento esperado y un binding esperado para
soportar el módulo. Cada clase de módulo es identificada por un único ID, el ModuleClassID.

• Module Specification

La especificación de módulo es principalmente utilizada para acceder un módulo. Esta


contiene toda la información necesaria para acceder o invocar el módulo. Por ejemplo,
en el caso de un servicio, la especificación de módulo puede contener un anuncio de
pipe para ser utilizado para comunicarse con el servicio.

Una especificación de módulo es un método para proporcionar la funcionalidad que


implica un módulo de clase. Puede haber diversas especificaciones de módulo para un
determinado clase de módulo. Cada especificación de módulo es identificada por un
único ID, el ModuleSpecID. El ModuleSpecID contiene el ModuleClassID (es decir, el
ModuleClassID está embebido en un ModuleSpecID), indicando la clase de módulo
asociada.

Una especificación de módulo implica compatibilidad de red. Toda implementación de


una determinada especificación de módulo debe utilizar los mismos protocolos y son
compatibles, aunque puedan estar escritas en un lenguaje distinto.

• Module Implementation

La implementación de módulo es la implementación de una determinada especificación


de módulo. Puede haber múltiples implementaciones de módulo para una determinada
especificación de módulo. Cada implementación de módulo contiene el ModuleSpecID
de la especificación asociada que el implementa.

Los módulos son utilizados por los servicios de grupo de iguales, y pueden también ser usados por
servicios stand-alone. Los servicios JXTA pueden usar la abstracción de módulo para identificar la
existencia del servicio (su clase de módulo), la especificación del servicio (su especificación de módulo),
o una implementación del servicio (una implementación de módulo). Cada uno de estos componentes
tiene un anuncio asociado el cual puede ser publicado y descubierto por otro igual JXTA.

Como un ejemplo, considere el servicio de descubrimiento de JXTA (JXTA Discovery Service). Esté tiene
un único ModuleClassID, identificandolo como un servicio de descubrimiento (discovery service) – su
funcionalidad abstracta. Puede haber múltiples especificaciones del servicio de descubrimiento cada una
posiblemente incompatible con las otras. Una puede utilizar diferentes estrategias adaptadas al tamaño
del grupo y su dispersión a través de la red, mientras otra experimenta con nuevas estrategias. Cada
especificación tiene un único ModuleSpecID, el cual hace referencia al ModuleClassID del servicio de
descubrimiento. Para cada especificación, puede haber múltiples implementaciones, cada una de las
cuales contiene el mismo ModuleSpecID.

En resumen, puede haber múltiple especificaciones de una determinada clase de módulo, y cada una
puede ser incompatible. Sin embargo, todas las implementaciones de cualquier especificación se
asumen que son compatibles.

MENSAJES

Lo servicios y aplicaciones JXTA se comunican usando mensajes JXTA. Los mensajes


JXTA son las unidades básicas de intercambio de datos entre iguales. Cada protocolo
JXTA está definido como un conjunto de mensajes que intercambian los iguales
participantes. Los mensajes son enviados entre los iguales utilizando el servicio de
"punto final" (Endpoint Service) y el servicio de tubería (Pipe Service), así como
JxtaSocket y otros vías de acceso. La mayoría de las aplicaciones no necesitan utilizar
directamente tuberías unidireccionales (unidirectional pipe) o el servicio de punto final
de JXTA. En lugar de ello, aplicaciones y servicios utilizan comúnmente los canales de
comunicación Socket JXTA y JxtaBiDiPipe para enviar, y recibir mensajes.

Los protocolos de JXTA están especificados como un conjunto de mensajes


intercambiados entre iguales. El uso de mensajes de XML para definir los protocolos
permite muchos tipos diferentes de iguales utilizar un protocolo determinado. Debido
a que los datos están etiquetados, cada igual es libre para implementar el protocolo de
un modo más adecuado a sus capacidades y rol. Sí un igual solamente necesita algún
subconjunto del mensaje, Las etiquetas XML de datos permite al igual identificar las
partes del mensaje que son de interés. Por ejemplo, un igual que es altamente
limitado, y tiene capacidad insuficiente para procesar algo o la mayoría de un
mensaje, puede usar las etiquetas de datos para extraer las partes que este puede
procesar e ignorar las restantes. Cada plataforma de software binding describe como
un mensaje es convertido a y desde una estructura de datos nativa tal como un objeto
de Java o una estructura de C.

Los protocolos JXTA definen dos "on-wire" representaciones de los mensajes: XML y
binaria. Estas representaciones on-wire son el formato de dato utilizado para la
transmisión del mensaje entre iguales. Formatos diferentes de on-wire son utilizados
para tomar la mejor ventaja de las características de la red de transporte
subyacente(underlying network transport). JXSE utiliza el formato de mensaje binario.

TUBERÍAS (PIPES)

Los iguales JXTA utilizan tuberías (pipes) para enviar mensajes a otro igual. Las tuberías son un
mecanismo de transferencia de mensajes asíncrono, unidireccional y no confiable (con la excepción de
unicast secure pipes) usados para comunicación y transferencia de datos. Las tuberías son canales de
comunicación virtual y pueden conectar iguales que no tienen un vinculo físico directo, lo que resulta en
una conexión lógica. Las tuberías pueden ser usadas para enviar cualquier tipo de datos incluyendo
texto XML y HTML, imagenes, música, código binario, cadenas de datos y objetos Java.

La tuberías punto Final (endpoints) son referenciados como recibir una tubería de entrada (input pipe) y
enviar una tubería de salida (output pipe). Las tuberías punto Final están dinámicamente vinculadas con
los iguales punto Final (endpoint) cuando la tubería se abre. Los iguales punto final corresponden a
interfaces de red de iguales disponibles, por ejemplo un puerto TCP y una dirección IP asociada, que
puede ser utilizada para enviar y recibir mensajes. las tuberías JXTA pueden tener puntos finales que
estén conectados a diferentes iguales en tiempos diferentes, o podrían no estar conectados a todos.
Toda la resolución y comunicación de tuberías se realiza dentro del alcance de un grupo de iguales. es
decir, las tuberías de salida y entrada deberán pertenecer al mismo grupo de iguales.

Las tuberías ofrecen dos modos de comunicación: punto a punto y propagación, como se puede
observar en el siguiente diagrama (Figura 3. Tuberías Unicast y Propagadas). JXSE provee también una
tubería unicast segura, una variante segura de la tubería punto a punto.
• Point-to-Point Pipes: (Tuberías Punto a Punto)

Una tubería punto a punto conecta exactamente dos tuberías punto final en conjunto, una tubería de
entrada en un igual recibe mensajes enviados desde la tubería de salida de otro igual. Esto también es
posible para varios iguales unirse a una simple tubería de entrada.

• Propagate Pipes: (Tuberías Propagadas)


Una tubería propagada conecta una tubería de salida a varias tuberías de entrada. Los mensajes fluyen
desde la tubería de salida, la fuente de propagación, hacia las tuberías de entrada.

• Secure Unicast Pipes: (Tuberías Unicast Seguras)



Una tubería unicast segura es un tipo de tubería punto a punto que provee un canal de comunicación
seguro y fiable.

Las tuberias unidireccionales son una abstracción de muy bajo nivel de programación de
comunicaciones JXTA. Se recomienda que la mayoría de los programadores use el nivel de
comunicación de más alta abstracción proporcionado por los servicios JxtaSocket y JxtaBiDipipe
descritos en la siguiente sección.

JxtaSocket Y JxtaBiDipipe

(Canales de comunicación bidireccional fiable)

Las tuberías básicas de JXTA proveen canales de comunicación uni-direccionales, poco fiables. Con el fin
de hacer más útil las tuberías para servicios y aplicaciones, es necesario implementar canales de
comunicacion bidireccionales y fiables por encima de las tuberias primitivas. JXSE provee
funcionalidades para satisfacer el nivel de calidad de los servicios requeridos por la mayoría de las
aplicaciones:

• Fiabilidad

• Asegura mensaje secuenciación // Ensure message sequencing


• Garantiza la entrega // Ensure delivery
• Expone mensajes y flujo de interfases // Exposes message and stream interfaces
• Seguridad

• JxtaSocket y JxtaServerSocket

• Sub-class java.net.Socket y java.net.ServerSocket respectivamente.


• Se construyen sobre las tuberías, mensajeros de punto final, y la biblioteca de fiabilidad.
• Provee canales de comunicación bidireccionales, fiables y seguros.
• Expone una interfaz basada en un flujo (stream). // Expose a stream based interface
• Provee un buffer interno configurable y mensajes fraccionados. // Provide configurable
internal buffering and message chunking
• No implementa el algoritmo de Nagle, por lo tanto los flujos deben encenderse según sea
necesario.

• JxtaBiDipipe y JxtaServerPipe proveen:



• Se construyen sobre las tuberías, mensajeros de punto final y a biblioteca de fiabilidad.
• Proveen canales de comunicación bidireccionales, fiables y seguros.
• Exponen una intefaz basada en mensaje.
• No proveen mensajes fraccionados. Las aplicaciones deben asegurarse que el tamaño del
mensaje no exeda el limite de tamaño de mensaje estándar de 64K.

JxtaServerSocket y JxtaServerPipe exponen una tubería de entrada para procesar las solicitudes de
conexión y negociar los parámetros de comunicación. JxtaSocket y JxtaBiDiPipe, por otro lado, obligan a
las respectivas tuberías privadas ser independientes de la solicitud de conexión de la tubería.

ADVERTISEMENTS (ANUNCIOS)

Todos los recursos de la red JXTA - como iguales, grupos de iguales, las tuberías y los servicios - son
representados como anuncios. Los anuncios son un lenguaje neutral de estructuras de meta datos
representado como documentos XML. Los protocolos JXTA usan anuncios para describir y publicar la
existencia de recursos de un igual. Los iguales descubren recursos mediante la búsqueda se sus
correspondientes anuncios y pueden guardar en cache cualquier anuncio local descubierto.

Cada anuncio es publicado con un tiempo de vida que especifica la disponibilidad de sus recursos
asociados. El tiempo de vida permite la supresión de los recursos obsoletos sin la necesidad de un
control centralizado. Un anuncio puede ser publicado de nuevo (antes de que el anuncio original
expire) para extender la vida útil de un recurso.

Los protocolos JXTA definen los siguientes tipos de anuncios:

• Anuncios de Iguales (Peer Advertisement):

Describen los recursos del igual. El principal uso de estos anuncios es para mantener información
específica sobre el igual, como su nombre, el ID del igual, puntos finales disponibles, y cualquier
atributo en tiempo de ejecución que servicios de grupo individuales quieran publicar (por ejemplo,
ser un igual rendezvous para el grupo).

• Anuncios de Grupos de Iguales (Peer Group Advertisement):

Describe los recursos de un grupo específico de iguales, como son el nombre, el ID del grupo,
descripción, especificación, y parámetros de servicio.

• Anuncios de Tubería (Pipe Advertisement):

Describe un canal de comunicación de tubería, y es usado por el servicio de tubería para crear las
tuberias de punto final asociadas de entrada y salida. Cada anuncio de tubería contiene un ID
simbólico opcional, un tipo de tubería (punto a punto, propagada, segura, etc.), y un único ID de
tubería.

• Anuncio de Clase de Módulo (Module Class Advertisement):


Describe un módulo de clase. Su objetivo principal es documentar formalmente la existencia de
una clase de módulo. Incluye un nombre, descripción, y un único ID (ModuleClassID).

• Anuncios de Especificación de Módulo (ModuleSpecAdvertisement):

Describe una especificación de módulo. Su principal objetivo es proveer referencias a


la documentación necesaria con el fin de crear implementaciones conforme con la
especificación. Un uso secundario es, de manera opcional, hacer correr instancias
usables remotamente, mediante la publicación de información, como un anuncio de
tubería. Incluye nombre, descripción, ID único (ModuleSpecID), anuncio de tubería, y
el campo de parámetro que contiene parámetros arbitrarios a ser interpretados por
cada aplicación.

• Anuncios de Implementación de Módulo (ModuleImplAdvertisement):

Define una implementación de una especificación de módulo dada. Esté incluye un


nombre, el ModuleSpecID asociado, así como el código, paquete (package), y campos
de parámetros que permiten a un igual recuperar los datos necesarios para ejecutar la
implementación.

• Anuncio Rendezvous (Rendezvous Advertisement):

Describe un igual que actúa como un igual rendezvous para un grupo de iguales dado.

• Anuncio de Información de Igual (Peer Info Advertisement):

Describe los recursos de información de igual. El uso principal de este anuncio es


contener información especifica acerca del estado actual de un igual, tales como el
tiempo de actividad (uptime), cuenta de mensajes de entrada y salida, el tiempo del
ultimo mensaje recibido, y el tiempo del ultimo mensaje enviado.

Cada anuncio es representado mediante un documento XML. Los anuncios están compuestos de una
serie de elementos ordenados jerárquicamente. Cada elemento puede contener sus datos o elementos
adicionales. Un elemento también puede tener atributos que están compuestos de pares de cadenas
nombre-valor. Un atributo es usado para almacenar meta-datos, que ayuda a describir los datos en el
elemento.
Un ejemplo de un anuncio de tubería es incluido en la figura 5.

La especificación completa de los anuncios de JXTA está en la Especificación de Protocolos de JXTA


(JXTA Protocols Specification) (ver http://jxta-spec.dev.java.net). Los servicios o implementaciones
de igual pueden subtype cualquiera de los anuncios mencionados para crear sus propios anuncios de
aplicación.

SEGURIDAD

Dinámicas redes P2P, como la red JXTA, necesitan soportar diferentes niveles o acceso a los recursos.
los iguales JXTA operan en un papel basado en un modelo de confianza. PENDIENTE.

IDs

Los iguales , grupos de iguales, tuberías y otros recursos de JXTA necesitan ser únicamente
identificables. Un ID de JXTA únicamente identifica un recurso y sirve como una forma canónica de
referirse a ese recurso. Actualmente, existen seis tipos de entidades de JXTA que tienen tipos de ID de
JXTA definidos: los iguales, los grupos de iguales, las tuberías, el contenido, las clases de módulo, y las
especificaciones de módulo.

Los URNs son utilizados para expresar IDs de JXTA. URNs son una forma de URI que "... están
destinadas a servir como identificadores de recursos persistente, independiente de la ubicación". Como
otras formas de URI, los IDs de JXTA son representados como texto.
Un ejemplo de ID de igual de JXTA es:

Un ejemplo de ID de tubería de JXTA es:

Todo ID de JXTA tiene un formato de ID. El formato describe como el ID fue generado y como este
puede ser manipulado por los programas. Todo ID indica su formato inmediatamente después de el
prefijo urn:jxta:. Existen dos formatos comunes de ID de JXTA, uuid y jxta, aunque existen otros. El
formato jxta es utilizado por los identificadores comunes especiales tales como los IDs del Grupo de
Iguales Mundial (World Peer Group) y el Grupo de Iguales de Red (Network Peer Group). El formato
uuid es utilizado por la mayoría de los otros IDs. El formato uuid provee generación aleatoria de IDs
únicos y se basa en DCE GUID/UUID. La porción de un ID de JXTA que sigue el formato de ID es
especifica para cada formato de ID y es a menudo opacado - usted no quiere ser capaz de decodificar
directamente la URI.

CAPITULO 4: ARQUITECTURA DE RED

ORGANIZACION DE LA RED

La red JXTA es una red Ad-Hoc, multi-hop(multi-salto, De nodo a nodo, hacia las
estaciones de base), y adaptativa, compuesta de iguales conectados. Las conexiones
en la red pueden ser temporales(transitorias) y, como resultado, el enrutamiento de
mensajes entre iguales es no determinista. Los iguales pueden unirse o dejar la red en
cualquier momento; lo que resulta siempre en un cambio de información de
enrutamiento.

El único aspecto común que varias aplicaciones JXTA comparten es que ellas se
comunican utilizando los protocolos de JXTA. La organización de la red no es asignada
por mandato del framework de JXTA, pero cuatro clases de iguales se utilizan en la
práctica típicamente:

• Minimal edge peer

Un Minimal edge peer (igual de borde mínimo) puede enviar y recibir mensajes, pero
no guardar anuncios en cache o enrutar mensajes para otros iguales. Iguales en
dispositivos con recursos limitados (ejemplo, una PDA o un teléfono celular)
probablemente serían minimal edge peers.

• Full-featured edge peer

Un full-featured peer (igual con toda-características) puede enviar y recibir mensajes y


típicamente guardara en cache los anuncios. Un igual simple contesta a peticiones de
descubrimiento (discovery requests) con información encontrada en su cache de
anuncios, pero no remite(forward) ninguna peticiones de descubrimiento. En cualquier
despliegue de JXTA la mayoría de los iguales probablemente serán iguales de borde
(edge peers).

• Rendezvous peer

Un rendezvous peer (igual rendezvous) es un igual de infraestructura,


este ayuda a otros iguales con propagación de mensajes,
descubrimiento de anuncios y rutas, y lo más importante es que
mantiene un mapa topológico de otros iguales de infraestructura, que se
utilizan para controlar la propagación, y el mantenimiento de la
distributed hash table(DHT). Cada grupo de iguales mantiene su propio
conjunto de iguales rendezvous y puede tener tantos iguales rendezvous
como sea necesario. Edge peers (Los iguales de borde) envían
peticiones de busqueda y descubrimiento a su igual rendezvous que a su
vez puede reenviar las peticiones que no puede responder a otros iguales rendezvous
conocidos utilizando el mapa topológico del distributed hash table (the topology
mapped distributed hash table).

• Relay peer

(Referido como router peer en la documentación antigua de JXTA). Un


relay peer (igual que Recibe y transmite información o un mensaje) es
un igual de infraestructura, este ayuda iguales no direccionables
(firewalled/NATd) con la retransmisión del mensaje. Un igual puede
solicitar una sección (compartimiento, sector, pieza) del mensaje en la
memoria de un relay peer para facilitar la retransmisión del mensaje
cada vez que sea necesario.
FALTA TERMINAR CHAPTER 4 Y HACER EL CHAPTER 5

CAPITULO 6: LO BASICO

You might also like