En el presente artículo se propone una plataforma basada en objetos para la construcción de aplicaciones colaborativas sobre el Web. Se describe un esquema de comunicación para que aplicaciones construidas sobre el Web puedan intercambiar mensajes con un servidor de objetos. Este esquema provee una gran flexibilidad para la construcción de interfaces Web y para el desarrollo de aplicaciones colaborativas en Internet. Se muestran también algunos ejemplos de aplicaciones colaborativas desarrolladas sobre Internet utilizando la plataforma orientada a objetos. La interfaz de estas aplicaciones fue construida sobre el Web utilizando el esquema de comunicación propuesto.
Palabras claves: Sistemas Colaborativos, interfaz humano-computador, plataforma orientada a objetos, Internet, aplicaciones sobre Web.
1. Introducción
El World Wide Web (en adelante Web) provee un marco ideal para el desarrollo de aplicaciones colaborativas debido principalmente a su amplia extensión alrededor de todo el mundo. Esto facilita la distribución de las aplicaciones y la comunicación y colaboración entre los usuarios de los grupos de trabajo.
Hasta hace poco tiempo, el Web era de naturaleza básicamente asincrónica. Sin embargo, los nuevos "sitios Web de cuarta generación" [Eckerson97] permiten bajar documentos HTML [Berners-Lee94] con applets de Java [Flanagan97] que proveen comunicación directa, por ejemplo a través de TCP/IP, con otros servidores. Los applets pueden incluso estar del lado del servidor HTTP como servlets de un Java Web Server [JWS], lo que provee mejor funcionalidad que el uso de los tradicionales CGIs [Robinson96]. Estos recientes avances han hecho posible el desarrollo de aplicaciones colaborativas sobre el Web, con alto grado de sincronismo [Gall97, Kindberg96, Trevor97, vanWelie96, Walther96].
Sin embargo, la creación de estas aplicaciones no es tarea fácil, principalmente por la escasez de herramientas de desarrollo. Esto hace que el proceso de construcción de aplicaciones empiece de cero, teniendo que invertir mucho tiempo en problemas de comunicación, seguridad, control de concurrencia, transmisión de datos, diseño de interfaces, etc.
En este artículo presentamos una plataforma para el desarrollo de aplicaciones colaborativas sobre el Web y un esquema de comunicación cliente-servidor, usando como clientes documentos HTML con funciones JavaScript [Flanagan97b] desde cualquier browser que las soporte. La sección 2 muestra la plataforma, la sección 3 el esquema de comunicación cliente-servidor y en la sección 4 se presentan algunas de las aplicaciones desarrolladas usando la plataforma y el esquema de comunicación.
2. La plataforma TOP
La plataforma TOP ("Ten Objects Platform") es parte del
proyecto CLASS ("Computer Learning Applications for Students' Support")
[Guerrero97] y nace debido a la falta de herramientas para la rápida
construcción y modificación de aplicaciones colaborativas
docentes. Esta plataforma está compuesta por diez objetos para la
construcción de aplicaciones colaborativas, y un servidor que provee
acceso a los métodos y atributos de estos objetos. El siguiente
diagrama OMT [Rumbaugh91] muestra la relación entre estos objetos.

Los objetos tipo box son repositorios de información,
donde puede almacenarse cualquier otro tipo de objeto. El objeto boxObject
contiene información sobre cada objeto almacenado en un box,
básicamente su nombre, dueño o creador, fecha de creación,
última fecha de modificación y último usuario que
lo modificó. Cada objeto debe tener un tipo. La especificación
de tipos se hace a través del objeto boxObjectType. En este
objeto se especifica, entre otras cosas, la forma en que este tipo de objeto
va a ser visualizado a través de un browser HTML, es decir, las
instrucciones o marcas HTML que se necesitan para desplegar este tipo de
objeto.
El objeto view permite tener vistas distintas de los objetos contenidos en un box, por ejemplo para ocultar cierta información o para presentar la información de otra manera. Las vistas y los permisos de acceso a los objetos de un box están determinadas por el rol que cada usuario tiene en una aplicación. Los objetos user y role definen estos permisos. El objeto floorControl define políticas de control de piso para proveer coordinación en las aplicaciones, por ejemplo para coordinar el uso de recursos compartidos. El objeto session permite definir sesiones de trabajo y áreas de trabajo distintas para una misma aplicación. El objeto broadcast envía información a todos los usuarios conectados en una misma sesión de trabajo, principalmente en sesiones de trabajo sincrónico. Finalmente, el objeto environment es quien relaciona todos los objetos de una misma aplicación. A través de este objeto se tiene acceso al contexto o ambiente compartido de una aplicación.
Los métodos y atributos de todos estos objetos se pueden acceder y modificar mediante mensajes enviados al servidor de la plataforma. También a través de este servidor se pueden borrar y crear nuevos objetos. Tanto los objetos como el servidor están hechos en Java, lo que hace que la plataforma sea portable.
Ellis define groupware como sistemas basados en computadoras que apoyan a grupos de gente que trabajan en una tarea o meta común, y que provee una interfaz a un ambiente compartido [Ellis91]. A través de los objetos de la plataforma se puede crear el ambiente compartido de la aplicación. El usuario constructor de aplicaciones, a través del programa administrador de la plataforma, define los objetos que necesita para su aplicación. Luego construye, en JavaScript, la interfaz de su aplicación. Veamos a continuación cómo se realiza este proceso.
3. Interfaz a través del Web
Para la creación de la interfaz de la aplicación
se utiliza JavaScript y HTML. Se tiene definido un pequeño applet
(3.11Kbytes el archivo .class) que encapsula todas las rutinas de comunicación
con el servidor, incluyendo definición de puertos, protocolos de
comunicación, servicio de notificaciones y variables para almacenamiento
temporal con persistencia durante todo el tiempo que la aplicación
es utilizada en el browser. El llamado a este applet se hace desde una
hoja HTML que forma parte de la aplicación, y permite la comunicación
con el servidor de la plataforma TOP. La clase principal de este applet
se llama TopInterface. Sus atributos y métodos son mostrados en
la siguiente figura.

Los atributos server y port registran, respectivamente, el nombre del servidor donde se encuentra el servidor de TOP y el número de socket que utiliza para "escuchar". El atributo listener, es una referencia a un objeto tipo "thread". El handWindow es un atributo que representa la ventana del browser (o frame) donde se ejecuta TopInterface. handWindow provee el enlace de comunicación entre TopInterface y las funciones JavaScript.
Un problema que se presenta en JavaScript, es la referencia a variables desde funciones que se ejecutan en frames diferentes dentro de un mismo browser. Por ello se adiciona a TopInterface el atributo vars[], que es un vector de tiras de caracteres con capacidad limitada. La forma de acceder a este atributo, es a través de los métodos putvar() y getvar(), que almacenan una variable y recuperan su contenido, respectivamente.
El método run() es quien recibe las notificaciones del servidor y las transfiere a la función JavaScript notificator(). Este método es un "thread" protegido que se ejecuta luego de haber inicializado e instanciado el atributo listener.
3.1 La Funcionalidad de TopInterface
LiveConnect [Flanagan97b] es el mecanismo que permite a JavaScript y Java trabajar juntos. Se emplea esta facilidad de comunicación para lograr la interacción entre las aplicaciones Web con JavaScript y TopInterface.
Existen dos características que TopInterface ofrece a las aplicaciones JavaScript: la comunicación con la plataforma TOP (para la invocación de sus servicios) y un servicio de notificación para proveer percepción (awareness) de usuarios [Dourish92]. La siguiente figura muestra esta funcionalidad.

Los eventos que ocurren en la interfaz (browser) son
tratados por las respectivas funciones definidas en JavaScript. Así
por ejemplo, cuando un usuario presiona un botón para conectarse
a una sesión determinada, se invoca a la función inSession().
Esto se muestra a continuación.
<INPUT TYPE="button"
NAME="button_connect"
VALUE="Connect"
onFocus='document.formData.msg.value="Connect to a TOP session."'
onClick="inSession(document.formData.text_userName.value,
document.formData.text_password.value)">
Este código define un botón para conectarse a una sesión de trabajo de la plataforma TOP. El evento que maneja esta conexión es la función inSession(), a la cual se le transfiere el nombre del usuario y su palabra de paso.
3.2 Invocación a los Servicios del Servidor TOP
Cuando se requiere invocar un servicio de la plataforma TOP, se debe construir el mensaje respectivo en una función JavaScript, según la estructura de los servicios de TOP. Por ejemplo, cuando un usuario desea conectarse a una sesión en TOP debe invocar al siguiente servicio del servidor TOP:
UpdateUserSession:user_name,password,session_name,app_name,check_user,access_mode
Para esto, debe construirse en una función JavaScript el siguiente mensaje:
3.3 Servicio de Notificaciones para Aplicaciones Web
Una característica común en aplicaciones colaborativas sincrónicas es el servicio de notificación a los usuarios. Una notificación se produce cuando el estado compartido de una aplicación cambia [Day97]. Una forma de proveer mecanismos de percepción y sincronismo a las aplicaciones Web, es a través del servicio de notificación que TopInterface provee.
Existen dos situaciones no excluyentes en las que se pueden encontrar los usuarios en una aplicación colaborativa: en estado de notificadores o en estado de observadores [Eiderbäck97].
Un usuario es notificador cuando pone en conocimiento de los demás usuarios un evento. Bajo nuestro esquema, para esta situación se utiliza el método sendMessage() del objeto broadcast de la plataforma TOP. Primero se construye el mensaje de este servicio desde una función JavaScript, y luego se invoca al método requestService() de TopInterface para transmitir el mensaje al servidor. Por ejemplo:
msg = "broadcast:" + userName + "," + appName + "," + sessionName +
"," + broadcastName + "," + userList + "," + "nosave" + "," +
messageToBroadcast
answer = document.TopInterface.requestService(msg)
Un usuario es observador cuando recibe la notificación
de un evento por parte de un usuario notificador. TopInterface implementa
un "thread" en el lado del cliente para escuchar los mensajes transmitidos
por los usuarios notificadores. Esto se hace a través del servicio
broadcast()
del servidor. Esta situación obliga a implementar en JavaScript
una función denominada notificator(String
notify). Esta función es invocada por
el "thread" de TopInterface para transmitir la notificación por
medio del atributo handWindow, de la siguiente forma:
handWindow = JSObject.getWindow(this); // handler for Netscape window
...
private void run() {
...
handWindow.call("notificator",args);
...
}
El atributo handWindow hace referencia a la página
Web donde está ejecutándose TopInterface. A través
de su método call()
se hace el llamado a la función notificator()
de JavaScript. El argumento args contiene el evento a notificar.
En la construcción de la interfaz, se debe considerar el manejo
de todos los eventos que pueden producir notificaciones. Esto depende de
la funcionalidad de cada aplicación.
Las notificaciones son recibidas por la función notificator(String notify), en la variable notify, bajo el siguiente formato:
Algunos ejemplos de notificaciones que se podría requerir manejar son:
4. Ejemplos de Aplicaciones
Las siguientes aplicaciones fueron implementadas sobre Web empleando el lenguaje JavaScript. Estas aplicaciones emplean la clase TopInterface y los otros objetos de la plataforma TOP para proveer colaboración.
Para la creación de los ambientes de cada
aplicación, se utiliza el programa administrador de la plataforma
TOP. A través de este programa se pueden crear y modificar todos
los objetos de la plataforma. La pantalla principal de este programa se
muestra en la siguiente figura.

A través del menú principal se pueden crear
usuarios y ambientes. Una vez que se crea un ambiente, se pueden crear
los otros objetos, que deben estar relacionados con éste. En una
etapa previa del diseño de las aplicaciones se debe determinar los
objetos que se necesitarán, y a través de este administrador
se crean. Veamos algunos ejemplos.
4.1 Aplicación ChatWeb
Se implementó una aplicación chat para demostrar la funcionalidad de nuestra plataforma en la construcción de aplicaciones colaborativas sincrónicas sobre Web. Esta aplicación envía y recibe mensajes tipo texto y proporciona mecanismos de percepción (awareness) sobre los usuarios que llegan y se retiran de la sesión. Por defecto los mensajes son enviados a todos los usuarios conectados a la sesión. Sin embargo, provee la facilidad de seleccionar los usuarios a los que se desea enviar el mensaje.
Para el funcionamiento de la aplicación se creó
en la plataforma TOP (usando el administrador presentado en la sección
anterior) un ambiente de trabajo y un box con broadcast
sin persistencia. Se definió un tipo de usuario guest, para
que cualquier persona pueda hacer uso de esta aplicación. La siguiente
figura muestra nuestra aplicación Chat.

El usuario debe ingresar su nombre y la palabra guest
como palabra de paso. Luego debe conectarse a la plataforma a través
del botón "connect". Una vez registrado en la plataforma, puede
enviar mensajes. Conforme otros usuarios se incorporen o se retiren de
la sesión, serán visualizados en la ventana "User Connected".
Para retirarse de la sesión se utiliza el botón "disconnect".
Esta aplicación está disponible para ser utilizada en la
dirección: http://cronos.ing.puc.cl/~rportug/ChatWeb/
ChatWeb.html
4.2 Aplicación Slider: Control de Navegación Sincrónica sobre Web
Existen varios trabajos relacionados sobre la sincronización de los Web-Browsers [Yen96, Parnes97], por lo que esta idea no es nueva. Slider requiere la creación de una sesión, un box y un control de piso (objeto floorControl) a través del administrador de objetos de TOP. Con el control de piso se garantiza la existencia de un solo usuario notificador y varios usuarios observadores. El usuario que posee el control de piso cuenta con la barra de botones habilitada para navegar dentro de una secuencia predefinida de hojas HTML. También cuenta con un telepuntero [Greenberg96], implementado con layers [Netscape-Layers], para resaltar algún tópico dentro de la hoja HTML.
El aporte de Slider radica en la forma de su implementación. Según Yeh, JavaScript y Java no pueden sincronizar los browser en los clientes: JavaScript no provee posibilidad de comunicación y Java sólo detecta los eventos que se activan en el "frame" del Java applet [Yeh96]. Slider sincroniza los browsers de los clientes a través de funciones JavaScript que se comunican con applets Java.
El problema de brindar distribución en tiempo real entre hojas HTML en el Web puede ser divido en dos partes: sincronización y distribución [Parnes97]. La sincronización y distribución en Slider se da través de la función JavaScript notificator(). Esta función hace que los usuarios observadores reciban dos tipos de notificación: la posición del telepuntero y la dirección URL de la hoja HTML. Con la dirección URL los observadores solicitan la página HTML al Web Server. Con la posición del telepuntero ubican a éste en su propio browser. La siguiente figura muestra la aplicación Slider.

Al cargar la hoja HTML principal de esta aplicación
se solicita el nombre del usuario. La aplicación automáticamente
detecta, según la configuración de la sesión de trabajo
de TOP, si posee o no el control de piso. Cualquier acción que realice
quien tiene el control de piso, sobre el telepuntero o los botones de navegación,
es reflejado en todos los browsers conectados a la sesión. Actualmente
sólo el usuario coordinador posee el control del piso. Estamos trabajando
en una nueva versión que permite rotar el control de piso mediante
alguna política predefinida, como FIFO o prioridades.
4.3 ECO: Editor Colaborativo
ECO es un editor colaborativo asincrónico simple, construido utilizando nuestro esquema de comunicación y la plataforma TOP. El acceso al editor está restringido. Solamente usuarios previamente definidos pueden crear o modificar documentos. Al ingresar al editor se solicita el nombre del usuario y su palabra de paso. A través de una función JavaScript, se envía un mensaje a TopInterface para validar su ingreso. TopInterface se comunica con el servidor de TOP para verificar si es usuario del editor. Si el usuario es tiene acceso al editor, se le presenta la siguiente pantalla.

En esta pantalla se presentan opciones para edición
de texto, para crear o recuperar documentos, y para visualizar los documentos.
Según la estrategia de colaboración definida en el editor,
los usuarios no pueden borrar ni modificar objetos creados por otros usuarios,
solamente visualizarlos. Pueden crear nuevos objetos, por ejemplo nuevos
párrafos de texto, o modificar aquellos objetos que ellos mismos
han creado. Sin embargo, pueden hacer comentarios a cualquier objeto a
través de notas de texto. Estas notas pueden ser removidas por el
dueño del objeto. La siguiente figura muestra un ejemplo de visualización
del documento incluyendo estas notas.

En la figura 4.5 se muestra la opción de visualización
del documento con todas sus marcas. Aquí se incluye, en texto azul,
el nombre de cada objeto, el dueño y los íconos correspondientes
a los comentarios hechos por otros usuarios. Estos comentarios pueden ser
visualizados haciendo click sobre los íconos. Se presenta una ventana
pequeña de fondo amarillo con el nombre del usuario que hizo el
comentario y el texto del mismo. Otra opción muestra el documento
completo sin marcas, en su presentación final.
5. Conclusiones y Trabajo Futuro
En el presente artículo se mostró una plataforma para la construcción de aplicaciones colaborativas sobre Web y un esquema de comunicación entre funciones JavaScript de hojas HTML, un applet de Java y un servidor de objetos.
Los objetos box, boxObject y boxObjectType de la plataforma TOP, administran los datos de las aplicaciones colaborativas. El objeto view provee diferentes vistas sobre estos datos. Los objetos user y role definen los permisos de acceso de los usuarios sobre las vistas y la información contenida en los boxes. El objeto floorControl provee coordinación en el uso de recursos compartidos. El objeto session permite definir periodos de trabajo sincrónico. También define áreas de trabajo distintas para distintos grupos de trabajo. El objeto broadcast distribuye objetos entre los usuarios conectados en una sesión de trabajo sincrónico. Finalmente, el objeto environment establece la relación entre todos los objetos de una misma aplicación. Los métodos y atributos de estos objetos son administrados a través de un servidor.
Una aplicación colaborativa está conformada por un ambiente o contexto compartido, y una interfaz a este ambiente. A través de los diez objetos de la plataforma TOP es posible construir el ambiente o contexto compartido. Para la creación de la interfaz en aplicaciones colaborativas sobre Web se utiliza el lenguaje JavaScript. Las funciones JavaScript de estas aplicaciones se pueden comunicar con el servidor de la plataforma TOP a través del applet TopInterface, usando LiveConnect.
El applet TopInterface tiene un método que "escucha" los mensajes enviados desde el servidor. Al recibir una notificación, ejecuta un manejador de eventos, que debe ser programado en la aplicación Web como una función JavaScript llamada notificator(String notify). A través de esta función cada aplicación hace el respectivo tratamiento de las notificaciones que puede recibir. Otra funcionalidad de TopInterface es el almacenamiento y recuperación de variables desde JavaScript, evitando de esta forma el uso de "Cookies" [Flanagan97b], que incluso puede ser desabilitada por el usuario del browser. Esto soluciona el problema de que JavaScript, por razones de seguridad, no permite transferir información entre "frames".
Nuestra propuesta muestra cómo, aplicaciones Web con funciones JavaScript, pueden ser extendidas a aplicaciones sincrónicas, multiusuario y distribuidas, empleando TopInterface y la plataforma TOP. Permitiendo luego agregar mecanismos de colaboración a estas aplicaciones. Se puede aprovechar además las ventajas del hipertexto, propias de las hojas Web, para el diseño de estas aplicaciones.
A pesar de que en el presente artículo hemos enfatizado en el desarrollo de aplicaciones colaborativas sobre Web, nuestra plataforma es abierta. La plataforma está construida en Java, lo que la hace portable. El servidor de la plataforma escucha un puerto definido por el administrador al levantarlo. De este modo, es posible la comunicación entre el servidor y cualquier aplicación construida en algún lenguaje que permita la definición de sockets.
Como trabajo futuro esperamos diseñar e implementar más aplicaciones colaborativas sobre la plataforma. Estamos trabajando en la incorporación de audio y video, ampliando la comunicación para permitir plug-ins usando LiveConnect. También esperamos incorporar más servicios en el servidor de TOP, así como mejorar los aspectos de seguridad y consistencia de la información.
Reconocimientos
Este trabajo fue parcialmente apoyado por el Fondo Nacional de Ciencia y Tecnología (FONDECYT), proyecto 198-0960.
Referencias
[Day97] Day, M., Pattersson J. and Mitchell D. The Notification Service Transfer Protocol (NSTP): Infraestructure for Syncronous Groupware. Proceedings of the Sixth International World Wide Web Conference. Santa Clara, California USA. April 7-11, 1997. Available at: http://www6.nttlabs.com/ HyperNews/get/PAPER80.html
[Dourish92] Dourish P. and Belloti V. Awareness and Coordination in Shared Workspaces. Proceedings of CSCW'92, pp. 107-114. Canada, 1992.
[Eiderbäck97] Eiderbäck, B. and Jiarong L. A Common Notification Service. Proceedings of the OOGP'97, The ECSCW'97 Workshop on Object Oriented Groupware Platforms. Lancaster, UK. September 7, 1997. Available at: http://www.trc.nl/events/ecscw97oogp/papers.htm
[Ellis91] Ellis, C.A., Gibbs, S.J. and Rein, G.L. Groupware Some Issues and Experiences. Communications of teh ACM, Vol. 34 No.1, 1991, pp. 38-58.
[Flanagan97] Flanagan, D. Java in a Nutshell. USA, O'Reilly, Second Edition, May, 1997.
[Flanagan97b] Flanagan, D. JavaScript, The Definitive Guide. USA, O’Reilly & Associates, Inc. Second Edition. January, 1997.
[Gall97] Gall, U., Hauck, F. Promondia: A Java-Based Framework for Real-Time Group Communication in the Web. Proceedings of the Sixth International World Wide Web Conference. Santa Clara, California USA. April 7-11, 1997. Available at: http://www6.nttlabs.com/HyperNews/ get/PAPER100.html
[Girgensohn96] Girgensohn, A., Lee, A., and Schlueter, K. Experiences in Developing Collaborative pplications Using the World Wide Web "Shell". Proceedings of ACM Hypertext'96, pp. 246-255, Washington, USA, March, 1996.
[Greenberg96] Greenberg, S., Gutwin, C., and Roseman, M. Semantic Telepointers for Groupware. Proceedings of the OzCHI '96, Sixth Australian Conference on Computer-Human Interaction, Hamilton, New Zealand, November 24-27, 1996.
[Kindberg96] Kindberg, T. Mushroom, A Framework for Collaboration and Interaction Across the Intenet. Proceedings of the ERCIM Workshop on CSCW and the Web. Sankt Augustin, Germany. February 7-9, 1996.
[Patterson96] Patterson, J.F., Dayn, M.and Kucan, J. Notification Servers for Syncronous Groupware. Proceedings of the CSCW 96. Boston, Massachusetts, USA. November 16-20, 1996.
[Parnes97] Parnes, P., Mattsson, M., Synnes, K. and Schefstr, D. The mWeb Presentation Framework. Proceedings of the Sixth International World Wide Web Conference. Santa Clara, California USA. April 7-11, 1997. Available at: http://www6.nttlabs.com/HyperNews/get/PAPER23.html
[Robinson96] Robinson, D. The WWW Common Gateway Interface. Version 1.1. Internet Draft, January, 1996.
[Trevor97] Trevor, J., Koch, T. and Woetzel, G. MetaWeb: Bringing Synchonous Groupware to the World Wide Web. Proceedings of the European Conference on Computer Supported Cooperative Work, ECSCW'97, Lancaster, 1997. Available at: http://bscw.gmd.de/MetaWeb/papers/ecscw97.html
[vanWelie96] vanWelie M. and Eliëns A. Chatting on the Web. Proceedings of the ERCIM Workshop on CSCW and the Web. Sankt Augustin, Germany. February 7-9, 1996.
[Walther96] Walther, M. Supporting Development of Synchronous Collaboration Tools on the Web with GroCo. Proceedings of the ERCIM Workshop on CSCW and the Web. Sankt Augustin, Germany. February 7-9, 1996.
[Yeh96] Yeh, P., Chen, B., Lai, M. and Yuan, S.. Synchronous Navigation Control for Distance Learning on the Web. Proceedings of the Fifth International World Wide Web Conference. Paris, France. May 6-10, 1996. Available at: http://www5conf.inria.fr/fich_html/papers/P28/Overview.html
Referencias URL
[JWS] Java Web Server. http://jeeves.javasoft.com
[Netscape-Layers] Layers and JavaScript Extensions for
Layes Glossary.
http://home.netscape.com/comprod/products/communicator/layers/layers_glossarl