Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Capítulo I
Introducción
I.1.- 1
Antecedentes.....................................................................................
I.2.- Problema 3
planteado...........................................................................
I.3.- Objetivos generales........................................................................... 3
I.3.1.- Objetivos específicos.................................................................. 3
I.4.- 4
Metodología......................................................................................
I.4.1.- Fase I: Revisión bibliográfica de los 4
servlets...............................
I.4.2.- Fase II: Búsqueda de las plataformas de trabajo.......................... 4
I.4.3.- Fase III: Instalación y pruebas de la 4
plataforma...........................
I.4.4.- Fase IV: Prueba de ejemplos de 5
servlets......................................
5
I.4.5.- Fase V: Prueba de comunicación con servlets..............................
5
I.4.6.- Fase VI: Prueba de comunicación utilizando hilos
(threads)......
I.4.7.- Fase VII: Revisión bibliográfica de Java 6
3D................................
I.4.8.- Fase VIII: Selección del sistema operativo de 6
trabajo.................
I.4.9.- Fase IX: Prueba de ejemplos en Java 6
3D.....................................
I.4.10.- Fase X: Creación del escenario................................................. 7
I.4.11.- Fase XI: Problema del envió de objetos 3D por 7
red...................
I.4.12.- Fase XII: Distribución de los procesos...................................... 7
I.5.- Alcance............................................................................................. 8
I.6.- Resultados esperados........................................................................ 9
9
I.7.- Contenido del informe.......................................................................
Capítulo II
Marco teórico
II.1.- Introducción a los 11
servlets................................................................
II.2.- Ventaja del servlet sobre el tradicional 13
CGI.....................................
II.3.- ¿Qué es el JSWDK?........................................................................ 15
II.4.- Reconocimiento de la arquitectura del paquete servlet..................... 16
II.5.- El ciclo de vida de un servlet........................................................... 18
20
II.6.- Hilos de Control..............................................................................
21
II.7.- Introducción a Java3D.....................................................................
22
II.7.1.- ¿Qué es el API 3D de Java?.....................................................
23
II.8.- El API Java 3D................................................................................
24
II.8.1.- El escenario gráfico Java 3D.....................................................
27
II.8.2.- La clase SimpleUniverse...........................................................
II.8.2.1.- Ejemplo de uso de la clase 29
“SimpleUniverse”.................
31
II.9.- Iluminación en Java 3D....................................................................
33
II.9.1.- Modelo de Color.......................................................................
34
II.10.- Sistemas distribuidos.....................................................................
34
II.10.1.- Definición de un sistema de cómputo
distribuido...................
38
II.10.2.- Modelos de computación distribuida.....................................
38
II.10.2.1.- Modelo de minicomputadora.....................................
39
II.10.2.2.- Modelo de workstation……………………………...
II.10.2.3.- Modelo workstation- 40
server………………………….
41
II.10.2.4.- Modelo de pool de procesadores...............................
43
II.10.2.5.- Modelo híbrido.........................................................
44
II.11.- TDSO (Técnica de Desarrollo de Sistemas de
Objetos).................
Capítulo III
Diseño y especificaciones
III.1.- Entidades de la escena.................................................................... 46
III.1.1.- Entorno de paredes, techo y piso............................................ 47
III.1.1.1.- Las paredes................................................................. 48
III.1.1.2.- El techo y piso............................................................. 49
III.1.1.3.- Arbol de escena para el entorno................................... 50
III.1.2.- La 51
silla....................................................................................
III.1.2.1.- La base........................................................................ 51
III.1.2.2.- La columna base.......................................................... 52
III.1.2.3.- El 52
asiento.....................................................................
III.1.2.4.- Columnas del 52
respaldo.................................................
III.1.2.5.- El respaldo.................................................................. 53
III.1.2.6.- Arbol de escena para la silla........................................ 53
III.1.3.- La computadora..................................................................... 54
III.1.4.- El ventilador........................................................................... 57
III.1.5.- Las lámparas.......................................................................... 58
III.1.6.- La 58
columna.............................................................................
III.1.7.- El escritorio............................................................................ 59
III.2.- Interacciones en el 60
ambiente...........................................................
III.3.- Modelado del sistema distribuido................................................... 61
III.3.1.- Especificación formal en TDSO de los componentes
utilizados en la implantación del ambiente virtual 61
distribuido....................
61
III.3.1.1.- Especificación formal de un servlet..............................
Capítulo IV
Implementación y pruebas
IV.1.- Creación del objeto silla (ChairServlet).......................................... 77
IV.1.1 Problema de envío de objetos tridimensionales por 85
red.............
IV.2.- Creación del objeto paredes 89
(WallServlet)......................................
IV.3.- Implantación del programa 90
principal...............................................
IV.4.- Interacciones con el 94
ambiente.........................................................
IV.5.- Análisis de los tiempos de respuesta de los 96
servlets........................
Capítulo V
Conclusiones y recomendaciones
V.1.- 101
Recomendaciones............................................................................
Bibliografía
Anexos
Anexo #1.- Threads de Control
Anexo #2.- Cubo de colores
Anexo #3.- Clase SceneConnection
Anexo #4.- Clase SceneConstructor
Anexo #5.- Clase FirstServer
Anexo #6.- Clase VentilatorBehavior
Anexo #7.- Resultado de la primera prueba
RESUMEN
I.1 Antecedentes.
I.4 Metodología.
I.4.1 Fase I: Revisión bibliográfica de los
“servlets”.
Los “Servlets” son módulos que extienden los servidores orientados a petición - respuesta, como los
servidores web compatibles con Java. Por ejemplo, un “servlet” podría ser responsable de tomar los
datos de un formulario de entrada de pedidos en formato HTML y aplicarle la lógica de negocios
utilizada para actualizar la base de datos de pedidos de la compañía como se muestra en la figura 2-1.
figura 2-1. Envío de datos desde un sitio web hacia un “servlet” que modifica una tabla en una base de
datos de inventario.
Los “servlet”s son para los servidores lo que los applets son para los navegadores. Sin embargo, al
contrario que los applets, los “servlets” no tienen interface gráfica de usuario.
Los Java servlets son han demostrado ser eficientes, fáciles de usar,
portables y económicos comparado con el tradicional CGI y que muchas
alternativas parecidas al CGI. A continuación se explican esas ventajas:
Poderoso. Con los servlets se pueden hacer cosas que son difíciles o hasta
imposibles con los CGIs regulares. El “servlet” puede conversar con el
servidor web (los programas CGI regulares no pueden hacerlo). Esto
simplifica operaciones que se necesitan para cargar imágenes y otros datos
guardados en lugares estándares. Los servlets también pueden
intercambiar información entre ellos, y realizar cosas muy útiles como
hacer más fácil implantaciones de interconexiones a bases de datos.
Portable. Los servlets son escritos en Java y por lo tanto siguen las reglas
de estandarización API. Consecuentemente los servlets escritos en un
servidor web como “I-Planet Enterprise Server” pueden correr
virtualmente sin cambios en “Apache”, “Microsoft IIS” o “WebStar”. Los
servlets son soportados directamente en las distintas plataformas
utilizando conexión de tipo “plug-in”.
Los servlets han sido limitados solo a nivel de web y han sido utilizados
para capturar datos desde una página web y por medio de estos interactuar
con una Base de datos, viéndolo desde este punto de vista no hay diferencia
con un programa CGI. Muchos, hoy día, siguen pensando que los servlets solo
sirven como “una mejor opción para realizar estas aplicaciones en Java”.
Pero los servlets son más que eso, con ellos se puede crear aplicaciones
distribuidas muy complejas como también muy sencillas. No solo son una
mejora ante los programas CGI son también una mejora ante los tradicionales
programas distribuidos que basan su comunicación en sockets.
La interfaz servlet.
Interfaz ServletRequest.
Interfaz ServletResponse.
La interfaz ServletResponse le da al “servlet” los métodos para
responder al cliente.
Cada “servlet” tiene un ciclo de vida el cual se muestra en la figura 2-3 y se describe a continuación:
-1
Código del Cargar
servlet
Servidor
Soportando
Código del
servlet las
peticiones Cliente -2
de los
clientes
Cliente
Un hilo es un flujo secuencial de control dentro de un programa. Todos los programadores están
familiarizados con la escritura de programas secuenciales.
En el anexo #1 se profundiza sobre la estructura de los hilos y se muestran algunos ejemplos realizados
en Java.
El API Java 3D es una interfaz para escribir programas que muestran e interactuan con gráficos
tridimensionales. Java 3D es una extensión estándar del JDK 2 de Java. El API Java 3D proporciona una
colección de constructores de alto nivel para crear y manipular geometrías 3D y estructuras para dibujar
esta geometría. Java 3D proporciona las funciones para creación de imágenes, visualizaciones,
animaciones y programas de aplicaciones gráficas 3D interactivas.
El paquete com.sun.j3d.utils.universe
contiene SimpleUniverse, ViewingPlatform, y
clases Viewer de conveniencia.
figura 2-6. Estructura de un escenario gráfico
utilizando la clase SimpleUniverse.
En el mundo real, los colores que percibimos son una combinación de las características físicas del
objeto, de las características de las fuentes de luz, de las posiciones relativas de los objetos a las fuentes
de luz, y del ángulo desde el cual se ve el objeto. Java 3D utiliza un modelo de iluminación para
aproximar la física del mundo real. El resto de esta sección explica el modelo de iluminación de Java 3D
en términos generales.
La ecuación del modelo de iluminación depende de tres vectores: la superficie normal (N), la dirección
de la luz (L), y la dirección al ojo del espectador (E) además de las características materiales del objeto
y de las características de la luz. La figura 2-10 muestra los tres vectores para dos vértices de una
superficie esférica. Los vectores para cada vértice pueden tener distintas direcciones dependiendo de las
especificaciones de la escena.
figura 2-10. Relación entre los vectores de luz
(L), del observador (E) y de la normal a la
superficie (N).
El modelo de iluminación incorpora tres tipos de reflexiones de luz del mundo real como son: reflexión
del ambiente, reflexión difusa, y brillo. La reflexión del ambiente resulta de la luz ambiente, luz
constante de bajo nivel, en una escena. La reflexión difusa es la reflexión normal de una fuente de luz
desde un objeto visual. Las reflexiones brillantes, son aquellas reflexiones sobre-iluminadas de una
fuente de luz sobre un objeto, que ocurren en ciertas situaciones.
La figura 2-11 muestra una esfera y un plano visualizados por Java 3D.
Los tres tipos de reflexión se pueden ver en la esfera. La parte más oscura de
la esfera exhibe sólo la reflexión ambiente. El centro de la esfera está
iluminado por la luz difusa y ambiente. Con una esfera azul y una luz blanca,
la reflexión difusa es azul. La parte más brillante de la esfera es el resultado de
la reflexión brillante con reflexiones ambiente y difusa.
Existen ciertos factores que han propiciado el auge tan elevado de los
sistemas distribuidos dentro del procesamiento de las organizaciones
modernas en el mundo, en particular Tanenbaum se refiere a algunos de
ellos como:
Modelo de minicomputadora.
Modelo de workstation.
Modelo workstation-server.
Modelo de pool de procesadores e híbrido.
enviar trabajos para ejecución. Cada estación tiene su propio disco duro, y su
propio sistema de archivos. La implementación mostrada tiene la desventaja
de que se puede desperdiciar tiempo de procesamiento si una o más
computadoras no están haciendo uso de su CPU. Si el sistema determina que
la estación del usuario no posee la suficiente capacidad de proceso para una
tarea, transfiere el trabajo de forma automática hacia el equipo que tiene
menos actividad en ese momento y por último se regresa la salida del trabajo a
la estación del usuario.
Esta variante tiene la ventaja de garantizar el nivel de respuesta a trabajos interactivos dado que permite
la ejecución en la misma computadora de la persona que lo solicita. Por otra parte, su principal
desventaja estriba en que el costo de implantación se eleva puesto que requiere mayor número de
componentes para su construcción.
TDSO es la técnica utilizada en éste proyecto para la especificación formal de los objetos creados
para el sistema. Este método fue desarrollado por la profesora Isabel Besembel [Besembel 99] y
presenta una serie de normas algorítmicas basadas en la integración de dos métodos de desarrollo de
sistemas programados. Uno es el método deductivo MEDEE propuesto por el investigador francés Jean
F. Dufourd como un método que engloba todas las tareas básicas de diseño de software, y la
metodología OMT de Rumbaugh et al, especialmente diseñada para modelar sistemas orientados por
objetos.
En rasgos generales, la técnica consiste en una serie de tablas que contienen el análisis, diseño y
documentación del objeto como tal. Uno de ellos es conocido como el universo de la clase el cual
engloba la declaración de los atributos y la especificación sintáctica de todos lo métodos presentes en el
objeto y así mismo se coloca al lado la información de éstos de acuerdo a su tipo ( transformación,
consulta, convertidor, etc) y su utilidad.
Lo que más caracteriza a la técnica es la implementación de los métodos presentes en el objeto.
Dicha implementación se colocará en una tabla la cual tendrá un encabezado con el nombre del método,
así como las precondiciones y poscondiciones que sean necesarias para que el método se use de manera
correcta. Luego se colocará el cuerpo del método en un lado y en el otro la documentación de las
variables utilizadas en el desarrollo. Al final se colocan una serie de casos de pruebas del método como
modo de información.
Dado que estos objetos serán construidos en Java 3D, uno de los
requerimientos, es el modelado del árbol de la escena para cada uno de ellos.
Este árbol es diseñado de forma tal que sea sencillo poderlo visualizar al ser
enviado por la red. Como cada objeto es una escena distinta, y cada escena es
dinámicamente agregada al universo virtual, entonces cada objeto tiene un
árbol de escena. Sin embargo, el diseño de estos árboles no es necesariamente
el mejor. Si se dispusiera a crear la oficina sin utilizar un enfoque distribuido,
el diseño podría ser completamente distinto. A continuación se describirá la
especificación de cada uno de ellos.
1.6 ud
8 ud
0.1 ud
BG
TG TG TG TG TG
Piso Techo
Pared Pared
Derecha Izquierda Pared
Trasera
III.1.2. La silla.
Para su diseño es mejor guiarse desde abajo hacia arriba. La silla esta
compuesta de una base con dos patas, la columna de la base, el asiento, dos
pequeñas columnas que sostendrán el respaldo y por último el respaldo. A
continuación se muestran las especificaciones de cada uno de estos objetos:
III.1.2.1 La base.
Esta compuesta por dos objetos tipo caja. Estos objetos son de la misma
dimensión de 0.03 ud de ancho, 0.03 ud de alto y 0.5 ud de profundidad. Se
encuentran en la misma ubicación (-1,-0.7,1) rotados 90 grados entre si en el
eje Y, tal como muestra la figura 3-3. El color elegido para las patas es el
negro.
90º
III.1.2.3 El asiento.
El asiento es un objeto tipo caja con dimensiones 0.4 ud de ancho, 0.08 ud de alto y 0.36 de
profundidad. La ubicación de éste es en la posición (-1, -0.5,1) del universo virtual. El color del asiento
es el rojo.
III.1.2.4 Columnas del respaldo.
Las columnas del respaldo son dos cilindros con las mismas
dimensiones de 0.015 ud de radio y 0.35 ud de alto. Cada cilindro esta rotado
en el eje Z -15 grados. El color de las columnas es el negro y están
ubicadas en los puntos (-0.83,-0.3,0.9) y ( -0.83,-0.3,1.1) respectivamente.
III.1.2.5 El respaldo.
A continuación se muestra como sería el modelado del árbol de escena para la silla. Como se
expresó, el diseño de los árboles varía. Pero para que el diseño sea transparente los nodos de tipo TG
(TransformGroup) los acoplamos a la misma altura. En la figura 3-6 se observa el árbol para la silla.
BG
TG TG TG TG TG TG TG
Respaldo
Pata1
Pata2 asiento Columnar
esp2
Columna
base Columna
resp1
III.1.3 La computadora.
III.1.4 El ventilador.
El ventilador está compuesto de dos paletas de tipo caja, las cuales están ubicadas en el mismo
punto y rotadas en el eje Y 90 grados entre si. Así mismo, contiene un soporte de tipo cilindro que se puede
reconocer como el sostenedor de las paletas. También tiene la columna soporte de donde estará colgado el
ventilador y el soporte del techo que es un objeto de tipo cono.
Se hace referencia a las lámparas de la oficina, a aquellas que están presentes en el techo, estas
están formadas básicamente por objetos de tipo caja con dimensiones: 1 ud de ancho, 0.05 ud de alto, y 1.2
ud de profundidad. Se crearon 4 lámparas del mismo tipo distribuyéndolas equidistantes a las 4 esquinas
del techo de la oficina.
III.1.6 La columna.
La columna es en sí, un cilindro que une el techo y el piso. El cilindro tiene dimensiones 0.2 ud de
radio y 1.6 ud de alto. De éste modo la columna cubre toda la altura de la oficina. Y se encuentra ubicada
en el punto (1,0,-2.5) de la escena.
III.1.7 El escritorio.
El escritorio está compuesto completamente de puros objetos tipo caja, los cuales nos presentan un
diseño de una mesa de trabajo bastante amplia en dos secciones.
Pdad = 4 Z =0
El escenario virtual creado solo admite tres tipos de interacciones con el usuario:
1. La primera es encender y apagar las luces que intervienen en la escena. Esta acción se ejecuta al pulsar
clic con el ratón. En la escena existen 4 puntos de luz principales, dado que existen 4 lámparas, de los
cuales solo se apagan 3. El cuarto punto de luz se deja encendido para poder visualizar la escena con
mínima iluminación.
2. Las segunda interacción es encender y apagar el ventilador, la misma se ejecuta al pulsar cualquier
“tecla imprimible” ( entiéndase por tecla imprimible, a cualquiera que haga referencia a números o
letras ).
3. La tercera y última interacción es la de recorrido en el ambiente por medio de las teclas la navegación
( las cuatro flechas del teclado).
Para la creación del ambiente virtual por medio de la distribución de procesos basado en servlets,
se debe introducir primero una visión general de la estructura de un servlet y luego se mostrará como se
distribuyeron cada uno de éstos para poder construir la escena.
III.3.1 Especificación formal en TDSO de los componentes utilizados en la implantación del ambiente
virtual distribuido.
Un servlet, no es más que una clase que hereda de otra, y que de acuerdo a la forma de diseño que
se disponga puede servir para responder ante un formulario desde una página web o para procesar objetos
complejos que nos permitan acoplar información.
El camino más sencillo para distribuir objetos utilizando “servlets”, es pensar en éstos como si
fueran servidores de petición - respuesta construidos bajo el enfoque de “sockets”. Así, si éste quiere leer
un dato cualquiera desde la red esperará hasta recibirlo y si en vez de recibir desea enviar, debe existir
algún programa o medio receptor.
La estructura general de un servlet se especifica en la tabla 3-4:
A parte de todas los métodos públicos o privados que deseemos realizar para nuestra clase como
parte del diseño, lo más importante es escoger cual o cuales métodos de servicios del servlet necesitamos
sobrescribir. Los métodos pueden ser elegidos según la elección del programador.
En nuestro caso, seleccionamos el método service por ser la función base del servicio. El diseño
interno de comunicación con el cliente para el sistema distribuido, es más parecido a la programación en
sockets que otra cosa.
Efo.cerrar();
SalidaFlujoObjetos sfo =
nuevaDir( response.obtenerSalidaFlujoObjet
os() );
sfo.escribirObjeto( ob );
sfo.cerrar();
tabla 3-5. Especificación en TDSO de la re-escritura del método “service”.
Ahora que se tiene el esquema general de la redefinición del método service, podemos tener una
idea de cómo una aplicación podría comunicarse con el servlet. Generalmente esta clase de aplicaciones
utiliza direcciones y objetos URL para poder iniciar la comunicación e intercambio de información. En la
tabla 3-6 mostramos una aplicación de ejemplo que se comunica con un servlet cuyo método service esté
redefinido y el servlet efectúe cambios en el objeto para que luego éste sea devuelto al programa de
aplicación.
ob = (ObjetoPer)efo.obtenerObjeto();
efo.cerrar();
ob.mostrarDatos();
url.cerrarConexion();
tabla 3-6. Especificación en TDSO de una aplicación que permite la comunicación con un servlet.
A simple vista, pareciera no tener sentido enviar un objeto y recibirlo modificado, pero es tan solo
una visión general de cómo un servlet puede comportarse como si fuera un servidor basado en el enfoque de
“sockets”, claro que con mayores ventajas que ellos.
Habiendo observado la forma general de comunicación con los servlets a través de un programa de
aplicación, podemos construir un sistema donde cada servlet se encargue literalmente de crear un objeto
3D, como una silla o un escritorio, el cual será enviado por la red a una aplicación que lo reciba y lo ingrese
dinámicamente al universo virtual.
Dado que existen siete distintas entidades tridimensionales que componen la oficina, cada una de
ellas será creada por diferentes servlets. La disposición de los servlets será en cuatro servidores, tal como se
muestra en la figura 3-7.
Silla
Columna Computadora
Escritorio Ventilador
Paredes lamparas
La forma de distribuir los servlets en los servidores no es única. Otra forma de diseño podría ser,
disponer de siete servidores en vez de cuatro, en vista de que son siete objetos distintos. Lo que se desea, es
evaluar la calidad de desempeño de un servlet en particular frente a un proceso lo suficientemente
“pesado”. Un objeto tridimensional puede llevar un considerable tiempo de cálculo en cuanto a ubicación,
forma, tamaño y distribución del color. Cada entidad que compone la oficina está formado por más de un
objeto tridimensional básico (entiéndase por objeto 3D básico, aquellos que son cubos, conos, cilindros o
esferas), por lo que se considera que para crear una entidad en especial, así como el transporte de toda esa
información por la red permite evaluar la robustez de un servlet.
La forma de diseño de cada uno de los servlets es similar. Lo único que cambia es el contenido de
la escena que será transportada por la red. De éste modo, sólo es necesario conocer como diseñar uno de
ellos y todos los demás pueden ser creados de la misma manera. A continuación se muestra en las tablas 3-
7, 3-8 y 3-9 la especificación formal del servlet encargado de crear el entorno de la oficina (las paredes, el
techo y el piso), y la implantación de cada método respectivamente:
m.asignarBrillo(50);
Material: objeto que tiene las propiedades
ap.asignarMaterial(m); de color y textura y especificaciones del
objeto.
devolver ap;
tabla 3-8. Método que se encarga de crear la apariencia de cada objeto que compone la entidad.
El programa principal se diseñó a partir de hilos de control que se encargan de comunicarse con
cada uno de los servlets en los diferentes servidores. En la figura 3-8 se muestra la acción de los hilos entre
el programa principal que administra la comunicación y los servlets y se puede observar la relación con la
figura 3-7.
Programa
principal
Universo Virtual
Silla
Columna Computadora
Escritorio Ventilador
Paredes lámparas
En la figura 3-8 se puede observar que cada hilo de control tiene predefinido un servidor en
especial y un servlet que responderá con un objeto de la oficina. Esto se nota por los colores de las flechas.
Por ejemplo el hilo 1 debe conectarse al servidor 1 hacia el servlet paredes, el hilo 2 debe conectarse al
servidor 2 hacia el servlet columna y así sucesivamente. Cuando cada servlet responda, devolverá la escena
que será dinámicamente agregada al universo virtual. El tiempo de respuesta de cada servlet es registrado
así como de cada servidor y posteriormente se le agrega al universo virtual las propiedades de cada escena.
Así en la figura 3-8 no solo se tiene la estructura del programa principal sino también del sistema
distribuido. La forma de distribuir el proceso de construcción de la oficina permite visualizar la respuesta
dinámica de cada servidor. Pero la distribución se podría limitar a que siga un patrón en especial, sea a
nivel de servlets o a nivel de hilos de control. Por ejemplo un servlet podría esperar hasta que otro responda
para enviar la escena que le corresponde, o también darle prioridades a los hilos para que se ejecuten. El
camino más sencillo sin embargo, es enviar las peticiones por medio de todos los hilos y que
dinámicamente según responda cada servidor, se asignen las escenas al universo.
En la figura 3-9 se muestra la relación que existe entre cada clase al momento de ejecutarse el
programa principal. La forma de diseño de la comunicación con cada servlet según su servidor no es la
única y no se descarta la posibilidad de la creación de una mejor estructura para el programa principal.
VirtualScene
Dado que estos objetos serán construidos en Java 3D, uno de los
requerimientos, es el modelado del árbol de la escena para cada uno de ellos.
Este árbol es diseñado de forma tal que sea sencillo poderlo visualizar al ser
enviado por la red. Como cada objeto es una escena distinta, y cada escena es
dinámicamente agregada al universo virtual, entonces cada objeto tiene un
árbol de escena. Sin embargo, el diseño de estos árboles no es necesariamente
el mejor. Si se dispusiera a crear la oficina sin utilizar un enfoque distribuido,
el diseño podría ser completamente distinto. A continuación se describirá la
especificación de cada uno de ellos.
1.6 ud
8 ud
0.1 ud
BG
TG TG TG TG TG
Piso Techo
Pared Pared
Derecha Izquierda Pared
Trasera
figura 3-2. Árbol de escena del entorno de la oficina
III.1.2. La silla.
Para su diseño es mejor guiarse desde abajo hacia arriba. La silla esta
compuesta de una base con dos patas, la columna de la base, el asiento, dos
pequeñas columnas que sostendrán el respaldo y por último el respaldo. A
continuación se muestran las especificaciones de cada uno de estos objetos:
III.1.2.1 La base.
Esta compuesta por dos objetos tipo caja. Estos objetos son de la misma
dimensión de 0.03 ud de ancho, 0.03 ud de alto y 0.5 ud de profundidad. Se
encuentran en la misma ubicación (-1,-0.7,1) rotados 90 grados entre si en el
eje Y, tal como muestra la figura 3-3. El color elegido para las patas es el
negro.
90º
figura 3-3. Esqueleto de la base de la silla
III.1.2.3 El asiento.
El asiento es un objeto tipo caja con dimensiones 0.4 ud de ancho, 0.08 ud de alto y 0.36 de
profundidad. La ubicación de éste es en la posición (-1, -0.5,1) del universo virtual. El color del asiento
es el rojo.
BG
TG TG TG TG TG TG TG
Respaldo
Pata1
Pata2 asiento Columnar
esp2
Columna
base Columna
resp1
III.1.3 La computadora.
Pdad = 0.26
III.1.4 El ventilador.
El ventilador está compuesto de dos paletas de tipo caja, las cuales están ubicadas en el mismo
punto y rotadas en el eje Y 90 grados entre si. Así mismo, contiene un soporte de tipo cilindro que se puede
reconocer como el sostenedor de las paletas. También tiene la columna soporte de donde estará colgado el
ventilador y el soporte del techo que es un objeto de tipo cono.
Se hace referencia a las lámparas de la oficina, a aquellas que están presentes en el techo, estas
están formadas básicamente por objetos de tipo caja con dimensiones: 1 ud de ancho, 0.05 ud de alto, y 1.2
ud de profundidad. Se crearon 4 lámparas del mismo tipo distribuyéndolas equidistantes a las 4 esquinas
del techo de la oficina.
III.1.6 La columna.
La columna es en sí, un cilindro que une el techo y el piso. El cilindro tiene dimensiones 0.2 ud de
radio y 1.6 ud de alto. De éste modo la columna cubre toda la altura de la oficina. Y se encuentra ubicada
en el punto (1,0,-2.5) de la escena.
III.1.7 El escritorio.
El escritorio está compuesto completamente de puros objetos tipo caja, los cuales nos presentan un
diseño de una mesa de trabajo bastante amplia en dos secciones.
El escenario virtual creado solo admite tres tipos de interacciones con el usuario:
4. La primera es encender y apagar las luces que intervienen en la escena. Esta acción se ejecuta al pulsar
clic con el ratón. En la escena existen 4 puntos de luz principales, dado que existen 4 lámparas, de los
cuales solo se apagan 3. El cuarto punto de luz se deja encendido para poder visualizar la escena con
mínima iluminación.
5. Las segunda interacción es encender y apagar el ventilador, la misma se ejecuta al pulsar cualquier
“tecla imprimible” ( entiéndase por tecla imprimible, a cualquiera que haga referencia a números o
letras ).
6. La tercera y última interacción es la de recorrido en el ambiente por medio de las teclas la navegación
( las cuatro flechas del teclado).
Para la creación del ambiente virtual por medio de la distribución de procesos basado en servlets,
se debe introducir primero una visión general de la estructura de un servlet y luego se mostrará como se
distribuyeron cada uno de éstos para poder construir la escena.
III.3.1 Especificación formal en TDSO de los componentes utilizados en la implantación del ambiente
virtual distribuido.
Un servlet, no es más que una clase que hereda de otra, y que de acuerdo a la forma de diseño que
se disponga puede servir para responder ante un formulario desde una página web o para procesar objetos
complejos que nos permitan acoplar información.
El camino más sencillo para distribuir objetos utilizando “servlets”, es pensar en éstos como si
fueran servidores de petición - respuesta construidos bajo el enfoque de “sockets”. Así, si éste quiere leer
un dato cualquiera desde la red esperará hasta recibirlo y si en vez de recibir desea enviar, debe existir
algún programa o medio receptor.
A parte de todas los métodos públicos o privados que deseemos realizar para nuestra clase como
parte del diseño, lo más importante es escoger cual o cuales métodos de servicios del servlet necesitamos
sobrescribir. Los métodos pueden ser elegidos según la elección del programador.
En nuestro caso, seleccionamos el método service por ser la función base del servicio. El diseño
interno de comunicación con el cliente para el sistema distribuido, es más parecido a la programación en
sockets que otra cosa.
Efo.cerrar();
SalidaFlujoObjetos sfo =
nuevaDir( response.obtenerSalidaFlujoObjet
os() );
sfo.escribirObjeto( ob );
sfo.cerrar();
sfo.escribirObjeto( ob );
ob.mostrarDatos(): este método permite
sfo.cerrar(); mostrar sea en pantalla o en ventanas el
contenido de los atributos del objeto.
ConexiónURL: éste objeto se encarga de la
comunicación vía url y abre la conexión con
el servidor remoto. La dirección está dada
// Pidiendo permiso de lectura
por el ServletDir, una variable de tipo
EntradaFlujoObjetos efo = cadena que indica la dirección url del
nuevaDir( url.obtenerEntradaFlujoObjetos() servlet.
);
ob = (ObjetoPer)efo.obtenerObjeto();
efo.cerrar();
ob.mostrarDatos();
url.cerrarConexion();
tabla 3-6. Especificación en TDSO de una aplicación que permite la comunicación con un servlet.
A simple vista, pareciera no tener sentido enviar un objeto y recibirlo modificado, pero es tan solo
una visión general de cómo un servlet puede comportarse como si fuera un servidor basado en el enfoque de
“sockets”, claro que con mayores ventajas que ellos.
III.3.2 Diseño y especificación de la arquitectura distribuida para la construcción del ambiente
virtual.
Habiendo observado la forma general de comunicación con los servlets a través de un programa de
aplicación, podemos construir un sistema donde cada servlet se encargue literalmente de crear un objeto
3D, como una silla o un escritorio, el cual será enviado por la red a una aplicación que lo reciba y lo ingrese
dinámicamente al universo virtual.
Dado que existen siete distintas entidades tridimensionales que componen la oficina, cada una de
ellas será creada por diferentes servlets. La disposición de los servlets será en cuatro servidores, tal como se
muestra en la figura 3-7.
Silla
Columna Computadora
Escritorio Ventilador
Paredes lamparas
La forma de distribuir los servlets en los servidores no es única. Otra forma de diseño podría ser,
disponer de siete servidores en vez de cuatro, en vista de que son siete objetos distintos. Lo que se desea, es
evaluar la calidad de desempeño de un servlet en particular frente a un proceso lo suficientemente
“pesado”. Un objeto tridimensional puede llevar un considerable tiempo de cálculo en cuanto a ubicación,
forma, tamaño y distribución del color. Cada entidad que compone la oficina está formado por más de un
objeto tridimensional básico (entiéndase por objeto 3D básico, aquellos que son cubos, conos, cilindros o
esferas), por lo que se considera que para crear una entidad en especial, así como el transporte de toda esa
información por la red permite evaluar la robustez de un servlet.
La forma de diseño de cada uno de los servlets es similar. Lo único que cambia es el contenido de
la escena que será transportada por la red. De éste modo, sólo es necesario conocer como diseñar uno de
ellos y todos los demás pueden ser creados de la misma manera. A continuación se muestra en las tablas 3-
7, 3-8 y 3-9 la especificación formal del servlet encargado de crear el entorno de la oficina (las paredes, el
techo y el piso), y la implantación de cada método respectivamente:
m.asignarBrillo(50);
Material: objeto que tiene las propiedades
ap.asignarMaterial(m); de color y textura y especificaciones del
objeto.
devolver ap;
tabla 3-8. Método que se encarga de crear la apariencia de cada objeto que compone la entidad.
GrupoTransformación: es el
t.trasladar( NuevaDir Vector3f( 3f, 0f, 0f));
objeto de tipo Grupo de Java3D
GrupoTransformacion grupoDerecho = NuevaDir
GrupoTransformacion(t); encargado de contener
Caja paredDerecha = NuevaDir Caja( 0.05f, 0.8f, 4f , información de tipo
Caja.GENERAR_NORMALES, crearApariencia(blanco, transformación para el objeto
colorParedes) ); 3D.
grupoDerecho.agregarHijo(paredDerecha);
trasladar: se encarga de
Fondo fondo = NuevaDir Fondo(); trasladar el objeto
fondo.setColor(1.0f, 1.0f, 1.0f);
tridimensional a las
fondo.setApplicationBounds(NuevaDir BoundingSphere());
bg.agregarHijo(fondo); coordenadas especificadas por
el vector tridimensional.
//fin del diseño
//creación del mapa de escena.
Mapa map = NuevaDir Mapa(10); Vector: crea un nuevo vector
map.poner("Izquierda", grupoIzquierdo);
map.poner("Izquierda", paredIzquierda );
tridimensional.
map.poner("Derecha", grupoDerecho);
map.poner("Derecha", paredDerecha);
map.poner("Atras", grupoTrasero); Fondo: es el fondo del entorno
map.poner("Atras", paredTrasera); de la escena.
map.poner("Arriba", grupoTecho);
map.poner("Arriba", techo);
map.poner("Abajo", grupoPiso);
map.poner("Abajo", piso);
El programa principal se diseñó a partir de hilos de control que se encargan de comunicarse con
cada uno de los servlets en los diferentes servidores. En la figura 3-8 se muestra la acción de los hilos entre
el programa principal que administra la comunicación y los servlets y se puede observar la relación con la
figura 3-7.
Programa
principal
Universo Virtual
Silla
Columna Computadora
Escritorio Ventilador
Paredes lámparas
En la figura 3-8 se puede observar que cada hilo de control tiene predefinido un servidor en
especial y un servlet que responderá con un objeto de la oficina. Esto se nota por los colores de las flechas.
Por ejemplo el hilo 1 debe conectarse al servidor 1 hacia el servlet paredes, el hilo 2 debe conectarse al
servidor 2 hacia el servlet columna y así sucesivamente. Cuando cada servlet responda, devolverá la escena
que será dinámicamente agregada al universo virtual. El tiempo de respuesta de cada servlet es registrado
así como de cada servidor y posteriormente se le agrega al universo virtual las propiedades de cada escena.
Así en la figura 3-8 no solo se tiene la estructura del programa principal sino también del sistema
distribuido. La forma de distribuir el proceso de construcción de la oficina permite visualizar la respuesta
dinámica de cada servidor. Pero la distribución se podría limitar a que siga un patrón en especial, sea a
nivel de servlets o a nivel de hilos de control. Por ejemplo un servlet podría esperar hasta que otro responda
para enviar la escena que le corresponde, o también darle prioridades a los hilos para que se ejecuten. El
camino más sencillo sin embargo, es enviar las peticiones por medio de todos los hilos y que
dinámicamente según responda cada servidor, se asignen las escenas al universo.
Para la implantación del sistema distribuido se crearon una serie de clases con funciones
específicas para mejorar la estructura de comunicación y recepción de los objetos que envían los distintos
servlets. En la tabla 3-10 se muestran todas las clases que participan en el programa principal, así como una
breve información de la función que desempeña cada una:
Clases creadas para la implantación del sistema distribuido
En la figura 3-9 se muestra la relación que existe entre cada clase al momento de ejecutarse el
programa principal. La forma de diseño de la comunicación con cada servlet según su servidor no es la
única y no se descarta la posibilidad de la creación de una mejor estructura para el programa principal.
VirtualScene
V.1 Recomendaciones.
Basándose en los resultados obtenidos en el proyecto se pueden tomar
las siguientes recomendaciones:
Referencias a Internet:
http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
http://216.147.98.109/support_cp_java.html
http://java.sun.com/docs/books/tutorial/servlets/index.html
http://java.programacion.net/servlets_basico/index.php
http://java.programacion.net/threads/index.php
http://java.programacion.net/3d/index.php
http://delta.cs.cinvestav.mx/~adiaz/sis-dis/slides.html
http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/SO7.htm