Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SDI - Parte I
SDI - Parte I
1.1. Definiciones.
Comenzaremos a definir algunos términos indispensables para la correcta ejecución del curso:
work
stations a local network
The Internet
a network host
Computación Monolítica.
Es la forma de computación más básica. Una simple computadora (normalmente un
computador personal) es utilizada para el procesamiento. El equipo no necesita estar
conectado a alguna red. Es utilizada por un usuario al mismo tiempo.
Computación Paralela.
Conocida normalmente como “computación paralela” ó “procesamiento paralelo”, en
la cuál más de un procesador simultáneamente ejecuta un simple programa.
Compartir recursos. Los equipos, al estar conectados a través de una red, pueden
acceder a los recursos de otros equipos.
terminated
start
queued
exit
dispatch running
ready
En esta parte del curso utilizaremos el lenguaje de programación java con todos sus tipos
existentes. Es necesario tener en cuenta simple los tipos de aplicaciones java existentes
en el mercado, las cuáles pasaremos a representar de la siguiente manera:
El tercer tipo de aplicación java es la concerniente a los servlets, los cuáles forman parte
de la plataforma j2ee (java empresarial) y que gracias a su ejecución se conocen como
“aplicaciones de lado servidor”. Una representación gráfica de este tipo de aplicaciones la
observamos en la siguiente figura:
Processes
P1
P2
P3
P4
time
Timesharing of a resource
Figura 1.8 Proceso concurrente.
En este punto, identificamos dos conceptos claros: Solicitante y Receptor. La siguiente figura
representa la comunicación entre estos dos procesos:
Process 1 Process 2
data
sender receiver
En sistemas distrbuidos dos o más procesos pueden comunicarse entre sí tomando algunas
veces el rol del solicitante y otras el rol del receptor. Cuando la comunicación se realiza desde
un simple proceso hacia otro se conoce como Unicast, pero cuando la comunicación se realiza
desde un simple proceso hacia varios procesos, la misma es conocida como Multicast. La
siguiente figura muestra una representación de dichos conceptos:
P2 P2 P3 ... P4
m
m m m
P1 P1
unicast multicast
Figura 2.2 Unicast – Multicast.
Enviar. Esta operación es utilizada por un proceso que desee transmitir datos a
otro proceso.
Recibir. Esta operación es utilizada por un proceso que desee aceptar datos desde
otro proceso.
Web server
S1 S2 S3 S4
ope rations:
HTTP S1: acce pt conne ction
a proce ss S2: re ce ive (re que st)
re que st
S3: se nd (re sponse )
an ope ration S3: disconne ct
HTTP
C1: make conne ction
re sponse
C2: se nd (re que st)
data flow C3: re ce ive (re sponse )
C1 C2 C3 C4
C4: disconne ct
Web browser
Una de las principales dificultades de la comunicación entre procesos es aquella que define el
orden en que deben ejecutarse cada una de las tareas implicadas. Por ejemplo, en una
comunicación HTTP debemos tener en cuenta que la operación relacionada con el envío de
datos hacia el receptor no se dará si es que previamente no se ha concretado la operación de
conexión entre ambos procesos.
La manera más simple de lograr una sincronización de eventos es a través del uso de
“bloqueos”, lo que significa la suspensión de la ejecución de un proceso hasta que otro se
haya completado.
Las operaciones de bloqueo pueden ser asimismo clasificadas como Operaciones Síncronas u
Operaciones Asíncronas. Las operaciones síncronas son aquellas que utilizan el bloqueo para
asegurar el orden de cada operación, mientras que las asíncronas son aquellas en las que el
proceso es libre de continuar su ejecución.
process 1 process 2
running on host 1 running on host 2
execution flow
acknowledgement of data received suspended period
blocking send returns provided by the IPC facility blocking receive ends
Process 2
Process 1
nonblocking send
operation
execution flow
suspended period
blocking receive returns
Process 2
Process 1
Escenario 1. Los datos solicitados han sido recibidos a tiempo por el proceso 2, lo que
origina el envío de una confirmación al proceso 1 facilitando su desbloqueo. (Figura
2.6)
Escenario 2. Los datos solicitados aún no han sido recibidos por el proceso 2, por lo
tanto es su responsabilidad establecer un ciclo repetitivo con la finalidad de asegurar
que los datos sean recibidos correctamente. El proceso 1 estará bloqueado
indefinidamente hasta que el proceso 2 confirme la recepción correcta de los datos.
indefinite
blocking execution flow
suspended period
Process 2
Process 1 Synchronous Send and
Asynchronous Receive
Scenario B
Escenario 3. Los datos solicitados aún no han sido recibidos. El proceso 2 puede ser
notificado (listeners) una vez que los datos han llegado con la finalidad de notificar al
proceso 1 la recepción correcta de los datos. En la siguiente figura se observará el
escenario 3.
Process 2
Process 1
En la figura anterior podemos observar que sin la presencia de bloqueos en ningún proceso, la
única manera de asegurar la recepción de datos es tener en cuenta que el proceso 2 estará en
espera siempre de la recepción de datos.
2.3. Deadlocks.
Process 1 Process 2
¿Es la suspensión indefinida? La suspensión de cada proceso se mantendrá hasta que suceda
un “timeout” o hasta que el sistema operativo aborte los procesos.
En la capa física perteneciente a una red de computadores, los datos son transmitidos bajo la
representación de “binary stream” (0001001…10101); pero en la capa de aplicación la
transmisión de datos es mucho más compleja debido a que se hace necesario representar
tipos de datos ó estructuras de datos que típicamente son soportadas por los lenguajes de
programación (int, float, arrays, etc).
El proceso 1 envía el entero en 32 bits, una vez recibido por el proceso 2 es convertido
a una representación en 16 bits.
Podemos definir el concepto de paradigma con los términos “patrón”, “modelo”, etc. A
continuación comenzaremos a definir los más conocidos:
Las operaciones básicas para este tipo de paradigma son “enviar” y “recibir”; si la
comunicación es orientada a conexión, podríamos agregar también las operaciones de
“conexión” y “desconexión”. Las aplicaciones basadas en el uso de sockets (UDP, TCP) son un
claro ejemplo de este paradigma.
Process A
Process B
a message
Message passing
Figura 3.1 Paso de mensajes.
El paradigma más conocido y más utilizado es el cliente / servidor, el cuál asigna roles a cada
uno de los procesos. Por un lado tenemos el servidor, quién espera pasivamente por la llegada
de requerimientos, y por otro lado tenemos el cliente quién especifica los requerimientos y
espera por la respuesta del servidor.
Client host
...
En el paradigma cliente / servidor, los procesos participantes juegan diferentes roles: El cliente
envía requerimientos mientras el servidor espera pasivamente por ellos, y proporciona una
respuesta una vez recibidos.
process 1
request request
response
response
process 2
El Sistema de Mensajes es una variación del paradigma basado en el paso de mensajes. En este
paradigma, un sistema de mensajería funciona como intermediario entre un remitente y un
destinatario en el intercambio de mensajes.
El remitente deposita el mensaje en el sistema, el cual esta asociado a un destinatario. Una vez
depositado dicho mensaje, el remitente está en la libertad de ejecutar otras tareas.
receivers
message system sender
...
...
Process B
Process A
proc1(arg1, arg2)
proc2(arg1)
proc3(arg1,arg2,arg3)
Process 2
Process 1
remote method invocation method1
method2
a remote object
Host 1
Host 3
agent
Host 4
Directory service
service object
Service requestor
Figura. 3.8 Network Services.
La siguiente figura representa la arquitectura a tener en cuenta que facilita el trabajo con
objetos distribuidos.
object
registry
client server
proxy proxy
runtime runtime
support support
network network
support support
Para acceder a un objeto distribuido, el proceso (objeto cliente), debe buscar primero
en el registro por una referencia al objeto. Esta referencia es utilizada por el objeto
cliente para realizar llamadas a métodos (métodos remotos).
La invocación remota de métodos (RMI) es una implementación basada en objetos del modelo
“Llamada a Procedimientos Remotos”. Es importante mencionar que su implementación es
sólo bajo el lenguaje de programación Java.
Directory service
object object
client server
supports the interface with
the application program
Remote Interface.
El punto de inicio para la creación de objetos distribuidos es la definición de la
interface Remota. Una interface, es una clase que sirve de plantilla para otras clases,
contiene: Métodos vacíos que deben ser implementados por aquellas clases que
implementen la interface.
Una interface remota es una interface que hereda de la clase Remote. Todo método
definido en esta interface representará el médoto remoto que podrá ser accedido
usando RMI.
import java.rmi.*;
public interface CalculoServer extends Remote {
public Integer Multiplicar(Integer num1, Integer num2) throws RemoteException;
}
Figura. 4.3. Interface remota.
import java.rmi.*;
import java.rmi.server.*;
import java.util.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.rmi.*;
En el Servidor.
o Colocar en una carpeta la interface remota y la clase que implementa dicha
interface.
o Compilar ambos archivos.
o Utilizar el comando “rmic” para generar el stub correspondiente.
rmic CalculoServerImpl
El archivo generado normalmente será “CalculoServerImpl_Stub.class”. Estos
pasos deben ser repetidos ante cualquier cambio en la implementación de los
métodos remotos.
o Iniciar el registro RMI.
Rmiregistry <port number>
Si no especificamos el puerto, por defecto será el puerto 1099.
o Iniciar el servidor de objetos.
java CalculoServerImpl
En el cliente.
o Colocar en una carpeta el archivo “CalculoClient.java” y compilarlo.
o Obtener una copia de la interface remota (“CalculoServer.class”).
o Obtener una copia del stub generado (CalculoServerImpl_Stub.class”).
o Ejecutar el cliente.
SomeInterface.class SomeServer.class
SomeImpl.class
SomeClient.class
SomeImpl_Skel.class
SomeImpl_Stub.class
Descarga de Stub.
Gestión de la seguridad.
Estas características no son inherentes de la arquitectura RMI, sino más bien las
consideraremos como mecanismos extras que pueden complementar el desarrollo de este tipo
de aplicaciones.
Java RMI provee un mecanismo que permite que un “stub” esté disponible dinámicamente
para el cliente. Usando un “stub dinámico”, una copia del mismo no es necesaria en el cliente,
debido a que la misma puede ser transmitida directamente desde un servidor web.
1
Client.class 2 RMI registry
HTTP host
3
SomeInterface_stub.class
SomeInterface_stub.class
4
X
SomeInterface_skel.class
SomeServer.class
1. Client looks up the interface object in the RMIregistry on the server host.
2. The RMIRegistry returns a remote reference to the interface object.
3. If the interface object's stub is not on the client host and if it is so arranged by the
server, the stub is downloaded from an HTTP server.
4. Via the server stub, the client process interacts with the skeleton of the interface object
to access the methods in the server object.
Para ello RMI provee una clase java llamada RMISecurityManager. Un programa RMI puede
instanciar esta clase, lo cual trae como beneficio que todas las acciones a ejecutar se ajusten a
patrones de seguridad. Por ejemplo, el acceso a archivos locales, establecimiento de
conexiones de red, etc.
5.1. Introducción
XML es una tecnología que permite describir los datos virtualmente, quién a diferencia de
HTML que limita al autor a un conjunto fijo de “tags”, XML permite crear documentos donde
nuevos “tags” puedan ser definidos.
Una DTD es un documento que permite definir la estructura del documento XML a crear (qué
elementos, atributos, etc serán permitidos en el documento).
<Weather-report>
<date>
<day></day>
<month></month>
<year></year>
</date>
<time></time>
<area>
<city></city>
<region></region>
<country></country>
</area>
<measurements>
<sky></sky>
<temperature></temperature>
<wind></wind>
<humidity></humidity>
</measurements>
</Weather-report>
Asimismo, es importante tener en cuenta que la declaración de una DTD puede ser interna ó
externa, a continuación observaremos las imágenes correspondientes:
Ahora que conocemos el concepto de una DTD es necesario definir dos términos importantes:
Documentos Bien Formados. Son aquellos documentos XML que respetan un conjunto
de reglas propias de los documentos de marcado, como: Debe existir un único
elemento raíz, balance de etiquetas, elementos anidados correctamente, etc.
Documentos Válidos. Son aquellos documentos XML que poseen una estructura y se
encuentran definidos en base a ella.
Elementos. Los elementos en una DTD son declarados a través del siguiente formato:
Donde el nombre del elemento debe ser único en todo el documento y asimismo debe
iniciar con una letra o carácter underscore.
o Elemento Hoja. Los elementos hojas son aquellos elementos que contienen
sólo texto y que no poseen ningún elemento hijo. El formato de un elemento
hoja se presenta de la siguiente manera:
<autor>Pedro</autor>
<autor>
<nombre>Pedro</nombre>
<apellidos>Perez</apellidos>
</autor>
o Elementos con contenido mixto. Son aquellos elementos que pueden contener
texto ó elementos hijos al mismo tiempo.
<autor>
Estos son los datos de un autor
<nombre>Pedro</nombre>
<apellidos>Perez</apellidos>
</autor>
Atributos. Los atributos son aquellos objetos que proveen información sobre los
elementos. El formato para la definición de un atributo se presenta de la siguiente
manera:
<!ATTLIST libro
nivel (inicial | medio | avanzado) “inicial”>
<?xml version="1.0"?>
<!ELEMENT direccion (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT nacionalidad (#PCDATA)>
<!ELEMENT organizacion (#PCDATA)>
<!ELEMENT persona (nombre, apellidos, organizacion*, direccion+, email*,
nacionalidad+)>
<!ELEMENT apellidos (#PCDATA)>
Figura 5.7. DTD
En la figura anterior podemos observar que los elementos “nombre” y “apellidos” son
elementos obligatorios que deben estar en el documento XML, mientras que “organizacion”, y
“email” son elementos que pueden estar presentes 0 ó más veces, y el elemento “direccion” y
“nacionalidad” son elementos que pueden estar presentes 1 ó más veces.
<?xml version="1.0"?>
<persona>
<nombre></nombre>
<apellidos></apellidos>
<organizacion></organizacion>
<organizacion></organizacion>
<direccion></direccion>
</direccion></direccion>
</direccion></direccion>
<nacionalidad></nacionalidad>
</persona>
<inventory>
<book isbn = "0-13-012507-5" inStock = "yes">
<name>Java How to Program 3</name>
<price>68.00</price>
<quantity>200</quantity>
</book>
Asimismo, se solicita definir mediante una DTD y aplicar la estructura a un documento XML
para una presentación de diapositivas en base a los siguientes términos: