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