Universidad de Colima MAESTRÍA EN CIENCIAS: ÁREA TELEMÁTICA APLICACIÓN CLIENTE/SERVIDOR DE 2 NIVELES UTILIZANDO DCOM/COM PARA GESTIONAR, REMOTA Y LOCALMENTE, TABLAS.DBF UBICADAS EN UNA LAN OPERANDO CON LOS SISTEMAS OPERATIVOS WINDOWS 9X Y NETWARE 4.11. TESIS QUE PARA OBTENER EL GRADO DE MAESTRO EN CIENCIAS, ÁREA TELEMÁTICA PRESENTA MIGUEL ÁNGEL MIRANDA GUERRERO ASESOR M. en C. PEDRO DAMIÁN REYES COLIMA, COLIMA. NOVIEMBRE DE 2002 UNIVERSIDAD DE COLIMA OFICIO NO. 757/02 FACULTAD DE TELEMATICA C. MIGUEL ÁNGEL MIRANDA GUERRERO PRESENTE Informo a usted que ha sido aprobado como tema de titulación para obtener el título de Maestro en Ciencias área: Telemática, lo solicitado por usted bajo el título “APLICACIÓN CLIENTE / SERVIDOR DE 2 NIVELES UTILIZANDO DCOM/COM PARA GESTIONAR, REMOTA Y LOCALMENTE, TABLAS. DBF UBICADAS EN UNA LAN OPERANDO CON LOS SISTEMAS OPERATIVOS WINDOWS 9X Y NETWARE 4.11” Desarrollado bajo los siguientes puntos: Índice Introducción Capítulo I Marco Teórico Capítulo II Aspectos Técnicos de DCOM Capítulo III Archivos Tipo DBF Capítulo IV Planteamiento del Problema y Desarrollo de la Solución Capítulo V Resultados . Conclusiones Sugerencias Anexos Glosario Bibliografía Al mismo tiempo informo a usted que han sido designado como asesor de titulación: MC. PEDRO DAMIÁN REYES En cada uno de los ejemplares de titulación que presente para examen, deberá aparecer en primer termino copia del presente oficio. Copia: expediente del egresado Archivo Av. Universidad 333, Colima, Colima, México, C.P. 28040 Telefax 01 (312) 316 10 75, 316 10 00, Ext. 37801 DEDICATORIAS A mi esposa Ángeles, mis hijos Miguel Ángel y Saúl Orlando.- Por el tiempo que no estuve con ellos por dedicarlo al estudio de la maestría. A mis maestros. - Por su esfuerzo y dedicación no siempre comprendido. A la Universidad. - Por la posibilidad que brinda a quienes desean superarse. ii ÍNDICE INTRODUCCIÓ N ...................................................................................................................1 I.- MARCO TEÓRICO ............................................................................................................5 II.- ASPECTOS TÉCNICOS DE DCOM ............................................................................. 21 III.-ARCHIVOS TIPO.DBF .................................................................................................. 34 IV. -PLANTEAMIENTO DEL PROBLEMA Y DESARROLLO DE LA SOLUCIÓN 43 V.- RESULTADOS Y CONCLUSIONES ..............................................................................66 SUGERENCIAS ..................................................................................................................... 70 ANEXO A ................................................................................................................................71 ANEXO B ................................................................................................................................ 93 ANEXO C ............................................................................................................................... 98 ANEXO D ............................................................................................................................. 117 ANEXO E .............................................................................................................................. 121 ANEXO F .............................................................................................................................. 124 GLOSARIO ..........................................................................................................................127 BIBLIOGRAFÍA .................................................................................................................. 129 iii Tabla de figuras No. Fig De s c r i p c i ó n Página 1.1 Arquitectura Mainframe o Centralizada. 1.2 Esquema de un servidor de archivos. 1.3 Diseño de la arquitectura Cliente/Servidor de 2 niveles. 1.4 Esquema de aplicaciones distribuidas. 10 1.5 Enlaces entre aplicaciones Cliente/Servidor con RPC 16 1.6 Esquema de la arquitectura Cliente/Servidor utilizando COM. 19 1.7 Esquema de la arquitectura DCOM. 20 2.1 Componentes COM en diferentes procesos. 22 2.2 DCOM: componentes COM en diferentes equipos. 22 2.3 Independencia de la localización. 25 2.4 Distribución paralela de componentes. 27 2.5 Distribución de un componente critico. 28 2.6 Administración consolidada del tiempo de vida. 29 4.1 Conexiones de red previas en CAPDAM. 43 4.2 Esquema de la solución propuesta. 47 4.3 Contenido del proyecto de la aplicación servidor 49 4.4 Clase principal de la aplicación servidor. 50 4.5 Cuadro de dialogo que permite exponer una clase al público. 51 4.6 Opciones para generar la aplicación EXE o .DLL 52 4.7 Especificar si el servidor creado será de una o varias instancias. 53 7 iv 4.8 Configurar DCOM: opción " propiedades predeterminadas". 55 4.9 Configurar la seguridad de DCOM. 55 4.10 Instrucción para registrar el modulo servidor. 57 4.11 Contenido del proyecto Cliente.pjx. 58 4.12 Formulario forml de la aplicación cliente. 59 4.13 Formulario ftira de la aplicación cliente. 60 4.14 Formulario para el login. 61 4.15 Utileria para configurar DCOM. 62 4.16 Indicar en que equipo se ejecuta el servidor. 63 Tablas Descripción No. tabla Página 1 Primera parte de la cabecera de una Tabla.DBF 31 2 Identificador del tipo de Tabla 31 3 Segunda parte de la cabecera de una tabla.DBF 34 v Resumen: Se llevó a cabo una investigación aplicada, mediante el diseño y desarrollo de una aplicación Cliente/Servidor de 2 niveles, empleando la tecnología DCOM y el lenguaje Visual Fox Pro ver 6.0 para gestionar datos en archivos tipo .DBF localizados en un servidor bajo el sistema operativo Netware 4.11 de Novell. Las terminales clientes utilizan los sistemas operativos Windows 9.x. y están enlazadas en una LAN (red de área local) utilizando Ethernet. Se logró un menor tiempo promedio de respuesta respecto al tiempo requerido por un proceso remoto de arquitectura servidor de archivos, así como gestión concurrente, desde estaciones conectadas a la red empleando la aplicación desarrollada con la tecnología COM/DCOM, de los archivos ubicados en el servidor Netware 4.11 por un número de usuarios mayor al máximo permitido por la correspondiente licencia de Novell. Abstract: An applied aplication was performed, thru the design and development of a Middle tier Client/Server application, using DCOM technology and Visual Fox Pro version 6 language in order to process data contained in .DBF tables located in a file server running under Netware 4.11 by Novell. The client workstations run under the Windows 9.x operating system and are connected in an Ethernet LAN. A lower processing mean time was obtained in comparation to the required time using remote processing under a filer server architecture, as well as the concurrent procesing, by connected workstation to the net, of files located in the Netwar 4.11 serve r by a larger number of users than alloewed by the Novell licenced. vi INTRODUCCIÓN Las cond iciones económicas en las que se encuentra nuestro país, y que, según declaraciones de las autoridades hacendarias, se prolongará como resultado de las condiciones prevalecientes en los mercados internacionales, conlleva a las empresas públicas o privadas, particularmente a la pequeña o micro empresa, a reducir o cancelar los presupuestos disponibles para actualizar su infraestructura informática. Debido a las dificultades económicas imperantes, es común la necesidad de encontrar una solución de bajo costo que, coexistiendo con los procedimientos y equipos existentes, permita a la empresa enfrentar con éxito los problemas derivados del crecimiento en el volumen de datos a procesar o la mejora en la calidad o expansión de los servicios ofrecidos a sus clientes o usuarios. La Comisión de Agua Potable, Drenaje y Alcantarillado de Manzanillo, (CAPDAM), no escapa a la crisis referida y carece de los recursos financieros necesarios para la adquisición de equipo de cómputo o sistemas actuales, por lo que se ve forzada a operar con una infraestructura basada en equipos personales con procesadores que van del 386 al Pentium II, los cuales funcionan empleando los sistemas operativos MS- DOS, Win9x y Netware 4.11 en el servidor de archivos de la red local a la que están conectados. Los datos se almacenan en archivos tipo .DBF con índices IDX que son gestionados desde programas elaborados en CLIPPER. Una tecnología que permite la construcción de aplicaciones y sistemas bajo la arquitectura Cliente/Servidor, a partir de componentes producidos por diversos proveedores, es la arquitectura de software por componentes de Microsoft denominada COM (Modelo de Objetos Componentes), la cual permite la comunicación entre objetos ubicados en la misma computadora (Williams, 1996). La evolución de COM es DCOM, la cual extiende la comunicación entre objetos ubicados en diferentes computadoras (las cuales pueden estar ubicadas en una LAN, una WAN o incluso Internet), permitiendo distribuir las aplicaciones de la manera que tenga más 1 sentido para el usuario. Diseñar aplicaciones para ser distribuidas le da una gran flexibilidad al administrador del sistema, ya que, además de ser más fáciles de escalar, permite distribuir la carga de procesamiento al ejecutarse algunos módulos en equipos de bajo use (Microsoft Corporation, 1996). La industria de cómputo enfocada a Internet ha empezado a orientarse a dos campos tecnológicos (o plataformas de desarrollo); uno centrado alrededor de COMIDCOM/COM+, Internet Explorer y las capacidades de ActiveX de Microsoft, y el otro campo basado en las soluciones proporcionadas por CORBA, Netscape y Java. Ambas partes argumentan acerca de los meritos relativos a sus enfoques, pero actualmente no se tiene un claro ganador. Afortunadamente, ambos campos están trabajando en mecanismos que permiten la interacción entre ambas bases tecnológicas. Por lo tanto, se tiene soporte en CORBA para COM/DCOM/COM+ y Microsoft ha incorporado Java en su estrategia para Internet. Sin embargo, el trabajo para la interconexión entre ambos campos competitivos aun no esta completa. Existe una gran cantidad de aplicaciones basadas en las PC que toman ventaja de la tecnología COM y DCOM de Microsoft (por ejemplo Excell, Word, Power Point, etc.). COM+ es mas reciente que COM, fue anunciado el 23 de Septiembre de 1997 y embarcado con Windows 2000 (llamado también Windows NT versión 5.0). COM+ puede considerarse como la siguiente versión de COM (Williams, 1996). Debido a que la CAPDAM tiene sus recursos informáticos actualmente basados en la plataforma Microsoft y disponen de equipos con Windows 95 y Windows 98 (estos con modem interno y procesador P11), los cuales tienen disponible sin costo adicional la tecnología COM/DCOM, se empleara este enfoque para desarrollar la solución al problema propuesto. Además, se puede emplear Visual Fox Pro versión 6 para construir la solución Cliente/Servidor en esta plataforma, dado que es un recurso con el que se cuenta. 2 La tecnología Cliente/Servidor ha demostrado ser la más eficiente en los sistemas administrativos de alto desempeño, brindando: velocidad, integridad, seguridad y versatilidad (Microsoft Corporation, 1997; Hostmann 1997). Siendo estas las hipótesis sobre las que descanso el desarrollo de esta investigación. El presente trabajo aplica la metodología de la investigación aplicada y también de la investigación documental. Durante el desarrollo fue patente la escasez de información respecto a la arquitectura COM/DCOM tanto en el idioma español como en ingles, lo cual se puede palpar en la falta de referencias bibliográficas al respecto en las bibliotecas y librerías de nuestra Universidad y el Estado, por lo que fue necesario recurrir a una intensiva búsqueda de documentación en Internet, presentando hache una síntesis que podrá facilitar la incursión en este campo de mas interesados en este tema. La utilización de la arquitectura COM/DCOM para el desarrollo de componentes reutilizables y el empleo de la tecnología Cliente/Servidor para el desarrollo de aplicaciones en redes (ya sean LAN, WAN o Internet) empleadas para resolver el problema aquí planteado es la punta de lanza en la utilización de nuevas tecnologías. El trabajo esta organizado de la siguiente manera: el capítulos I presenta el marco teórico en el cual se encuadra y comprende la arquitectura Cliente/Servidor; en el capitulo II se revisan los principales aspectos técnicos de la tecnología COM/DCOM; en el capitulo III se detalla la estructura de los archivos tipo DBF; en el capitulo IV se plantea el problema, análisis, diseño y desarrollo de la solución; finalmente, se plasman las conclusiones y sugerencias. Con este proyecto se obtiene un prototipo que incorpora las nuevas tecnologías y herramientas de información (COM/DCOM/COM+) en el desarrollo de aplicaciones distribuidas para aplicarse a técnicas de acceso a bases de datos, búsquedas y recuperación de la información. Lo cual puede potenciar el use de estas para el desarrollo de aplicaciones para el procesamiento de Bases de Datos con una mayor eficiencia de desarrollo de software que puede ser reutilizado por cualquier aplicación que requiera su servicio y, con esto, redundar en una reducción de tiempos y costos de 3 producción, lo cual puede beneficiar enormemente tanto al sector empresarial como a nuestra Universidad. Se considera que el lector tiene conocimientos básicos de los conceptos de Redes LAN, WAN e Internet; conoce el modelo OSI y maneja con fluidez el lenguaje Visual Fox Pro versión 6, la teoría de Bases de Datos y los sistemas operativos Windows 95 y Windows 98, además de estar familiarizado con la programación de Objetos (POO.) 4 CAPÍ TULO I MARCO TEÓRICO Es importante conocer que y como evolucionaron los conceptos básicos sobre los que se desarrollo el presente trabajo, estos son: • Arquitectura Cliente/Servidor. • Arquitectura de software de 2 niveles (Middletier o Two Tier). • Ambiente de Cómputo Distribuido (Distributed Computing Enviroment o DCE) • Interface para Programación de Aplicaciones (Application Programming Interface o API). • Llamada a Procedimientos Remotos (Remote Procedure Call o RPC). • COM/DCOM/COM+ : el Modelo de Objetos Componentes (Component Object Model o COM), Modelo de Objetos Componentes Distribuido (Distributed Component Object Model o DCOM) y Modelo de Objetos Componentes Mejorado ( COM+). A continuación se presenta un resumen para cada uno de los anteriores conceptos. La fuente fue tomada de The Software Engineering Institute (SEI), el cual es un centro federal para la investigación y desarrollo patrocinado por el Departamento de Defensa de los Estados Unidos y operado por la Universidad Carnegie Mellon (http://www.sei.cmu.edu/str/descriptions/dce body.html ). 1.- Arquitectura de Software Cliente /Servidor (Darleen,2000). El termino Cliente/Servidor se utilizo por primera vez en los 1980's en referencia a computadoras personales (PC's) en una red. El modelo actual Cliente/Servidor empezó a ganar aceptación a finales de los 1980's. La arquitectura de software Cliente/Servidor es una infraestructura modular versátil, basada en mensajes, que esta dirigida a incrementar la usabilidad, flexibilidad, interoperatibidad y escalabilidad en comparación con la arquitectura Mainframe que funciona de manera centralizada y compartiendo el tiempo de cómputo ("time sharing computing"). 5 Un Cliente está definido como un solicitante de servicios y un Servidor esta definido como el proveedor de servicios. Una máquina puede ser, a la vez, cliente y servidor, dependiendo de la configuración del software. Son ejemplos de la arquitectura Cliente/Servidor: Arquitectura de software de 2 niveles (two tier o Middletier), arquitectura de software de 3 niveles (threee tier), arquitectura empresarial Distribuida/Colaborativa. Se tienen otros tipos de arquitectura, que no son Cliente/Servidor, estos son: a).-Arquitectura Mainframe Con la arquitectura de software Mainframe, toda la inteligencia está en la computadora central que funciona como Servidor (ver fig. 1.1). Los usuarios interactúan con el Servidor a través de una terminal que captura lo tecleado y envía esa información al Servidor. La arquitectura de software Mainframe no esta atada a una plataforma de hardware. La interacción del usuario puede hacerse usando estaciones PC's y UNIX. Una limitación del software de arquitectura Mainframe es que no soportan fácilmente interfaces gráficas para el usuario o accesar múltiples bases de datos desde lugares dispersos geográficamente. En los últimos anos, los Mainframes han encontrado un nuevo use como servidores en una arquitectura distribuida Cliente/Servidor. Fig. 1.1 Arquitectura Mainframe o Centralizada. 6 b).- Arquitectura de Archivo Compartido (File Sharing Arquitecture) Las redes de PC's se basaron en la Arquitectura de Archivo Compartido, donde el Servidor descarga archivos desde las localidades compartidas al ambiente de escritorio. La arquitectura de Archivo Compartido es funcional si el use concurrente es bajo. En los 1990's, el cómputo en las redes de área local cambió debido a que la capacidad para compartir archivos fue comprometida a medida que el número de usuarios en línea creció (puede satisfacer cerca de 12 usuarios simultáneamente) y las interfaces gráficas para usuarios (GUI's) se volvieron populares (haciendo que el desplegado en las pantallas de terminales y mainframes pareciera obsoleto). El sistema operativo Netware versión 4.11 de Novell opera bajo este principio cuando se instala como servidor de archivos. En la figura 1.2 se ilustra esta arquitectura. 2.- Arquitectura de software de 2 Niveles o Middletier (Bray,2001). Esta arquitectura se desarrolló en los 1980's a partir del diseño de la arquitectura de Servidor de Archivos. La arquitectura de 2 niveles intenta incrementar la usabilidad al soportar interfaces amigables basadas en formatos, incrementa la escalabilidad al acomodar hasta 100 usuarios (la arquitectura de servidor de archivos solamente acomoda una docena de usuarios) y mejora la flexibilidad al permitir compartir los datos, usualmente dentro de un 7 ambiente homogéneo. La arquitectura de 2 niveles requiere de una mínima intervención del operador y se utiliza con frecuencia en sistemas de procesamiento que gestionan información que no sea compleja y tampoco crítica en el tiempo. La arquitectura de 2 niveles consiste de tres componentes distribuidos en 2 capas: Cliente (solicitante de servicios) y Servidor (proveedor de servicios). Los tres componentes son: • Interface del Sistema para el usuario.- tales como sesión, captura de texto, diálogo y desplegado de los servicios de administración. • Administración del Procesamiento .- ejemplos de esto es desarrollo, monitoreo y recursos para servicios de procesos. • Administración de Base de Datos.- servicios de datos y archivos. El diseño de 2 niveles provee la interface del sistema para el usuario exclusivamente al cliente. Este ubica la administración de la base de dates en el servidor y divide la administración del procesamiento entre el cliente y el servidor, creando 2 capas como se muestra en la figura 1.3: En general, el cliente de la interface del sistema para el usuario invoca servicios desde el servidor de administración de bases de datos. En muchos diseños de 2 niveles, la mayor parte de la porción de procesamiento de la aplicación está en el ambiente del Cliente. El 8 servidor de administración de bases de datos usualmente proporciona la parte del procesamiento relativo al acceso a datos. (a menudo implementado en procedimientos almacenados). Los clientes se comunican con el servidor a través de instrucciones SQL o una interface de llamada de nivel (en el programa implementado no se usan instrucciones SQL). Nótese que la conectividad entre niveles puede cambiarse dinámicamente dependiendo de los requerimientos del usuario de datos y servicios. Comparándola con la arquitectura de servidor de archivos (que también soporta sistemas distribuidos), la arquitectura de 2 niveles mejora la flexibilidad y escalabilidad al alojar los 2 niveles sobre la red de computadoras. Los 2 niveles aumentan la usabilidad (comparado con la arquitectura de Servidor de Archivos) debido a que facilita proporcionar una interface de usuario del sistema adecuada. Es posible que un servidor funcione como cliente para un servidor diferente - en una arquitectura jerárquica Cliente/Servidor-. Esto es conocido como diseño encadenado de arquitectura de 2 niveles. La arquitectura de 2 niveles trabaja bien en ambientes relativamente homogéneos con reglas de negocios que no cambien con frecuencia y que los grupos de trabajo se considere sean menores a 100 usuarios. 3.- Ambiente de Có mputo Distribuido o DCE (Vondrak, 2001). Desarrollado y soportado por la Open System Foundation (OSF), el Ambiente de Cómputo Distribuido (DCE) es un ambiente integrado distribuido que incorpora tecnología de la industria. La DCE es un conjunto de servicios integrados de sistemas que proporcionan un ambiente distribuido interoperable y flexible cuyo principal propósito es resolver problemas de interoperabilidad en ambientes heterogéneos de redes. La OSF proporciona una referencia para la implementación (código fuente) en la cual se basan todos los productos DCE. La DCE son servicios portables y flexibles - la implementación de la referencia es independiente tanto de las redes como de los sistemas operativos y proporciona una arquitectura en la cual las nuevas tecnologías puedes ser incluidas, lo cual facilita las futuras mejoras. El intento de la DCE es que la implementación de la referencia incluirá tecnología madura y probada que pueda ser utilizada en partes- o como una infraestructura integrada completa. 9 La infraestructura DCE soporta la construcción e integración de aplicaciones Cliente/Servidor a la vez que procura ocultar la complejidad inherente al procesamiento distribuido al usuario. La OSF DCE intenta formar una plataforma de software comprensible sobre la cual las distribuciones distribuidas puedan construirse, ejecutarse y darles mantenimiento. En la figura 1.4 se muestra la arquitectura DCE Fig. 1.4 Esquema de aplicaciones distribuidas. Los servicios DCE están organizados en dos categorías: • Servicios Distribuidos Fundamentales que proporcionan herramientas para el desarrollador de software para crear los servicios para el usuario final necesarias para el cómputo distribuido. Estos incluyen: • RPC o Llamadas a Procesos Remotos (Remote Procedure Call), las cuales proporcionan portabilidad, independencia de la red y aplicaciones distribuidas seguras. • Servicios de Directorio, los cuales proporcionan total soporte al protocolo X.500 y un modelo simple para nombrar que permite a los programadores identificar y accesar los recursos distribuidos más fácilmente. 10 • Servicios de tiempo, los cuales proporcionan a la red los servicios de autenticación, autorización y administración de cuentas de usuarios para mantener la integridad, privacidad y autenticidad para los sistemas distribuidos. • Servicios de Seguridad, los cuales proporcionan un modelo de programación simple y portable para construir aplicaciones concurrentes. • Los Servicios para compartir datos proporcionan a los usuarios finales las capacidades construidas sobre los servicios fundamentales distribuidos. Estos servicios no requieren programación de parte de los usuarios finales y facilitan un mejor use de la información. Estos servicios incluyen: • Sistema de Archivos Distribuido, el cual interopera con el sistema de archivos de la red para proporcionar un acceso al sistema de archivos de alto desempeño, escalable y seguro. • Soporte no dependiente de discos, el cual permite a estaciones de trabajo de bajo costo usar los discos de los servidores, posiblemente reduciendo la necesidad o costos de discos locales y proporcionando un desempeño mejorado que reduce la sobrecarga en la red. La DCE soporta los estándares de la International Open System Interconnect (OSI), los cuales son críticos para la interconectividad global. También implementa los estándares ISO tales como CCITT X.500, Remote Operations Service Element (ROSE), Association Control Service Element (ACSE) y los servicios de sesión y presentación ISO. La DCE también soporta estándares de Internet tales como los protocolos de transporte y red de TCP/IP, así como el Domain Name System (DNS) y Network Time Protocol proporcionados por Internet. La DCE puede ser utilizada por vendedores de sistemas, desarrolladores de software y usuarios finales. Puede ser utilizada en cualquier hardware de red y software de la capa Trasporte, incluyendo TCP/IP, OSI y X.25. La DCE esta escrita en C estándar y utiliza servicios estándar de interfaces de sistemas operativos, tales como POSIX y referencias X/Open. Esto hace que DCE sea portable a una amplia variedad de plataformas. DCE permitela extensión de redes a un gran número de nodos, proporcionando un ambiente capaz de soportar redes de númerosas computadoras de 11 bajo costo (tales como equipos PC's o Macintosh), lo cual es importante si se desea el procesamiento distribuido y el empleo de equipos de bajo perfil. Debido a que DCE es proporcionado en su forma fuente, este puede ser rastreado para aplicaciones específicas si así se desea. DCE trabaja internamente con el modelo Cliente/Servidor y esta perfectamente adaptado para el desarrollo de aplicaciones que son estructuradas de acuerdo a este modelo. La mayor parte de los servicios DCE están especialmente optimizados para estructurar los sistemas de cómputo distribuido en una "celda" (un conjunto de nodos/plataformas) que es administrado junto con una autoridad. Para DCE, la comunicación entre "celdas" esta optimizada y relativamente segura y transparente. La comunicación entre "celdas", sin embargo, requiere más procesamiento especializado y más complejidad que su contraparte entre celdas, además de un mayor grado de experiencia en programación. Cuando se usan los servicios de hilos (trheads) proporcionados por DCE, los programadores de aplicaciones deberán estar concientes de la sincronización de hilos y datos compartidos a través de la red. En tanto que diferentes hilos son mutuamente asíncronos hasta un número estático definido en la inicialización, un hilo individual es tratado sincrónicamente. La complejidad de la programación de hilos deberá considerarse si se van a utilizar estos servicios. A principios de 1992, la OSF liberó el código fuente para DCE 1.0. Aproximadamente 12 vendedores han transferido esta versión a sus sistemas y tuvieron los productos DCE 1.0 disponibles a partir de Enero de 1993. La mayor parte de estos productos fueron estuches para el desarrollo que no fueron robustos y no contenían el conjunto total de características DCE todas carecieron de los servicios de archivos distribuidos), y fueron adecuadas principalmente para plataformas UNIX. DCE 1.2.1, liberado en Marzo de 1996, proporciono las siguientes características: • Soporte para la definición de inteface de lenguaje (Interface Definition languague o IDL) para C++ para incluir características tales como herencia y referencia a objetos como soporte para aplicaciones orientadas a objetos. Estas características 12 soportaron la adopción de cualquier modelo de objetos o jerarquía de clases, proporcionando por lo tanto a los programadores con una flexibilidad adicional. • Características para proporcionar la coexistencia con otros ambientes de aplicació n. • Mejoras sobre DCE 1.1 incluyendo realce para alcanzar una mayor confiabilidad y mejor desempeño. Se consideran otros enfoques para soportar objetos además del descrito para DCE 1.2, estos son: • Instalar un producto basado en CORBA sobre DCE para proporcionar soporte adicional para tecnología de objetos distribuidos y una amplia gama de servicios de interface estandarizados. • Integrar redes COM/DCOM dentro de la infraestructura DCE. 4.- Interface para Programación de Aplicaciones o API (Bray, 2000). La Interface para Programación de Aplicaciones (Application Programming Interface o API), es una vieja tecnología que facilita el intercambio de mensajes o datos entre dos o más aplicaciones diferentes de software. API es la interface virtual entre dos funciones de software de red, tales como procesadores de palabra y hojas de cálculo. Esta tecnología se ha expandido desde simples llamadas a subrutinas hasta incluir características que proporcionan interoperatividad y modificabilidad de sistemas para soportar los requerimientos para compartir datos entre múltiples aplicaciones. Una API es el software que se usa para soportar la integració n a nivel del sistema para múltiples paquetes de productos comerciales o nuevos productos desarrollados para aplicaciones existentes o nuevas. Las API's también son un tipo de arquitectura de dos niveles (Middleware) que posibilita el compartir datos a través diferentes plataformas; esta es una característica importante cuando se desarrolla o actualizan sistemas distribuidos nuevos o ya existentes. Esta tecnología es una forma de alcanzar el objetivo de los sistemas abiertos y estándares: la consistencia total entre plataformas. 13 API es un conjunto de reglas para escribir llamadas a funciones o subrutinas que accesen funciones en una librería. Los programas que usan estas reglas o funciones en sus llamadas API se pueden comunicar con cualquier otro que use API, sin importar las especificaciones de esos otros. API trabaja con un amplio espectro de diálogos de aplicaciones (es decir: esquemas de comunicación entre programas) para facilitar el intercambio de información. Los cuales incluyen: acceso a bases de datos, Cliente/Servidor, punto a punto, tiempo real y procesamiento de transacciones. API combina la recuperación de errores, traducción de datos, seguridad, colas (queuing) y designación con una interface fácil de aprender que comprende comandos/acciones simples pero poderosas. Para invocar una API, un programa llama a una función tipo SEND (enviar), especificando como parámetros el nombre del destino, apuntadores (pointers) a los datos y regresar opciones de confirmación. La API toma los datos y efectúa el trabajo de todas las comunicaciones de manera transparente para la aplicación. Hay cuatro tipos de API's que habilitan el compartir datos entre diferentes aplicaciones de software sobre plataformas distribuidas o únicas. • Remote Procedure Calls (RPCs) • Standard Query Language (SQL) • Transferencia de Archivos • Entrega de Mensajes (message delivery) Al usar RPC, los programas se comunican mediante procedimientos (o tareas) que actúan sobre buffers de datos compartidos. SQL es un lenguaje para acceso a datos que permite compartir los datos entre aplicaciones mediante el acceso a una base de datos común. Los estándares actúales que aplican API incluyen el ANSI estándar SQL API. La Transferencia de Archivos permite el compartir datos mediante el envió archivos formateados entre aplicaciones. 14 Entrega de Mensajes proporciona el compartir datos mediante la comunicación directa entre programas por medio de pequeños mensajes formateados entre aplicaciones estrecha o fuertemente acopladas. Las API's pueden ser desarrolladas para todas las plataformas de cómputo y sistemas operativos o adquirirse para la mayoría de las plataformas y sistemas operativos. Los cuatro tipos de API's pueden ser usadas tanto en aplicaciones multiplataformas o homogéneas. Sin embargo debido a la complejidad adicional requerida para compartir datos a través de múltiples plataformas, Las API's RPC, SQL o Transferencia de Datos son preferiblemente utilizadas para facilitar la comunicación entre diferentes aplicaciones sobre sistemas de plataformas homogéneas. Estas API's comunican datos en diferentes formatos (es decir: buffers de datos compartidos, estructuras de bases de datos y constructores de archivos). Cada formato de datos requiere comandos de red y parámetros diferentes para comunicar los datos adecuadamente y pueden causar diferentes tipos de errores, por lo que cada aplicación debe proporcionar comunicaciones entre programas robustas. Una API para Entrega de Mensajes ofrece un pequeño subconjunto de comandos, parámetros de red y condiciones de red debido a que estas API tratan solo con una clase de formato (mensaje). Debido a su reducida complejidad, las API para Entrega de Mensajes son una mejor opción cuando las aplicaciones requieren compartir datos a través de múltiples plataformas. 15 5.- Llamada a Procedimientos Remotos o RPC Esta es una infraestructura Cliente/Servidor que ha incrementado la interoperabilidad, portabilidad y flexibilidad de una aplicación, al permitir a esta que este distribuida sobre múltiples plataformas heterogéneas. Reduce la complejidad del desarrollo de aplicaciones que se expanden a múltiples sistemas operativos y protocolos de red al aislar el desarrollo de la aplicación de los detalles de los diversos sistemas operativos e interfaces de red - las llamadas de funciones son la interfaz de los programadores cuando utilizan RPC. El concepto de RPC ha sido discutido en la literatura desde 1976, apareciendo su completa implementación a fines de 1970 y principio de los 1980s. Para poder accesar la porción remota de una aplicación Servidor, las llamadas especiales de funciones, RPC, están imbuidas dentro de la porción Cliente de un programa de aplicación Cliente/Servidor. Debido a que están imbuidas, RPC no esta aislado como una capa discreta de 2 niveles (middleware). Cuando el programa Cliente es compilado, el compilador crea un enlace (stub) para la porción Cliente u otro enlace (stub) para la porción Servidor de la aplicación. Estos enlaces son invocados cuando la aplicación requiere una función remota y típicamente soporta llamadas asíncronas entre Clientes y Servidores. Estas relaciones se muestran en la figura 1.5. 16 Al usar RPC, la complejidad involucrada en el desarrollo de procesamiento distribuido se reduce a conservar igual la semántica de una llamada remota estén o no colocados el Cliente y el Servidor en el mismo sistema. Sin embargo, RPC incrementa el involucramiento del desarrollador de una aplicación con la complejidad de la naturaleza maestro- esclavo del mecanismo Cliente/Servidor. RPC incrementa la flexibilidad de una arquitectura al permitir a un componente Cliente de una aplicación, emplear una llamada a función para accesar el Servidor en un sistema remoto. RPC permite al componente remoto ser accesado sin conocimiento de la dirección de la red o cualquier otra información de bajo nivel. La mayor parte de RPC's usan un protocolo síncrono, petición- respuesta (algunas veces referido como "llama/espera") que involucra el bloqueo del Cliente hasta que el Servidor complementa la solicitud. Implementaciones asíncronas ("llama/espera") están disponibles pero actualmente son la excepción. RPC esta implementado típicamente en una de 2 formas: • dentro de un producto propietario • por un programador utilizando una herramienta propia para crear enlaces RPC para aplicaciones Cliente/Servidor RPC es apropiado para aplicaciones Cliente/Servidor en los cuales el cliente puede enviar una petición y esperar por la respuesta del Servidor antes de continuar su propio procesamiento Otras tecnologías que permiten la distribución de procesos a través de múltiples procesadores y plataformas son: • Object Request Brokers (ORB) • Distributed Computing Enviroment (DCE) • COM/DCOM • Arquitectura de Software de 3 niveles (Tree Tier Software Arquitecture) 17 6.- COM/DCOM/COM+ (Mueller J.P, 2000, pp 5-22; Williams,1996) El Modelo de Objetos Componentes (COM) es una arquitectura de software por componentes que permite construir aplicaciones y sistemas a partir de componentes proporcionados por diferentes proveedores de software. COM proporciona la arquitectura subyacente que forma las bases para servicios de software de alto nivel, como los proporcionados por OLE. Estos servicios proporcionan diversas funcionalidades al usuario, sin embargo, comparten un requerimiento fundamental de un mecanismo que permita a los componentes binarios de software, proporcionados por diferentes vendedores, la conexión y comunicación entre sí de una manera bien definida. Este mecanismo esta proporcionado por COM, una arquitectura de software por componentes que: • Define un estándar binario para la interoperabilidad de componentes. • s independiente del lenguaje de programación utilizado. Se proporciona en múltiples plataformas (Microsoft Windows, Windows NT/2000, Apple Macintosh, Unix). • Permite la evolución robusta de aplicaciones y sistemas basados en componentes. • Es extensible. Adicionalmente, COM proporciona mecanismos para lo siguiente: • Comunicación entre componentes, aun a través de procesos y fronteras de red. • Administración de memoria compartida entre componentes. • Reporte de Errores y Estado. • Carga dinámica de componentes. La historia de COM inicia a finales de 1989 y principios de 1990 cuando aparece por primera vez DDE (Dynamic Data Exchange), cuyo propósito era crear un macro lenguaje común para aplicaciones que permitiera a 2 documentos compartir los mismos datos. Los programas con capacidad DDE pueden intercambiar información al tiempo de ejecución, intercambiando texto, imágenes e incluso algunos comandos simples. En 1991, se creó OLE (Object Linking and Embedding) que permitió el control tanto de la aplicación como de los datos de la aplicación. OLE versión 1 formó parte de Windows 3.x y rápidamente fue sobrepasado por los requerimientos de los usuarios, entre sus mayores 18 problemas estaba la gran cantidad de memoria que necesitaba y baja velocidad de procesamiento. En 1995 se liberó OLE versión 2, llamada COM, el cual proporciona un mecanismo de propósito general para la integración de componentes en las plataformas de Windows. En Diciembre de 1995, OLE evoluciona en ActiveX, que es otro término para una específica clase de tecnología por componentes que se basaba en COM, entre otras cosas. En la figura 1.6 se muestra un ejemplo de COM Aún cuando en la primera versión de COM se incluían algunas nociones de componentes distribuidos, el soporte más completo para la distribución de objetos a escala empresarial, fué disponible en 1996 con DCOM, el cual esta basado en la OSF (Open Software Foundation), DCE (Distributed Computing Enviroment), el protocolo de red RPC (Remote Procedure Call). DCOM permite a las aplicaciones comunicarse a través de la red en formas que los usuarios de DDE, OLE y COM desearon. Las ligas que crea DCOM son, razonablemente seguras y permanentes. Si se remueve el componente del lado del Servidor, el cliente no lo encontrará por más que lo intente. Esto significa que tanto el Cliente como el Servidor deberán existir al mismo tiempo y tener una conexión entre si. En la figura 1.7 se ilustra DCOM. 19 La arquitectura DCOM (Distributed Component Object Model) es una extensión de COM que permite la comunicación entre objetos situados en diferentes máquinas a través de distintos tipos de redes (LAN, WAN e incluso Internet). Al ser DCOM una evolución natural de COM es posible utilizar todas aquellas aplicaciones, componentes, herramientas y conocimiento previos para trabajar ahora en un entorno distribuido. DCOM pretende solucionar los problemas más comunes que surgen en un entorno de trabajo distribuido: • Fiabilidad ante posibles fallos en la red. • Fiabilidad ante posibles fallos en el hardware. • Eficiencia en términos de carga de la red. • Posibilidad de trabajar con maquinas de diferentes prestaciones situadas en distintas áreas geográficas. • Posibilidad de instalación tanto en grupos de trabajo pequeños como grandes. COM+ es la más reciente de las versiones de COM, fue anunciado el 23 de Septiembre de 1997 y embarcado con Windows 2000 (Windows NT 5.0). 20 CAPÍTULO II ASPECTOS TÉCNICOS DE DCOM En este capítulo se resume el contenido del artículo "DCOM a Technical Overview" (Microsoft Corporation, 1996), en el cual se detallan las características técnicas de la arquitectura de software DCOM (Distributed Component Object Model), la cual permite la comunicación directa entre componentes de software ubicados en diferentes computadoras en una red (local, amplia o Internet) de manera confiable, segura y eficiente. Con DCOM, la aplicación puede distribuirse a la ubicación que tenga más sentido para el usuario y el administrador de sistemas. 2.1 Introducción Las necesidades de interoperabilidad que presentan los actuales sistemas de información han motivado el desarrollo de estándares que normalizan la comunicación y el traspaso de objetos entre aplicaciones. La tecnología OLE (Object Linking and Embedding) de Microsoft representó un primer paso en esta línea de acción. Con este sistema se proporcionan herramientas como el portapapeles, la vinculación e incrustación de objetos y su almacenamiento estructurado, además de interfaces que posibilitan su inclusión y reutilización en aplicaciones diversas. OLE es sustentado por la arquitectura COM (Component Object Model), que le suministra los mecanismos de coordinación y comunicación entre compone ntes. Dado que COM se desarrolló en un primer momento para su utilización en un sistema aislado, Microsoft extendió el estándar para que pudiera ser utilizado en entornos distribuidos, con lo que dio lugar a la especificación DCOM (Distributed Component Object Model). 2.2 Arquitectura DCOM En los sistemas operativos en los cuales los procesos están aislados unos de otros. Un cliente que necesite comunicarse con un componente de otro proceso no puede realizar una llamada directa, sino que tiene que hacer use de algún tipo de comunicación entre procesos proporcionada por el sistema operativo. COM/DCOM permite establecer esta 21 comunicación de una manera completamente transparente interceptando la llamada del cliente y dirigiéndola a un componente en otro proceso (fig.2.1). Cuando cliente y componente residen en diferentes máquinas (fig. 2.2), DCOM simplemente sustituye la comunicación entre procesos por un protocolo de red , de modo que ninguno de los dos advierte este cambio. COM proporciona servicios orientados a objetos a clientes y componentes, y utiliza DCE RPC (Remote Procedure Call) y varios sistemas de seguridad (Security Providers) para generar paquetes de red. DCE RPC, del que DCOM toma el concepto de GUID (Globally Unique Identifier), define un estándar para la conversión de parámetros y estructuras de datos almacenadas en memoria para formar paquetes de red. Su formato de representación de datos NDR (Network Data Representation) es independiente de la plataforma. Fig 2.2 DCOM: componentes COM en diferentes equipos. 22 DCOM proporciona un tipo de comunicación Cliente/Servidor. Para solicitar un servicio, el cliente invoca un método implementado en un objeto remoto, que actúa como servidor en dicho modelo. Este servicio se encapsula como un objeto, y su interfaz se describe en un lenguaje específico, IDL (Interface Definition Language), manteniéndose oculta al cliente la implementación real del objeto. DCOM tiene la posibilidad de que un objeto tenga múltiples interfaces. DCOM emplea comunicaciones de tipo RPC para llevar a cabo las relaciones entre cliente y servidor. En el protocolo RPC para invocar a una función, el cliente hace una llamada al stub del cliente. El stub empaqueta los parámetros en un mensaje de petición y se lo pasa al protocolo de comunicación para que lo lleve al servidor. Aquí, el protocolo de comunicación entrega el mensaje al stub del servidor, que desempaque ta los datos y llama a la función requerida. En DCOM, al stub (ver RPC en capítulo I) del cliente se le conoce como proxy y al del servidor como stub. DCOM puede asociar varias interfaces a una misma clase. El código de DCOM pasa por un compilador de DL para generar el código del stub/proxy y la cabecera de la interfaz que usarán tanto el servidor como el cliente. En DCOM, cada interfaz lleva asociada un GUID o identificador único global, llamado interface ID (IID). Del mismo modo, a cada clase se le asigna un único identificador Class ID (CLSID). Por otro lado, cada interfaz COM debe heredar propiedades de la interfaz Iunknown, que consta de un método llamado Querylnterface() para navegar entre diferentes interfaces del mismo objeto, y otros dos métodos AddRef() y Release() para contar las referencias. Así, un objeto COM lleva cuenta de sus clientes, y puede descargarse a sí mismo cuando no se le necesita. Después de compilar y antes de ser ejecutado, DCOM requiere un proceso de registro para el servidor. La asociació n entre el CLSID y la localizació n del ejecutable se guarda en el registro de Windows. Además, como la interfaz del proxy/stub es también un objeto COM, necesita ser registrada de la misma manera. 23 2.2.2 Capa Intermedia. Arquitectura de Proceso Remoto Esta capa contiene la infraestructura necesaria para ofrecer al cliente y al servidor la ilusión de encontrarse en el mismo espacio de direcciones. DCOM emplea el registro de Windows para registrar los objetos servidores. En cuanto a la creación de objetos, DCOM crea un stub después de llamar a Createlnstance(). Para enviar datos a través de distintos espacios de direcciones se emplea un proceso denominado marshaling. Este proceso empaqueta los parámetros de la llamada y devuelve un valor en el servidor en un formato de transmisión estándar, como una RPC normal. La operación contraria se conoce como unmarshaling, y convierte los datos entrantes del formato estándar al propio del espacio de memoria destino. DCOM también proporciona un mecanismo para hacer este proceso según la definición del usuario. Este procedimiento, denominado custom marshaling, puede emplearse para soportar infraestructuras de comunicación específicas de la aplicación. 2.2.3 Capa Inferior: Arquitectura del Protocolo de Comunicación Esta capa especifica el protocolo para soportar la comunicación entre clientes y servidores. El protocolo empleado en DCOM se basa principalmente en la especificación OSF DCE RPC con algunas extensiones, como ya se ha comentado en capítulos anteriores de este documento. 2.3 Independencia de localización Al implementar una aplicación distribuida real sobre una red pueden aparecer una serie de restricciones al diseño: • Algunos componentes sólo pueden ser ejecutados en algunas máquinas o en determinadas localizaciones. 24 • Los componentes que interactúan más a menudo deberían estar situados "más cerca". • Muchos componentes pequeños incrementan la flexibilidad del diseñó, pero generan mayor tráfico en la red. • Pocos componentes grandes reducen el tráfico en la red pero también la flexibilidad del diseño. Con DCOM es fácil evitar estas restricciones, ya que oculta la localización de los componentes, y la forma en la que el cliente se conecta a ellos y realiza una llamada a sus funciones es siempre la misma. DCOM no sólo no requiere cambios en los programas fuente, sino que tampoco es necesario recompilarlos, porque la reconfiguració n cambia la forma en que los componentes se conectan entre ellos. Esto simplifica en gran medida la tarea de distribuir los diferentes componentes de la aplicación con el fin de optimizar el rendimiento. En la figura 2.3 se muestra como un mismo componente puede situarse en la máquina del cliente cuando existe suficiente capacidad en la red o en el servidor cuando el cliente accede a la aplicación a través de un enlace lento. Fig. 2.3 Independencia de la localización 2.4 Facilidad de crecimiento (scalability) Un factor crítico de las aplicaciones distribuidas es su capacidad de adaptarse al aumento del número de usuarios, volumen de datos o funcionalidades requeridas. La aplicación 25 debería ser pequeña y rápida cuando la demanda es baja, pero también ser capaz de de atender una demanda creciente manteniendo un rendimiento y una fiabilidad aceptables. DCOM proporciona algunos elementos que facilitan la capacidad de crecimiento de las aplicacio nes. 2.4.1 Multiproceso simétrico. DCOM aprovecha la capacidad de proceso de Windows NT. En aquellas aplicaciones que utilizan un modelo de hebras libres (free-threads), DCOM usa un banco de hebras (thread pool) para las peticiones que llegan al sistema. En máquinas con varios procesadores, este banco de hebras se optimiza en función del número de procesadores disponibles: demasiadas hebras suponen cambios de contexto frecuentes, mientras que pocas hebras pueden desaprovechar la capacidad de algunos procesadores que quedarían inactivos. DCOM libera al diseñador de los detalles del manejo de hebras, consiguiendo un rendimiento que sólo podría obtener programando todo el proceso manualmente. 2.4.2 Desarrollo flexible. En ocasiones no es posible atender a una demanda creciente ni siquiera aumentando la velocidad que proporciona una máquina multiprocesador. La independencia de la localización de DCOM facilita la labor de distribuir componentes entre diversas máquinas, ofreciendo un modo más sencillo y barato de aumentar la capacidad de las aplicaciones. La redistribución es más sencilla cuando los componentes son "sin estado" (stateless) o no comparten su estado con otros componentes, ya que en este caso es posible ejecutar varias copias en diferentes máquinas. La demanda puede ser distribuida de forma uniforme entre todas las máquinas o de acuerdo a criterios como capacidad y carga (fig. 2.4). Cambiar la forma en la que los clientes se conectan a los componentes y éstos últimos entre si es fácil con DCOM, porque permite, sin necesidad de añadir código o recompilar, la redistribución dinámica de los componentes. Sólo es necesario actualizar el registro, archivo del sistema, o base de datos en la cual se almacena la situación de cada componente en un momento determinado. 26 Figura 2.4. Distribución paralela de componentes. Muchas aplicaciones reales tienen uno o mas componentes críticos (bottleneck components) que son utilizados en la mayor parte de las operaciones. Pueden ser, por ejemplo, componentes de bases de datos a los que hay que acceder en serie de modo FCFS (first come-first served). No es posible duplicar este tipo de componentes, ya que su finalidad es precisamente establecer un punto único de sincronización para todos los usuarios de la aplicación. Con el objetivo de mejorar el rendimiento de una aplicación distribuida estos componentes críticos deberían ejecutarse en un servidor dedicado de gran potencia y altas prestaciones. De nuevo DCOM ayuda a aislar estos componentes críticos en las fases iniciales del proceso de diseño, colocando inicialmente todos ellos en una misma máquina para más tarde situar los componentes críticos en máquinas dedicadas. Los componentes críticos suelen formar parte de una cadena de procesos, por ejemplo, órdenes de compra o venta en un sistema de venta electrónico : los pedidos deben ser procesados conforme se van recibiendo y en ese orden (FCFS). Una posible solución sería dividir el trabajo en componentes más pequeños y ejecutar cada uno de ellos en una máquina diferente (fig. 2.5). El efecto sería similar al que se consigue con la técnica del pipelining en los microprocesadores modernos: cuando llega la primera petición es procesada por el primer componente (que podría ser, por ejemplo, una comprobación de la corrección semántica de la orden) y en caso de que sea válida pasa 27 al siguiente (para realizar, por ejemplo, una actualización de la base de datos). Tan pronto como el primer componente mande al segundo la petición, quedará libre para procesar nuevas entradas y de esta forma tendremos dos máquinas trabajando en paralelo entre dos peticiones diferentes, a la vez que garantizamos que éstas son procesadas en el orden adecuado. Con DCOM es posible aplicar esta misma técnica cuando trabajamos en una sola máquina, ya que podemos ejecutar varios componentes en diferentes hebras o en diferentes procesos, facilitando además el crecimiento de nuestra aplicación mediante la distribución de las hebras en una máquina multiproceso o de los procesos en diferentes máquinas. 2.5 Control de la conexión Las conexiones a través de la red son más delicadas que las conexiones dentro de una máquina, por esta razón es necesario, que los componentes de una aplicación distribuida sean avisados cuando un cliente deja de estar activo o cuando se produce un fallo en la red o en el hardware. DCOM controla las conexiones entre componentes que están dedicados a un solo cliente así como las de aquellos que están compartidos por varios clientes. Cuando un cliente establece una conexión con un cliente el contador de referencias se incrementa en una unidad, decrementandose cuando el componente libera la conexión. En caso de que el contador sea cero el componente puede liberar la memoria que ocupa. 28 DCOM utiliza un protocolo de ping en el cual el cliente envía de forma periódica un mensaje para comprobar que los componentes permanecen activos (fig. 2.6). Si transcurren más de tres periodos sin que el componente reciba estos mensajes DCOM considera rota la conexión y procederá a decrementar el contador de referencias, liberando el componente si el contador llega a cero. Desde el punto de vista del componente, el proceso es el mismo independientemente de que sea el cliente el que se desconecte por sí mismo o de que se produzca un fallo en la red o en la máquina cliente. Todo este mecanismo de liberación de memoria por parte de componentes no utilizados es transparente a las aplicaciones clientes. 1.6 Ancho de banda y retardo Aunque en teoría DCOM oculta el hecho de que en las aplicaciones distribuidas los componentes se ejecutan en diferentes máquinas, en la práctica es necesario considerar las limitaciones de una conexión a través de una red: Ancho de banda: el tamaño de los parámetros en una llamada a una función afecta directamente al tiempo necesario para completar esa llamada. Retardo: La distancia física y el número de elementos de la red, tales como routers o enlaces, introducen un retardo que puede llegar a ser significativo. En el caso de una red 29 global como Internet los retardos pueden ser del orden de segundos. DCOM consigue superar estas limitaciones minimizando cuando sea posible el número de saltos en la red para evitar retardos. El protocolo de transporte más usado por DCOM es el protocolo no orientado a conexión UDP, lo que permite una mayor optimización mezclando paquetes de asentimiento con datos y mensajes ping. Incluso en el caso de que DCOM emplee protocolos orientados a conexión se consigue una significativa mejora con respecto a protocolos desarrollados específicamente para cada aplicación. 2.7 Seguridad Al utilizar una red de comunicaciones para distribuir una aplicación no sólo nos encontramos con limitaciones físicas, ancho de banda y retardo, sino también con problemas de seguridad entre clientes y componentes. Al ser las funciones accesibles físicamente por cualquiera con acceso a la red, es necesario establecer restricciones en un nivel superior. DCOM implementa su propio sistema de seguridad con el fin de evitar que cada aplicación se vea obligada a desarrollar el suyo de manera independiente. Una plataforma distribuida como DCOM debe facilitar un entorno seguro que permita distinguir entre clientes y grupos de clientes de modo que el sistema o la aplicación pueda conocer quién intenta acceder a determinados servicios de un componente. DCOM utiliza el sistema de seguridad de Windows NT que consiste en una serie de security providers basados e métodos tradicionales tales como dominios o claves públicas en sistemas no centralizados. Una de las partes fundamentales de este sistema de seguridad es el directorio de usuarios que almacena la información necesaria para comprobar las credenciales de éstos. DCOM proporciona seguridad a las aplicaciones distribuidas sin necesidad de incluir en el cliente o en el componente elementos de codificación o diseño específicos. Al igual que ocurría con la localización de los componentes DCOM también oculta sus necesidades de seguridad. El mismo código ejecutable en un entorno centralizado, con 30 una sola máquina, donde la seguridad no plantea ningún problema puede ser utilizado en un entorno distribuido de manera segura. El diseñador simplemente tiene que fijar los requisitos de seguridad de cada componente, indicando que usuarios tienen derecho de acceso a sus servicios. En el que caso de que el diseñador se desentienda de los aspectos de seguridad, DCOM proporciona un mecanismo de seguridad por defecto bastante eficiente. 2.7.1 Seguridad en Internet Existen dos problemas de seguridad fundamentales a la hora de utilizar aplicaciónes diseñadas para trabajar en Internet. •El número de usuarios puede ser varios ordenes de magnitud superior al existente en una compañía. •Los usuarios finales desearían poder usar la misma slave o password para todas las aplicacio nes que utilizan, aunque sean distribuidas por diferentes compañías. Sin embargo, la aplicación o el sistema de seguridad del proveedor de los servicios puede no tener capacidad para almacenar las slaves privadas de todos los posibles usuarios. •Las aplicaciones distribuidas que utilizan la arquitectura DCOM pueden aprovechar los sistemas de seguridad que ésta proporciona sin necesidad de introducir ningún cambio en dichas aplicaciones, incluso en las más sensibles a los problemas de seguridad. •DCOM hace use de los sistemas de seguridad (security providers) que proporciona el entorno Windows NT: •Protocolo de autentificación NTLM, empleado por la versión 4.0 y anteriores de Windows NT. •Protocolo de autentificación Kerberos Versión 5, que sustituye a NTLM para el acceso a recursos dentro o entre dominios de Windows NT. •Protocolo de autentificación distribuido DPA (Distributed Password Autenticación), empleado por algunas de las principales organizaciones de Internet, como CompuServe o Microsoft Network. •Servicios de seguridad por canales seguros, que implementan los protocolos SSL/PCT en Windows NT 4.0. •Sistema de seguridad que utiliza DCE como entidad expendedora de claves sobre Windows NT. 31 Todos estos sistemas de seguridad utilizan protocolos estándar de Internet y tienen diferentes ventajas e inconvenientes. Los protocolos NTLM y Kerberos son protocolos de clave privada, son extremadamente eficientes y seguros en entornos centralizados o en dominios basados en servidores Windows NT. Existen versione s comerciales de NTLM para la mayor parte de los entornos UNIX. Con el sistema de directorios de Windows NT 4.0, dominios controlados por varios servidores de claves pueden tener un buen comportamiento hasta aproximadamente 100.000 usuarios. Con el sistema ampliado de directorios de Windows NT 5.0 un solo servidor de claves en un dominio Windows NT puede llegar a administrar hasta un millón de usuarios. Combinando varios servidores de claves en el árbol de directorios de Windows NT 5.0, el número de usuarios en un sólo dominio es prácticamente ilimitado. El sistema Kerberos sobre Windows NT 5.0 proporciona elementos de seguridad más avanzados como controlar qué pueden hacer los componentes mientras autentifica a los clientes, además de requerir menos recursos que NTLM. Microsoft planea incluir en el futuro sistemas de seguridad basados en claves públicas para Windows NT, que permitirá descentralizar el control de la seguridad para cualquier aplicación de Windows NT, incluyendo aquellas basadas en DCOM. La autentificación mediante claves públicas es menos eficiente que usando claves privadas, pero no requiere almacenar las credenciales privadas de los clientes. 2.8 Rendimiento y prestaciones Como hemos visto hasta ahora la arquitectura DCOM ofrece herramientas que proporcionan flexibilidad tanto para la integración de componentes COM ya desarrollados, como para la utilización de diferentes lenguajes de programación, además de permitir el crecimiento de las aplicaciónes. Sin embargo, podemos preguntarnos cómo afectan estas características al rendimiento de la arquitectura. En COM/DCOM el cliente nunca tiene acceso a la implementación del objeto servidor, lo que se consigue, en la mayor parte de los casos, sin tener que utilizar componentes intermedios. Esta transparencia de acceso se obtiene 32 mediante un mecanismo de comunicación entre componentes a través de llamadas a función mediante punteros. La única sobrecarga que introduce este método frente a los utilizados en otros lenguajes de programación es la búsqueda de la dirección de función en las tablas virtuales (vtables). 33 CAPÍTULO III ARCHIVOS TIPO.DBF Desde su nacimiento con dBASE de Ashton- Tate en los 1980's, la utilización de los archivos de datos tipo DBF han sido utilizados extensamente, posibilitando una gran cantidad de aplicaciones desarrolladas para la micro, pequeña y mediana industria que contaban con equipos PC compatibles. Las aplicaciones para gestionar este tipo de archivos son varias, empezando con la familia de productos dBASE, Fox y Clipper en la plataforma de MS-DOS, hasta las diferentes versiones de Visual Objects y Visual Fox Pro en la plataforma Windows. Actualmente, la literatura relativa a bases de datos les da la denominación de Tablas, misma que se empleará en el presente trabajo (Kroenke,1996,pp 13-25), La importancia de este tipo de archivos o tablas, esta patentizada por los servicios de compatibilidad que ofrecen los nuevos productos manejadores de bases de datos (DBMS) y gestores de Información geográfica (GIS) para manejar, importar o convertirlos a los nuevos tipos de tablas. Este tipo de tablas esta compuesto por dos partes claramente diferenciables: La cabecera y los registros de datos (Martínez,1999). 3.1.- La cabecera de la tabla DBF De la misma forma que las tablas DBF se componen de cabecera y registros de datos, la cabecera también se compone de dos partes:. a).- Primera parte de la cabecera. La primera parte tiene 32 bytes de longitud. La estructura tiene la forma que se detalla en la Tabla 1 que se muestra a continuación: No. Byte Descripción/Contenido I Identificador del tipo de la tabla 2-4 Fecha de la última modificación 5-8 Número de registros de la tabla 34 9-10 Donde inician los registros de datos 11-12 Longitud del registro 13-28 Sin uso 29 Indica si tiene componentes de indizado 30 Indica el número de página de la tabla 31-32 Sin uso Tabla 1. – Primera parte de la cabecera de una tabla DBF Donde: •El identificador del tipo de archivo (byte 1), puede ser (Bazian, 2000,pag 135): Valor Descripción 0x02 FoxBaseOx30 FoxPro, FoxBASE+, dBASEIII PLUS, dBASE IV (sin memo) 0x30 Visual Fox Pro 0x43 Archivo de tabla SQL de dBASE IV sin memo 0x63 Archivo de sistema SQL de dBASE IV sin memo 0x83 FoxBASE+, dBASE III PLUS (con memo) Ox8B dBASE IV (con memo) OxCB Archivo de tabla ASQL de dBASE IV con memo OxF5 FoxPro 2.x (o anterior) (con memo) OxFB FoxBASE Tabla 2.- Identificador del tipo de Tabla. - Si se tiene un campo memo definido en el primer byte aparecerá F5h. - Si no contiene ningún campo memo será 03h. Si el valor contenido en este primer byte es distinto, se considera que el archivo no es una tabla DBF. •La última fecha de modificación (byte 2-4), se guardará en hexadecimal ocupando los bytes2, 3 y 4 correspondiente al ano, mes y día, respectivamente. •El número de registros (byte 5-8), de la base de datos incluye el número de los registros de la tabla. Los bytes utilizados - del 5 al 8 - están dispuestos en orden inverso de tal 35 manera que el byte menos significativo es el primero de la izquierda. Por ejemplo: 0B 2A 01 00, corresponde al número 00/01 /2A/0B en hexadecimal. Puede ser que si se usa la función RECCOUNT() para contar el número de registros que contiene el archivo, el número que nos de no coincida con este número exacto y es que esta instrucción contabiliza también aquellos registros marcados para ser borrados. Sólo cuando se haya realizado el correspondiente borrado físico (PACK) el resultado de la función RECCOUNT() será correcto. La dirección donde comienza (byte 9-10), el primer registro de datos ocupan los bytes 9 y 10. Al igual que el anterior, los bytes están en orden inverso siendo 42(byte 9) 1B(byte 10) igual a la dirección 1 B42 en hexadecimal. A partir de la dirección indicada por dichos bytes comenzara los registros de datos. *La longitud de un registro (byte 11- 12), es la suma de las longitudes de cada uno de los campos. Este ocupa 2 bytes. *Flag de componente de indexación(índices) nos indicará la presencia de un componente de índice estructural (CDX). Si por alguna causa el archivo de índices es borrado por medio de un comando DOS como por ejemplo DEL o ERASE, se recibirá el siguiente mensaje: STRUCTURAL CDX FILE NOT FOUND El número de página ( byte 30), con el que ha sido creado el DBF. El número total de valores de códigos de página que puede soportar son 19, sin embargo los valores más comunes que este byte contiene son los señalados en la tabla siguiente Los bytes sobrantes, que no son usados , suelen rellenarse con el carácter 0 o nulo. 3.2).-Segunda parte de la cabecera. La segunda parte de la cabecera depende del número de campos del que se componga el registro. Por cada una de los campos utiliza 32 bytes organizados e la siguiente manera: 36 Valor del Byte Descripción / Contenido 30 “00” No tiene código de página. Este valor lo tienen las tablas creadas con FoxPro hasta la versión 2.5 “01 ” DBF creada desde DOS. Código de página 437 “02” IBF creada desde DOS Internacional. Código de página 850 “03” 19 BF creada desde Windows. Código de página 1252 No. De Byte Descripción /Autocontenido 1-11 Nombre del Campo 12 Tipo del Campo 13-14 Dirección donde comienza el campo desde el principio del registro 15-16 Sin use 17-18 Longitud del campo (campos no numéricos) 17 Longitud del campo (campos numéricos) 18 Campos decimates (campos numéricos) 19-32 Sin use Tabla 3 Segunda parte de la cabecera de una tabla .DBF El nombre del campo en FoxPro está limitado a 10 caracteres, el último carácter (el más a la derecha) debe ser nulo (0). Si el no mbre del campo es inferior a 10 caracteres, el primer carácter de la derecha será 0 o nulo. Pueden existir, en principio, 5 tipos de campos definidos en el byte 12 con un carácter ASCII de la siguiente forma: Valores de Tipos de Campos Tipo Carácter ASCII Valor Valor Hexadecimal Decimal Character (Carácter) C 67 43 Date (fecha) Logical (lógico) Memo Numeric (Numérico) D L M N 68 76 77 78 44 4C 4D 4E 37 Flota (coma flotante) F 70 46 General G 71 47 La dirección donde comienza el campo (bytes 13 y 14) nos indica la posición de comienzo del campo relativo al principio del registro. La longitud de los campos depende del tipo de dato que vayamos a definir. Para los campos de caracteres utiliza los bytes 17 y 18 para insertar el tamaño, eso sí, en formato invertido. Para los campos tipo Fecha, Memo, General y Lógico solo necesita el primer byte para definir sus tamaños: • 8 para el campo Fecha. • 10 para el campo Memo. • 10 para el campo General. • 1 para el campo Ló gico. Por último, para los campos numéricos el primer byte especifica el total de número de dígitos, y el segundo el número de posiciones decimales. Los bytes restantes no son utilizados, y su valor suele ser rellenado a nulo (0). FoxPro no es capaz de controlar el número de definiciones de campos que se han realizado en la cabecera. Hay tres formas/maneras de determinar cuando hemos leído todos los campos: 1.- La suma de todos los tamaños. El último campo ha sido leído cuando el total es igual a la longitud contada en la cabecera menos 1 para el flag de borrado. 2.- Buscar el carácter 0Dh (13 decimal) como el primer carácter después de de la definición de un campo. Esto separa la cabecera del principio de los datos. Tendremos que tener en cuenta el 38 byte extra cuando determinemos la longitud de una cabecera del DBF. 3.- Por último, contar el total de bytes y comparar con el valor del comienzo de los datos del archivo contenidos en los bytes 9 y 10 de la primera parte de la cabecera. 3.3.-Datos de la Tabla. Los datos comienzan inmediatamente después del byte de terminación de la cabecera. El primer byte de cada registro está en la bandera de borrado. Si la bandera de borrado contiene 20h, el registro es activo. Si por el contrario su valor es 2Ah, significa que ese registro ha sido marcado para ser borrado. El siguiente byte es el primer byte del primer campo. No existen separaciones entre los campos, no es necesario. La sección de definición del registro de cada campo ya especifica la longitud y la posición. Los campos de tipo carácter son fáciles de leer. Cada byte, es añadido de izquierda a derecha, añadiendo un carácter. Determinar el contenido de un campo, es solo cuestión de convertir el valor hexadecimal en su correspondiente valor ASCII. Los campos de tipo fecha también son fáciles de interpretar. Cada campo ocupa 8 bytes. Los cuatro primeros son los relativos al año, los dos siguientes al mes y los dos últimos al día. Los bytes son dígitos ASCII del 30 al 39 hex que se corresponden con el 0 al 9 decimal. Al 1 de Enero de 1995 le corresponderían los siguientes valores: AAAAMMDD ---------Formato 31 39 39 35 30 31 30 31 --------Valor Hex. 19950101 --------Valor Dec. Los campos de tipo lógico usan los caracteres ASCII F y T, que traducidos a valores hexadecimales se corresponden con el 46h para el valor lógico falso(F) y 54h para el 39 valor verdadero(T). Los campos memo, como comentábamos antes, usan 10 bytes en cada registro. Si el campo resulta estar vacío, este se rellena con el carácter 20h (espacios en blanco). Si el campo memo no está vacío, los caracteres ASCII definen su posició n (en bloques de 64 bytes) en el archivo .FPT. Por ejemplo, si tenemos los 10 bytes con los siguientes valores: 20 20 20 20 20 20 20 20 31 35 (Valores hex.) traducido a decimal 15 Los datos del campo memo comienzan después del décimo quinto bloque de 64 bytes del archivo FPT. Los campos numéricos en FoxPro son interpretados como números ASCII individuales. Define el número de dígitos por la estructura de la base de datos. Supongamos que definimos un campo numérico de seis caracteres con tres decimales. El número 22,324 estaría de la siguiente manera:, 32 32 2C 33 32 34 Hex. 22,3 2 4 Dec. La coma decimal corresponde con el valor hexadecimal 2Ch. Si el número no ocupase las seis posiciones se toman los siguientes criterios: - Si el espacio es por la izquierda se rellenará con un espacio en blanco (20h). - Si el espacio no utilizado es por la derecha se pondrá un cero (30h). Después del último registro, FoxPro añade un carácter de final de archivo (lAh). Este byte se crea cuando se determina la longitud del archivo DBF. Tener en cuenta que es diferente al carácter de final de cabecera (0Dh). 3.4.-Interfaces para control de archivos tipo DBF 40 Tan importante como los archivos de datos lo son los archivos de índices. Estos permiten el rápido acceso y búsqueda de la información conforme a las necesidades de la aplicación. Debido a la diversidad de proveedores de productos para la gestión de archivos del tipo DBF, se tienen diferentes manejadores (drivers) con los cuales se pueden accesar y manipular las bases de datos. RDD es la abreviación para Replaceable Database Driver, cuyo objeto es dar acceso a la base de datos, archivos tipo memo y el formato de archivos de índices para diversos productos de software para el manejo de bases de datos (Data Base Manager System o DBMS), lo cual se logra mediante el enlace (linking) el RDD adecuado para la aplicación. Entre los más populares están (Computer Associates,1992): 3.4.1.- Manejador para archivos tipo DBF e índices compatibles con FoxPro. Este manejador (driver) es compatible. con FoxPro, como tal, conecta con el subsistema de administración de la base de datos a un bajo nivel. Su empleo permite las siguientes características: Ø Compatibilidad con el formato de archivos de FoxPro. Ø Manejo de índices compactos (tipo .IDX), los cuales almacenan los datos Have en un formato comprimido, lo que resulta en una reducción sustancial del tamaño del archivo de índices. Ø Manejo de índices compuestos (tipo .CDX). Este es un archivo de índices que contiene múltiples índices (llamados tags), los cuales están disponibles para la aplicación usando únicamente un manejador de archivos ale handle) y que se actualizan automáticamente a medida que Gambian los registros de datos (records) Ø Índices condicionales. En estos la condición puede ser cualquier expresión, incluyendo 41 una función definida por el usuario. A medida que se actualizan los registros de datos, solo aquellos que cumplen con la condición establecida son agregados o actualizados en el índice. 3.4.2.- Manejador para archivos tipo.DBF e índices compatibles con dBASE IV. Este manejador proporciona compatibilidad, incluyendo acceso, a archivos de formato .dbf, .mdx y .dbt, así como esquemas para la protecció n de archivos y registros de datos, permitiendo el acceso compartido entre programas CA-Clipper y dBASE IV. 3.4.3.- Manejador para archivos tipo DBF e índices compatibles con dBASE III PLUS. Este manejador permite crear, accesar y actualizar archivos de índices .ndx compatibles con dBASE III y dBASE III PLUS. 3.4.4.- Manejador para archivos tipo .DBF e índices compatibles con Clipper. Los índices con formato de archivo tipo .NTX, son los que de manera predeterminada utiliza el lenguaje Clipper. Para mayor detalle, se recomienda la consulta del apéndice contenido en el Manual del Programador contenida en la "Documentación de Visual FoxPro" incluida con el Lenguaje Visual FoxPro versión 6. 42 CAPÍTULO IV PLANTEAMIENTO DEL PROBLEMA Y DESARROLLO DE LA SOLUCIÓN Conocer el problema, las condiciones, limitaciones y recursos existentes o disponible son requisito indispensable para plantear la propuesta de solución mas adecuada. Por lo anterior, se presentan dichas circunstancias, así como el análisis y la síntesis, plasmada en los programas desarrollados. 4.1.- Problemática existente. La CAPDAM necesitaba mejorar el servicio de recepción de pagos en 3 localidades donde tiene instaladas cajas (sucursales de CAPDAM en las cuales se puede recibir el pago de los servicios que proporciona el organismo) ubicadas fuera del edificio de sus oficinas centrales. La figura 4.1 muestra el esquema de la red Ethernet con una arquitectura Servidor de Archivos, bajo el sistema operativo Netware 4.11. Las estaciones Cliente deben enviar el requerimiento al Servidor de Archivos y esperar a que este les envíe todos los registros (records) para que sean procesados por la aplicación ubicada en ellas. 43 El tiempo promedio necesario para que el operador recibiera en pantalla el total del adeudo del usuario de los servicios de CAPDAM era de 2.5 minutos, dándose el caso de usuarios que, al acudir a pagan hasta 8 recibos, les implicaba un tiempo superior a 15 minutos para realizar el proceso, lo cual generaba quejas al respecto. Los datos del sistema comercial (con el cual se lleva el control de los cargos, abonos y servicios a los usuarios de CAPDAM), están almacenados en tablas tipo DBF y son gestionados con programas realizados con el lenguaje CLIPPER versión 5.2 y empleando índices IDX. Las Tablas para Cargos (todo cargo que aplica CAPDAM a los usuarios) y la de Abonos (todo abono a cada cargo que realiza el usuario) contienen más de 2.5 millones de registros cada una y se tienen más de 32,000 usuarios registrados, por lo que la base de datos contiene más de 5 millones de registros, de los cuales se seleccionarán los del usuario que se presenta a pagar. El acceso a los datos se realiza tanto local (dentro de la LAN) como remotamente (mediante la conexión vía módem) mediante CONNECT versión 1.1 de Novell, el cual estaba instalado en el Servidor de Archivos. Esto implica dividir la capacidad del procesador entre procesos de comunicación y de servidor de archivos. 4.1.1.- Consideraciones y limitaciones para la elaboración del proyecto. Debido a la falta de recursos económicos y a la dinámica existente en CAPDAM, se detectaron las siguientes limitaciones: • La solución debía implementarse sin disponer de recursos económicos para adquirir software o hardware, esto es, sólo con los recursos informáticos existentes y sin el tiempo o recursos humanos para rediseñar todo e l sistema y aplicar otro tipo de soluciones (por ejemplo migrar la información a MySQL y utilizar PHP para una aplicació n Cliente/Servidor de 3 niveles). • La operación de los módulos no relacionados con la recepción de pagos y elaborados con el lenguaje CLIPPER versión 5.2 deberá continuar sin interrupción, debido a que en las 44 oficinas centrales se utilizan equipos PC con procesador 386 sin disco duro, con sistema operativo MS-DOS y enlace a NET WARE 4.11. • Para la capacitación a operadores, se debe considerar que su grado máximo de estudios es primaria, y es personal sindicalizado. Los recursos existentes y aprovechables para el proyecto se describen a continuación: • 12 computadoras Compaq con procesador AMD 400 Mhz, Windows 98, módem interno de 56Kb y tarjeta de red a 10 Mb (ubicada en las oficinas centrales). • 2 computadoras Acer con procesador Pentium a 100 Mhz, Windows 95 (ubicadas en las sucursales de Santiago y Cárcamo) • 1 computadora Acer con procesador 486 a 100 Mhz, Windows 95 (ubicada en a sucursal Salahua). • 4 computadoras Acer con procesador 386, MS-DOS y sin disco duro (ubicadas en caja de las oficinas centrales) • 1 módem Hayes extern a 9600 bps (ubicado en el servidor de oficinas centrales). • 1 módem Smart Módem a 14,000 bps (ubicado en la sucursal de Salahua). • 3 miniprinter Epson TM-375 U seriales y 2 Epson TM-270 (ubicadas en cajas). • Computadora Compaq con procesador Pill a 750 Mhz, Netware 4.11 y tarjeta de red a 10 Mb (ubicado como servidor de archivos en las oficinas centrales). • Visual Fox Pro versión 6 en Español. 45 4.2.- Análisis de la problemática. La tecno logía Cliente/Servidor ha demostrado ser la más eficiente en los sistemas administrativos de alto desempeño, brindando: velocidad, integridad, seguridad y versatilidad (versatilidad (Microsoft Corporation, 1997; Hostmann 1997). Debido a que la CAPDAM tiene sus recursos informáticos actualmente basados en la plataforma Novell y Microsoft y disponen de equipos con Windows 95 y Windows 98 (estos con módem interno y procesador Pentium II), los cuales tienen disponible sin costo adicional la tecnología COM/DCOM, se empleará este enfoque para desarrollar la solución al problema propuesto. Además, se puede emplear Visual Fox Pro versión 6 para construir el Cliente y el Servidor en esta plataforma, dado que es un recurso con el que se cuenta. Dadas las características de la problemática planteada y los recursos existentes, es adecuada una solución Cliente/Servidor de 2 niveles (Middletier), colocando el módulo Cliente en el equipo del cajero y el módulo Servidor en una computadora que este conectada a la red local en la oficina centra y que tenga acceso la base de datos ubicada en el servidor de archivos operando con Netware 4.11. La figura 4.2 ilustra la disposición de la solución propuesta. En esta, el módulo Cliente se encargará de la interface del sistema y el procesamiento relativo a la impresión y certificación del pago principalmente (un nivel o capa) y, por el otro lado, la aplicación Servidor (el segundo nivel o capa) llevará a cabo la gestión de la base de datos, localizando al usuario de CAPDAM, calculando el saldo y enviando éstos datos al módulo Cliente. El mecanismo utilizado para la comunicación entre niveles (capas) es DCOM, el cual pasa datos en ambas direcciones entre la aplicación o módulo Cliente interfaz y la aplicación del lado del Servidor. 46 Fig. 4.2 Esquema de la solución propuesta. Como se observa, se tendrá una red operando concurrentemente bajo las arquitecturas "Servidor de Archivos" para los equipos en oficinas centrales y "Cliente/Servidor de 2 niveles" para la operación de las cajas remotas. 4.3.- Diseño del Módulo Servidor. El propósito consiste en crear un programa genérico que utilicen los cajeros (Clientes) para poblar las tablas de la aplicación del lado del Servidor (en este caso, tablas tipo DBF con archivos índice.IDX). El primer paso consiste en diseñar la solución a este propósito como si se estuviera 47 usando Visual FoxPro versión 6 en una aplicación de un solo nivel (Menhaen,2000, pp 724-746). En este caso, el diseño consiste en crear una sola clase con propiedades que corresponda con los campos de la tabla de transacciones de los pagos recibidos. Un método abrirá las tablas, otro buscara los datos en las tablas de usuarios, cargos y convenios; otro método guardara los datos del pago en la tabla correspondiente. 4.3.1.- Las Tablas. Se necesitan principalmente 4 tablas de la base de datos conformada por tablas tipo DBF existentes para llevar a cabo el proceso de las cajas. Estas corresponden a los datos de: Usuarios, Cargos, Convenios y Pagos. En el anexo F se detalla la estructura de éstas tablas. La tabla de Usuarios, denominada CA_ TOMAS, contiene los datos que identifican al usuario de los servicios de CAPDAM. La tabla de Cargos, denominada CARGOS, contiene los datos que identifican cada uno de los cargos que se le aplic a a cada usuario por los servicios recibidos de CAPDAM. La tabla de Convenios, denominada CONVENIOS, contiene los datos correspondientes a cada convenio que se ha celebrado con los usuarios de CAPDAM que solicitaron facilidades para cubrir sus adeudos. La tabla en que se almacenan lo s pagos recibidos durante el día se almacenan en la tabla denominada ABONAR, identificando que usuario lo realiza, importe y las condiciones del mismo. 4.3.2.- El código. El módulo Servidor esta contenido en una aplicación en el proyecto denominado Tstclase.pjx, la cual consta de un programa progrl.prg y una clase pública nominada frmusu, almacenada en la librería de clases llamada clasesmam.vcx, en la que se llevará a cabo toda la inteligencia de la aplicación Servidor (ver fig.4.3). 48 Fig. 4.3 Contenido del Proyecto de la aplicació n Servidor. En el Anexo A se muestra el código de la clase frmusu tal como se obtuvo del Examinador de Clases (Class Browser). El código anterior se percibe en pantalla como se ilustra en la figura 4.4, en la cual se puede apreciar con claridad los objetos cuadro de texto (textbox)que reciben como valor el resultado del procesamiento de las tablas y que serán utilizados por la aplicación Cliente. Los métodos (procedimientos) implementados en esta clase son: • Abretabla.- Inicializa las tablas a utilizar, así como sus índices. 49 Fig. 4.4 Clase principal de la aplicación Servidor. • Buscar.- Recibe de la aplicación Cliente el número de cuenta para efectuar la búsqueda de los datos en las tablas necesarias. • grabap.- Graba el pago en la tabla correspondiente, recibe el importe y tipo desde la aplicación Cliente. • Leetira.- Asigna los valores de los campos de la tabla de pagos para dejarlos disponibles a la aplicación Cliente. • tira.- Localiza en la tabla de Pagos los movimientos registrados en una fecha determinada. 50 • unomas.- Brinca al siguiente registro. Para indicar que la clase creada es del tipo Público o Privado, se deberá seguir el siguiente proceso: • Entrar a la modificación de la clase. • Desplegar el cuadro de dialogo Información de clase, (seleccionar en la barra superior: clase: Información de clase ), como se muestra en la figura 4.5. Fig. 4.5.- Cuadro de dialogo que permite exponer una clase al publico. • Marcar el cuadro de verificación OLE público(OLE public). • Cerrar el cuadro de diá logo. • Guardar la clase. 51 4.3.3.- Creación del Servidor DCOM. El servidor se puede crear de uno de 2 tipos:.DLL o EXE. La diferencia está en si el servidor va ejecutarse como servidor en proceso (inProc) o fuera de proceso (OutProc). Un servidor en proceso es aquél que se ejecuta dentro del mismo espacio de memoria que la aplicación que lo llama y esta implementado como una.DLL Un servidor fuera de proceso se ejecuta en su propio espacio de memoria y se implementa como un archivo.EXE. En este caso, la aplicación se generó como .EXE por dos razones: • Si el Servidor se cae, el programa aún estará protegido. Debido a que el .EXE está en su propio espacio de memoria, no puede corromper la memoria de otras aplicaciónes. • Un.EXE se puede ejecutar de manera remota, lo cual no puede hacerse con un.DLL. 52 La figura siguiente muestra la pantalla respectiva. Fig. 4.6.-Opciones para generar la aplicación como .EXE o .DLL Después de generar el .EXE y registrar el servidor por primera vez, se tiene que especificar si el servidor es de una o varias instancias. Se tienen 3 opciones: • Multiuso (multiple instancing).- Varios Clientes pueden utilizar una sola instancia en ejecución del Servidor. • Uso único (Single instancing).- Cada Cliente tiene su propia copia del Servidor. • No se puede crear (Not creatable).- El Servidor sólo puede emplearse dentro de Visual FoxPro. 53 En la figura siguiente se muestra la pantalla respectiva. Fig. 4.7.- Especificar si el Servidor creado será de una o varias instancias. 4.3.4.- Registro del Servidor DCOM en la computadora destinada. Cuando se genera el .EXE, el proceso de construir el servidor genera los GUIDs y registra el servidor en el Registro de Windows del equipo utilizado para el desarrollo. Para transferir esta aplicación .EXE al equipo que será utilizado como Servidor, se deberá seguir el procedimiento siguiente: 1. Instalar el protocolo TCP/IP (ver anexo B para mayor detalle) 2. Instalació n de DCOM. • Descargar DCOM de la página en Internet de Microsoft, según el sistema operativo del equipo asignado, siguiendo las instrucciones en pantalla : 54 • Para Windows 95 .- http ://microsoft.com/com/dcom/dcom95/download.asp • Para Windows 98.- http://www.microsotft.com/com/dcom98/download.asp • Instalar tanto la aplicación DCOM (dcom98.exe o dcom95.exe) como la utilería para configurar DCOM (dcm95cfg.exe). 3. Configurar la computadora para ejecutar aplicaciones DCOM. • En la opción Inicio (Start) de Windows, seleccionar Ejecutar (Run) y teclear Dcomcnfg, aparecerá en pantalla el cuadro de diá logo de la utilería para configurar DCOM. • En la pestafta Default Properties, seleccionar Enable Distributed COM on this computer, ponga la opción None en Default Authentication Level y active la opción Impersonate en Default Impersonation Level (ver la figura 4.8). Fig. 4.8 Configurar DCOM: opción “propiedades predeterminadas”. 55 • En la pestaña Default Security, seleccionar Enable remote connecction, la figura siguiente ilustra este proceso. Fig. 4.9 Configurar la seguridad de DCOM. 4. Registrar el módulo servidor, denominado tstclase.exe • Copiar a un directorio en el equipo que fungirá como servidor los archivos (por ejemplo: c:\capdam\vfp\prgs \servidor): • tstclase.exe • tstclase.vbr • tstclase.tlb • Verificar que en el directorio c: Iwindowslsystem se encuentren los archivos siguientes: • Vfp6r.dl1 • Vfp6renu.dll 56 • Vfp6resn.dll • Vfprun.exe • Vfp6t.dll • Vfp6t.dll • Cfpodbc.dll • En la opción Inicio (Start), seleccionar Ejecutar (Run) e indicar la ubicación de la aplicación Servidor usando la opción Explorar. Se agrega la instrucción /regserver con to que se instruye al programa para que se registre en el Registro de Windows. Fig. 4.10.- Instrucción para registrar el módulo Servidor Con lo cual, Microsoft asigna un CLSID (Identifcador de clase o GUID o Identificador global único) que identifica a esta clase mediante un número único en el Registro de Windows. 4.4.- Diseño del Modulo Cliente. El propósito de la aplicación Cliente es utilizar el objeto DCOM Servidor generado, para tomar de este los valores correspondientes al saldo que debe pagar el usuario de CAPDAM y enviar la información a grabar en la base de datos. 57 Un objeto DCOM se utiliza de manera similar a cualquier otro objeto. Se utiliza la instrucción CreateObject() para obtener una referencia al objeto, para lo cual es indispensable conocer el nombre de la clase que se instanciará. Una vez obtenido lo anterior, se utilizará el objeto como si estuviera trabajando con una clase local a la aplicación (Menahen,2000, pp. 676-723). La aplicación Cliente está contenida en el proyecto denominado Cliente.pjx. Esta conformada por un programa principal (llamado progrl.prg), desde el cual se crea la instancia la clase del servidor, se ejecuta el formulario login.scx para validar el acceso al use de la aplicación y, si es aceptada la clave proporcionada, ejecutará el menú menul.mnu que da acceso a las acciones básicas del cajero: • Recepción de Pagos.- Contenida en formulario forml.scx, lleva a cabo la gestión de los pagos que realicen los usuarios de CAPDAM, la certificación de recibos y grabado en la base de datos. Lo anterior mediante la gestión de los métodos abretablas, busca y grabs contenidos en la clase tstclase.frmusu ubicada en la aplicación Servidor. • Listado de pagos del día.- Contenido en el formulario ftira.scx, realiza el listado de todo: los pagos recibidos en el día, indicando el total de ingresos, para lo cual se utiliza los, métodos leetira y tira contenidos en la clase tstclase.frmusu ubicada en la aplicación Servidor. 58 La figura 4.11 muestra el proyecto como se aprecia desde Visual FoxPro. 4.4.1.- El Código. Se muestran los formularios generados en esta aplicación: form l.scx, ftira.scx y login.scx. El código para generar cada una de estas se lista en el apéndice C. El formulario form]. scx (fig. 4.12) lleva a cabo la gestión de los pagos. 59 Fig. 4.12 Formulario form1 de la aplicación cliente. El propósito de los componentes es: •Text1 a Text16.- En Text1 se indica el número de cuenta del usuario de CAPDAM, el cual se transmite a la aplicación remota (mediante DCOM). Una vez localizado, los importes correspondientes a los conceptos de adeudo son recibidos desde el módulo Servidor y desplegados en pantalla. •Botón Buscar.- Se envía la instrucción para que la aplicación Servidor reciba el parámetro con el número de cuenta y busque los datos del usuario de CAPDAM. •Check Box Convenio. - Indica si el usuario tiene un convenio vigente registrado. •Grupo de Opciones.- Indicar si el pago que se recibe se aplicará a facturación o Convenios. Se habilita solo si el usuario tiene convenios vigentes registrados. •Botón Grabar Pago.- Se activa cuando el importe del pago es mayor o igual al mínimo exigible conforme a la legislación vigente (la suma de recargos y gastos de cobranza). Se invoca el método grabap para grabar en la base de datos el pago y se ejecutan 60 los procedimientos para imprimir el ticket en la miniprinter en modo journal (queda copia en el rollo de auditoría). •Botón Validar Recibo.- Se activa una vez realizados los procesos anteriores, permite ejecutar el procedimiento para imprimir con la miniprinter en modo de validación (Slip). Para suspender el proceso de pago, se deberá dar click en el campo de texto Text1 antes de activar el botón de pago. En la figura 4.13 se ilustra el formulario ftira.scx, el cual se activará mediante el menú principal para emitir el resumen de los pagos recibidos en el día. Fig. 4.13 Formulario ftira 61 Al activar el botón Imprimir Tira, se ejecutan los procedimientos para imprimir el resumen en la miniprinter en modo journal (queda copia en el rollo de auditoria). El formulario login.scx tiene el propósito de ofrecer un primer nivel de seguridad, negand o el acceso a las opciónes del módulo Cliente que gestionan los pagos. La figura 4.14 muestra este formulario. Fig. 4.14 Formulario para el login. El fin que tiene cada objeto en este formulario se describe a continuación: • txtUserName.- Recibe la slave del cajero, no es sensible a mayúsculas o minúsculas. • txtPassword.- Recibe el código asociado a la clave, si es sensible a mayúsculas o minúsculas. Enmascara los caracteres recibidos para hacerlos invisible a terceros. • Botón Aceptar.- Al activarse, efectúa la búsqueda de los datos proporcionados en el archivo login.dbf, regresando el correspondiente mensaje y permitiendo o no el acceso al resto del módulo. 62 • Botón Cancelar.- Suspende el proceso y cierra aplicación. 4.4.2.- Instalación de la aplicación Visual FoxPro ofrece una utilería que facilita generar la aplicación para su instalación en cualquier equipo (opción Herramientas->Instalación). El procedimiento para efectuar la instalación se describe a continuación: 1. Instalar TCP/IP (ver anexo B). 2. Instalar el enlace telefónico (ver anexo D). 3. Instalar DCOM (ver el punto 4.3.4 inciso 2 de este capítulo). 4. Configurar la computadora para ejecutar aplicaciones DCOM (ver el punto 4.3.4 inciso 3 de este capítulo). 5. Registrar la aplicación Servidor DCOM (ver el punto 4.3.4 inciso 4 de este capítulo). 6. Configurar el direccionamiento a la aplicación Servidor. Debido a que el servidor quedó registrado en el mismo equipo que se ejecutará la aplicación cliente (paso anterior), se deberá redireccionar para que el cliente busque al servidor en el equipo remoto, para esto, ejecutar la utilería dcomcnfg, como se ilustra en la figura 4_15. Fig. 4.15 Utilería para configurar DCOM 63 Tras lo cual aparecerá el cuadro de dialogo de esta utilería. Seleccionar la aplicación servidor y dar click en el cuadro de propiedades, a continuación seleccionar la pestaña correspondiente a location, y activar el cuadro Run aplicattion on the following computer e indicar la IP correspondiente (ver cuadro 4.16). Fig. 4.16 Indicar en que equipo se ejecuta el servidor. Es importante verificar que se deshabilita la opción Run aplication on this computer, inclusive, se puede borrar el ejecutable tstclase.exe de la computadora en la cual reside la aplicación cliente, una vez efectuado lo anterior. 7. Instalar la aplicación Cliente en la computadora de las cajas. Para esto, bastará ejecutar los discos o aplicación obtenida con la utilería de Visual 64 FoxPro para generarla. 4.5 Ejecución de la aplicación Cliente/Servidor. Para que este disponible la aplicación Cliente/Servidor, es necesario ejecutar el procedimiento siguiente: 4.5.1 En el equipo donde se insta1ó la aplicación servidor. • Tener al servidor de acceso telefónico a redes activo y a la espera (ver anexo D). • Abrir una sesión al servidor Netware 4.11 con una clave que proporcione los atributos necesarios. • Tener la aplicación servidor activa, lo cual se logra instalando en el mismo equipo la aplicación servidor y ejecutarla. 4.5.2 En el equipo remoto a utilizar por el cajero. • Efectuar la llamada telefónica para el enlace con la computadora que hospeda la aplicación servidor. • Ejecutar la aplicació n cliente. Una vez establecido el enlace, la aplicación podrá procesar los pagos o consultas que se indiquen. 4.6 Capacitación a Cajeros(as). Con el propósito de que la cajera comparara la aplicación desarrollada utilizando DCOM y Visual FoxPro con la que tenían en use (desarrollada bajo arquitectura servidor de archivos y con el lenguaje Clipper 5.2), se instaló una segunda computadora cerca una de la otra y se genero un directorio de pruebas para 65 consultar y almacenar los movimientos durante la capacitación. Con lo anterior, el instructor operó paralelamente la aplicación cliente y comparaba, conjuntamente con la cajera, las similitudes o diferencias entre ambas aplicaciones. Con esto, se hizo palpable la diferencia en facilidad de use y tiempo de respuesta entre la antigua aplicación y la nueva, motivando con esto la aceptación por parte de la cajera hacia el nuevo sistema. Logrado lo anterior, se pidió a la cajera que utilizara el nuevo programa y lo operara completamente (tomando su lugar el instructor ante el equipo con la aplicación antigua) y lograr con esto se familiarizará rápidamente. Al tercer día, la cajera estaba capacitada para la operación del sistema nuevo. Sin embargo, se les permitió una semana para pruebas. Para medir el tiempo de respuesta entre una y otra aplicación, se tomaba el tiempo necesario para que se desplegara en pantalla el saldo a pagar por el usuario de CAPDAM a partir del instante en que se oprimía la tecla ENTER para alimentar el número de cuenta y el instante en que se desplegaba en pantalla los datos correspondientes. 66 CAPÍTULO V RESULTADOS Y CONCLUSIONES RESULTADOS Para que la aplicación CLIENTE tenga acceso a las tablas tipo .DBF que conforman la base de datos ubicada en el Servidor de Archivos bajo Netware 4.11, es requisito indispensable que en la PC en la cual se tiene el objeto SERVIDOR esté abierta una sesión con acceso a Netware, que el usuario registrado tenga los derechos necesarios para gestionar los archivos en el directorio correspondiente y que se deje abierta la clase SERVIDOR (lo cual se logra ejecutando la misma aplicación CLIENTE o un objeto que abra un hilo hacia la clase base del SERVIDOR). El operador de la aplicación CLIENTE no requiere de una clase de acceso a Netware, ya que empleara la sesión abierta en el equipo donde reside la aplicación SERVIDOR a la que esta dirigido. Los archivos tipo .DBF son gestionados, de manera concurrente, desde las computadoras ubicadas en oficinas centrales con aplicaciones desarrolladas en lenguaje CLIPPER (para sistema operativo MS- DOS) y desde cajas remotas con las aplicaciones CLIENTE y SERVIDOR (para sistema operativo Windows 9x). El tiempo promedio, requerido por la aplicación desarrollada para mostrar el estado de cuenta en las PC remotas, depende de la velocidad a la que se enlacen los módems utilizados (se emplearon líneas telefónicas conmutadas no dedicadas). Se obtuvieron los siguientes: Velocidad del enlace de módems Tiempo Promedio 9600 baudios 48 segundos 33,000 baudios 22 segundos 67 La aplicación desarrollada cumplió con las espectativas de velocidad, integridad, seguridad y versatilidad esperadas para una aplicación basada en la arquitectura Cliente/Servidor de 2 niveles. Se encuestó a las personas que acudieron a pagar a las cajas remotas y el 90% manifestó satisfacción por la mejora en la calidad del servicio recibido. Las aplicaciones existentes creadas bajo, la arquitectura de Archivo Compartido para sistemas operativos MS- DOS y NETWARE 4.11 operan concurrentemente y sin problema con la desarrollada bajo la arquitectura Cliente/Servidor para los sistemas operativos Windows 9x y Netware. Debido a que se emplearon solo recursos existentes, la inversión total fue menor a cualquier otra que hubiere requerido adquisición de hardware o software. La sesión de Netware 4.11 que se abre desde la PC que alojara a la(s) aplicación(es) puede(n) ser utilizada(s) por más de una aplicación cliente (ubicadas en diferentes computadoras), lo que resulta en que una sola sesión a Netware puede ser empleada por más de 1 usuario de manera simultánea. CONCLUSIONES El utilizar la tecnología COM/DCOM efectivamente proporciona lo siguiente: ü Versatilidad.- La aplicación servidor se puede desplegar o distribuir en equipos de bajo costo que están subutilizados por el operador, evitando así el desembolso en la adquisición de computadoras más potentes para funcionar come, servidores. 68 ü Integridad.- Permite la gestión conjunta de aplicaciones desarrolladas en diferentes lenguajes bajo el entorno Windows de Microsoft y operar concurrentemente con aplicaciones desarrollada par la plataforma Novell. ü Bajo costo.- Esta disponible en forma gratuita para operar en la plataforma Windows 9x. ü Velocidad.- La aplicación Cliente/Servidor de 2 niveles es hasta un 375% más rápida que la utilizada anteriormente bajo la arquitectura "Servidor de Archivos" y utilizando el mismo hardware. ü Seguridad.- El contenido de las tablas contenidas en el servidor con Netware no es visible al operador remoto de la aplicación cliente fuera de la aplicación misma, esto es, no pueden desplegar o accesar las tablas o datos ubicados en el servidor de archivos con programas o utilerías diferentes a la diseñada para operar con DCOM, incluso, no requiere tener habilitado el protocolo IPX/SPX con el que opera el servidor Netware y los equipos instalados en la red local. ü Facilidad de actualización- Las actividades necesarias para actualizar, corregir o mejorar las aplicaciones cliente o servidor se simplifican notablemente. ü Facilidad de uso.- Es notable como se acelera la aceptación del nuevo sistema por parte del operador de la aplicación, debido al use de un ambiente grafico (a diferencia de aplicacio nes en modo texto típicas de la arquitectura "servidor de Archivos", como es el caso de la aplicación previa). Por lo anterior, la utilización de la arquitectura Cliente/Servidor de 2 niveles (o middletier) empleando la tecnología COM/DCOM es una excelente opción para la micro o pequeña empresa que requiera mejorar el tiempo de respuesta en la gestión de sus bases de datos y no dispone de los recursos económicos para adquirir hardware o software que 69 empleen otras tecnologías o arquitecturas. Por otro lado, es indispensable tener en cuenta los siguientes resultados observados: Ø La comunicación entre cliente y servidor, cuando se emplea la tecnología DCOM, requiere del protocolo TCP/IP cuando se utilizan equipos con Windows 9x como sistema operativo. Ø La sesión de Netware 4.11 que se abre desde la PC que alojará a la(s) aplicación(es) puede(n) ser utilizada(s) por mas de una aplicación cliente (ubicadas en diferentes computadoras), lo que resulta en que una Bola sesión a Netware puede ser empleada por más de 1 usuario de manera simultánea. 70 SUGERENCIAS Si bien el proyecto presentó una solución adecuada al problema existente, se recomienda que se realice el escalamiento a arquitecturas y tecnologías mejores cuando estén disponibles los recursos necesarios (tiempo, recursos económicos, materiales y humanos). Por ejemplo, emigrar del empleo de archivos tipo .DBF e índices tipo IDX a manejadores de bases de datos actuales (SQL Server, MySQL, Oracle, etc.) los cuales mejorarán el tiempo de respuesta, considerando el tamaño de los archivos en use o utilizar COM+ (disponible para Windows 2000 y XP) y aplicaciones Cliente /Servidor de 3 o más niveles. En el renglón de seguridad, se recomienda la utilización del sistema operativo Windows NT/2000 para establecer el servicio de acceso remoto (lo que permitirá efectuar el enlace telefónico de más de una PC remota a un solo equipo que opere como servidor de acceso remoto, en lugar de una PC para cada enlace telefónico cuando se emplea Windows 98), lo cual, además, permite aprovechar el esquema de seguridad inherente a NT/2000. Para emplear otras tecnologías (ODBC 3, Java), se recomienda pasar los índices del tipo IDX a índices del tipo CDX, los cuales si están implementados en los manejadores (drivers) disponibles actualmente bajo la plataforma Windows de Microsoft. 71 Anexo A 72 Listado del código correspondiente a la clase frmusu, la cual es el núcleo de la aplicación Servidor. ............................................................................... *-- Class: fr mus u (c:\capdam\vfp \progs \servidor \clasesmam.vcx) *-- ParentClass: form *-- BaseClass: form *-- Marca de hora: 04/18/02 10:12:05 AM * DEFINE CLASS frmusu AS form OLEPUBLIC DataSession = 2 Top= 1 Left = 47 Height = 334 Width = 456 DoCreate =.T. Caption = "Form2" Name = "frmusu" 73 ADD OBJECT cclave AS textbox WITH ; ControlSource = “”, ; Height = 25, ; Left = 12,; ReadOnly = .T., ; Top = 12, ; Width = 85, ; Name = "cClave" ADD OBJECT cnombre AS textbox WITH ; ControlSource =“”, ; Height = 25, ; Left = 108, ; ReadOnly = .T., ; Top = 12, ; Width = 240, ; Name = "cNombre" ADD OBJECT cdirecc AS textbox WITH ; ControlSource =“”, ; Height = 25, ; 74 Left = 108,; ReadOnly = .T., ; Top = 48, ; Width = 240, ; Name = "Cdirecc" ADD OBJECT cagua AS textbox WITH ; Format = ["'999,999,999.99"'], ; Height = 25, ; Left = 12, ; Top = 84, ; Width = 85, ; Name = "cAgua" ADD OBJECT calcan AS textbox WITH ; Height = 25, ; Left = 12, ; Top = 108, ; Width = 85, ; Name = "cAlcan" 75 ADD OBJECT civa AS textbox WITH ; Height = 25, ; Left = 12, ; Top = 132,; Width = 85, ; Name = "clva" ADD OBJECT cotros AS textbox WITH ; Height = 25, ; Left= 12, ; Top = 192, ; Width = 85, ; Name = "cOtros" ADD OBJECT crecar AS textbox WITH ; Height = 25, ; Left = 12, ; Top = 216, ; Width = 85, ; Name = "cRecar" 76 ADD OBJECT cgtos AS textbox WITH ; Height = 25, ; Left = 12, ; Top = 240, ; Width = 85, ; Name = "cGtos" ADD OBJECT checkl AS checkbox WITH ; Top = 48,; Left = 12,; Height = 25, ; Width = 84, ; Caption = "encontro", ; Value = 0, ; Name = "Check l" ADD OBJECT check2 AS checkbox WITH ; Top = 216, ; Left = 108, ; Height = 25, ; 77 Width = 84, ; Caption = "Convenio", ; Name = "Check2" ADD OBJECT cconvenio AS textbox WITH ; Height = 25, ; Left = 108,; Top = 252, ; Width = 84, ; Name = "cConvenio" ADD OBJECT canticipo AS textbox WITH ; Height = 25, ; Left = 12, ; Top = 276, ; Width = 85, ; Name = "cAnticipo" 78 ADD OBJECT cabonar AS textbox WITH ; Height = 25, ; Left = 12, ; Top = 300, ; Width = 85, ; Narre = "cAbonar" ADD OBJECT cpoblac AS textbox WITH ; Height = 25, ; Left = 108, ; ReadOnly =.T., ; Top = 84, ; Width = 157, ; Name = "cPoblac" ADD OBJECT crfc AS textbox WITH ; Height = 25, ; Left = 108, ; ReadOnly =.T.,; Top = 120, ; 79 Width =121, ; Name = "cRFC" ADD OBJECT tcuenta AS textbox WITH ; Height = 25, ; Left = 360, ; Top = 144, ; Width = 73, ; Name = "tCuenta" ADD OBJECT timporte AS textbox WITH ; Height = 25, ; Left = 360, ; Top = 180, ; Width = 73, ; Name = "timporte" ADD OBJECT tconv AS textbox WITH ; Height = 25, ; Left = 360, ; 80 Top = 216, ; Width = 49, ; Name = "tconv" ADD OBJECT csan AS textbox WITH ; Height = 25, ; Left= 12, ; Top = 168, ; Width = 85, ; Name = "cSan" *-- abre un archivo PROCEDURE abretabla select 5 use f:\pruebas\abonar index f:\pruebas\abonar.idx,f:\pruebas\tabonar.idx shared select 4 use f:\pruebas\anticipo index f:\pruebas\anticipo.idx shared select 3 use f:\pruebas\convenio index f:\pruebas\convenio.idx shared select 2 *use c:\capdam\hoy\cargos index c:\capdam\hoy\cargos.idx shared *use f:\sicous\cargos index f:\sicous \cargos.idx shared use f:\pruebas\cargos index f:\pruebas\cargos.idx shared 81 select 1 *use c:\capdam\hoy\ca tomas index c:\capdam\hoy\ca tomas.idx shared *use f:\sicous\ca tomas index f:\sicous\ca tomas.idx shared use f:\pruebas\ca tomas index f:\pruebas\ca tomas.idx shared ENDPROC *-- para pasar al siguiente registro PROCEDURE unomas Parameter dFechn,nCaja skip 1 if eof() or. dFecha!=abonar.abo fecha .or. nCaja!=abonar.abo caja return .f. else return .t. endif ENDPROC 82 *-- Localiza el usuario cuya clave esta en nBusca PROCEDURE buscar lparameter nCuenta *Dimension aCargos(100,2) local nagua,nalca,notro,niva *wait windows nowait "entrando a clase" this. Check 1. value=.t. select 1 seek(nCuenta) if eof() • messagebox("No se localizó al usuario:"+str(nCuenta,7)) • WAIT WINDOW `No se localizo al usuario: '+str(nCuenta,7) + WONTOP( ) this. Check l .value=. f. this.cClave.value="" this.cNombre.value="" this.cDirecc.value="" return endif nAnti=0 nAbo=0 select 5 seek(str(nCuenta,7)) do while ¡eof() and. abonar.abo_cvecta=nCuenta nAbo=nAbo+abonar.abo_import 83 skip enddo nAnti=0 select 4 seek(str(nCuenta,7)) do while ¡eof() and. anticipo.ant cvecta=nCuenta nAnti=nAnti+anticipo.ant agua+anticipo.ant dren+; anticipo.ant iva skip enddo lConve=.f. 1Gastos=.f. nConvlmporte=0 this.cClave.value=ca_tomas.tom_cvecta this.cNombre.value=ca_tomas.tom_nombre this.cDirecc.value=ca_tomas.tom_direcc this.cPoblac.value=ca_tomas.tom_poblac this.cRFC.value=ca_tomas.tom_ rfc this. Check1.value=.t. if ca_tomas.tom_estnot=3 lConve=.t. endif 84 if (ca_tomas.tom_estnot=l or. ca_tomas.tom_ estnot=2) and. ca_tomas.tom_ fecnot!=ctod(" / / ") lGastos=.t. endif if 1Conve select 3 seek(nCuenta) if ¡eof() nConvlmporte=con cosmen endif endif select 2 seek str(nCuenta,7) • WAIT WINDOW `Usuario: '+str(nCuenta,7) + "localizado en:"+str(recnoO,8)+ WONTOP( ) if eof() • messagebox("No se localizaron cargos a:"+str(Qcta,7)) • WAIT WINDOW No se localizo cargos al usua rio: '+str(nCuenta,7) + WONTOP( ) endif nagua=0 niva=0 nalca=0 nsan=0 notro=0 85 nreca=0 nGtos=O do while ¡eof() and cargos. car cvecta=nCuenta saldo=cargos.car cargo-cargos.car abonos-cargos.car ajuste-cargos. car_descue • WAIT WINDOW' valor saldo: '+str(saldo,7,2) + " rec:"+str(recno(),7) if saldo>0 and. ¡cargos. car conv nreca=nreca+cargos.car recarg if cargos. car cvecon!=l0 and. cargos.car_cvecon!=58 and. ; cargos.car cvecon!=4 and. cargos.car cvecon!=26 and. cargos.car cvecon!=61 nGtos=nGtos+saldo endif • aCargos [cargos. c arcvecon,2]=aCargos(cargos.car cvecon,2)+saldo do case case cargos.car cvecon=l nagua=nagua+saldo case cargos.car cvecon=2 nalca=nalca+saldo case cargos.car_cvecon=l0 niva=niva+saldo case cargos. car cvecon=65 nsan=nsan+saldo otherwise notro=notro+saldo 86 endcase endif skip enddo this.cAgua.value=nagua this.cAlcan.value=nalca this.cSan.value=nsan this.cOtros.value=notro this.clva.value = niva this.cRecar.value =nreca if 1Gastos this. cGtos.value=round(nGtos*0.08,2) else this.cGtos.value=0 endif this.check2.value=lConve this.cConvenio.value=nConvlmporte this.cAnticipo.value=nAnti this.cAbonar.value=nAbo • aCargos(3,2)=nreca • aCargos(4,2)=round(nGtos*0.08,2) select 1 return ENDPROC 87 *-- regostra pago PROCEDURE grabap lparameter nCuenta,nPago,nCaja,cOper,lConv,dFecha,cHora select 5 append blank rlock() replace abo_cvecta with nCuenta, abo_import with nPago,abo caja with ; nCaja,abo login with cOper,abo conven with lConv,abo_fecha ; with dFecha, abo hora with cHora unlock ENDPROC *-- Tira de auditoria PROCEDURE tira Parameter dFecha,nCaja select 5 set order to 2 seek dtos(dFecha)+str(nCaja,2) if found() .and. ¡eof() si=.t. else si=.f. 88 endif return si ENDPROC PROCEDURE leetira this.tCuenta.value=abonar.abo cvecta this.tlmporte.value=abonar.abo import this. tconv.value=abonar.abo conven ENDPROC PROCEDURE Init Public int nBusca • messagebox("Activando Init") • this.abretabla ENDPROC PROCEDURE Load nBusca=0 • messagebox("Activando Init") set deleted on this.abretabla ENDPROC 89 ENDDEFINE * *- - EndDefine: frmusu ……………………………………………………………... 90 Anexo B 91 Procedimiento para instalar el protocolo TCP/IP en equipos PC con sistema operativo WIN9x Se puede instalar el protocolo TCP/IP para operar en una red local (LAN) o para enlaces remotos vía un módem. A continuación se describe el procedimiento para cada uno de los casos. A. Protocolo TCP/IP para una tarjeta de red local (LAN) o adaptador de enlace telefónico. Una vez que ya se instaló correctamente la tarjeta de red (NIC) que se va a utilizar o el adaptador de enlace telefónico, se deberán seguir los siguientes pasos: • Seleccionar la opción Red (Networkt) dentro del Panel de Control (Inicio>Configuración->Panel de Control) • Dar doble click con el botón izquierdo para ejecutar la utileria que permitirá agregar el protocolo 92 Seleccionar Agregar 93 • Seleccionar Protocolo y Agregar • Seleccionar Microsoft , TCP/IP y Aceptar • Seleccionar Dirección IP, activar la opción Especificar una dirección IP y capturar la dirección que se asignará al equipo (en el ejemplo: 10.0.0.11 con la máscara 255.255.255.0) y Aceptar. 94 • Reinicializar el equipo 95 Anexo C 96 Listado del código correspondiente a los métodos contenidos en la aplicación Cliente. A).-Formulario form1.scx A-1) Método load: public o, Qpago,nQcta,Qpoblac,Qrfc dimension anQdebe(100,2) set decimal to 2 A-2) Método Init: Qpago=0.00 thisform.Label11. visible=.f. thisform. Text15.visible=.f. thisform. Option group1. visible=. f. thisform. command2. visible=.f. thisform. command3. visible=.f. Qv4=0 Qv6=0 Qv7=0 Qv8=0 Qv9=0 Qv10=0 Qv11 =0 97 Qv12=0 Qv13=0 Qv14=0 Qv16=0 A-3) Caja de texto Text 1: Click thisform. Text1. value=” “ thisform. Text2. value="" thisform. Text3. value="" thisform. Text5. value="" thisform. Text4. value=0 thisform. Text6. value=0 thisform. Text7 value=0 thisform. Text8. value=0 th isform. Text9. value=0 thisform. Text10. value=0 thisform. Text1l. value=0 thisform. Textl2. value=0 thisform. Text13. value=0 thisform. Text16. value=0 thisform. checkl. value=.f. Qv4=0 Qv6=0 98 Qv7=0 Qv8=0 Qv9=0 Qv10=0 Q v1 1=0 Qv12=0 Qv13=0 Qv16=0 Qpoblac="" Qrfc="'f thisform.label 11. visible=.f. thisform. Text15. visible=.f. thisform. Text15. value=0. 00 thisform. Option group1. visible=.f. thisformh.command2. visible=.f. thisformh.command3. visible=.f. thisform. Option groupl.option1. value=0 thisform.Optiongroupl. option2. value=0 A-4) Botón Buscar (Commandl:Click) nQcta=0 * messagebox("entro a botton ") nQcta=val(thisform text1. value) o.buscar(nQcta) 99 if . not. ( o. Check1. value) messagebox("No se localizó la cuenta( cliente) ") return endif thisform. Text2. value=o. cNombre. value thisform. Text3. value=o. cDirecc. value thisform. Text5. value=o. cClave. value thisform. Text4. value=o. cAgua. value thisform. Text6. value=o. cAlcan. Value thisform. Text7. value=o. cOtros. value thisform. Text8. value=o. clva. value thisform.Text9.value--o.cRecar.value thisform.Text 10.value=o.cGtos.value thisform. Text11. value=o. cCon ven io. Value thisform. Text 13. value=o. cAbonar. Value thisform. Text14. value=o. cAnticipo. value thisform. Text16. value=o.cSan. value Qpoblac=o.cPoblac. value Qrfc=o. cRFC. value thisform. Check1. value=o. check2. value thisform. Texti2 value. cAgua. value+o. cAlcan. value+o. cSan. value+o. cOtros. value+; o. clva. value+o. cRecar. value+o. cGtos. value+; o.cCon venio. value-(o. cAbonar. value+o. cAnticipo. value) Qpago=0.00 100 thisform.label 11. visible=. t. thisform. Text15. visible=. t. thisform.Text 15.Setfocus A-5) Botón Grabar Pago (Command2:Click) private ngCuenta,ngPago,ngCaja,cgOper,lgConv,dgFecha,cgHora * si es facturacion if thisform.Optiongroup1.Option1.value=.t. cQuePaga="Facturacion" igConv=.f. else cQuePaga= "Convenio " igConv=. t. endif if thisform.Text] 5.value<=0 messagebox("No se puede registrar sin pago”) return endif set console off set printer to name "TMj" set printer font "Times ",11 set printer on ? 'Comision de Agua Potable, Drenaje y' ? 'Alcantarillado de Manzanillo, Col.' ? ' Palacio Municipal s/n, Piso 3' 101 ? ? space(5),' Recepcion de pago a:'+cQuePaga ? ? 'Fecha: ,date(),' Hora: ;time() dgFecha=date() cgHora=substr(time(),1,5) ? ? 'Cuenta: ,trans(nQcta, "9999999") set printer font "Times ",8 ? ? substr(thisform.text2.value,1,40) ? substr(thisform.text3.value,1,40) ? Qpoblac ? Qrfc * ? substr(thisform.text2.value,1,40)? set printer font "Times ",10 ? ? "== Cargos actuales ==" ? 'Agua 'AT 1, trans (thisform. Text4. value, “999,999.99”) AT 20 ? Alcantarillado 'AT 1, trans(thisform.Text6.value, "999,999.99") at 20 ?'Saneamiento 'AT 1, trans(thisform.Textl6.value, "999,999.99") at 20 ? 'Otros' AT 1, trans(thisform. Text7. value, "999,999.99 ") at 20 ? 'IVA 'AT 1, trans(thisform.Text8.value, "999,999.99') at 20 ? 'Recargos 'AT 1, trans(thisform.Text9.value, "999,999.99") at 20 102 ? 'Gastos 'AT 1,trans(thisform.TextlO.value, "999,999.99") at 20 ? replicate("-",36) ? 'Adeudo Total' AT l,trans(thisform.Textl0.value+; thisform.Text4.value+; thisform. Text6. value+thisform. Text16. value+; thisform. Text7. value+; thisform. Text8. value+; thisform. Text9. value, "999,999.99') AT 20 ? set printer font "Times ",12, "B" ?'Su Pago: $’,trans(thisform. Textl5. value, "999,999.99") set printer font "Times" , 1 1 , " " N " ? *WAIT WINDOW "Entra cUser: "+cUser+" Id: "+str(nQidCaja,2) TIMEOUT 5.5 ? 'Operador: ;cUser,' Caja: ;str(nQidCaja,2) ? ? "El agua es vida.. cuidala!! " set printer off set printer to set console on thisform.command3. visible=. t. thisform. command3. enabled=.t. thisform.command2.enabled=.f. ngCuenta=n Qcta 103 ngPago=thisform. Text15. value ngCaja=nQidCaja cgOper=cUser o.grabap(ngCuenta,ngPago,ngCAja,cgOper,lgConv,dgFecha,cgHora) * messagebox("grabado el pago ") A-6) Botón Validar Pago (command2:Click) set console off set printer to name "TMs" set printer font "Times ",10 set printer on ? 'Operador: ',cUser,' Caja:,str(nQidCaja,2) ? ?"Cuenta: ",trans(nQcta,"9999999")," Pago: ",trans(thisform.Text] 5.value, "999,999.99 ") ? ?"Fecha: ",dateO," Hora: ",time() ? for i=1 to 13 ? next ? ? 'Operador: ,cUser,' Caja: ,str(nQidCaja,2) ? ?"Cuenta:",trans(nQcta,"9999999")," Pago: 104 ",trans(thisform.Textl5.value, "999,999.99") ? "Fecha: ",date()," Hora: ',time() ? set printer off set printer to set console on set printer to name "TMs" thisform. command3. enabled=. F B) Formulario ftira.scx B-1) Botón imprimir Tira (Command1:Click) local Qfecha,ncta,npag Qfecha=date() * WAIT WINDOW "Regresa con:"+len(aTira) TIMEOUT 1.5 * set console off * set printer to name "TMj" * set printer font "Times", 11 * set printer on ? 'Comision de Agua Potable, Drenaje y' ?'Alcantarillado de Manzanillo, Col.' ? ' Palacio Municipal s/n, Piso 3' ? ? Relación de pagos del día:' ,Qfecha ? 105 restore from c:\windows\id.mem additive nCaj a=nQidCaj a ? "Caja:",nCaja ? ? 'Fecha Imp:',date(),' Hora:',time() ? set printer font "Times",8 ? replicate("- ",36) ? 'Cuenta Importe Conv.' ? replicate("- ",36) * llamar a la función Tot- 0 Que=o.tira(Qfecha,nCaja) 106 do while Que o.leetira() ncta=o.tCuenta.value npag=o.timporte.value ? str(ncta,7) ,trans(npag,"99,999,999.99")," ",o.tconv.value Tot=Tot+o.timporte.value que=o.unomas(Qfecha,nCaja) enddo ? replicate("- ",36) ? "Total "+trans(Tot,"99,999,999.99") ? ?'Operador: ',cUser,' Caja:',str(nQidCaja,2) ? ? "El agua es vida..cuidala!!" set printer off set printer to set console on 107 C) Formulario login.scx C-1) Método load THIS.Autocenter = T. THIS.BorderStyle = 2 && Fixed Dialog C-2) Método unload RETURN THIS.cUser C-3) Botón comando Aceptar (cmdOK:Click) LOCATE FOR UPPER(login.userid) = UPPER(ALLTRIM(THISFORM.txtUserName.Value)) IF FOUNDO AND ALLTRIM(password) == ALLTRIM(THISFORM.txtPassword.Value) THISFORM.cUser = ALLTRIM(login.userid) THISFORM.Release *WAIT WINDOW "Si entra" TIMEOUT 1.5 ELSE #DEFINE MISMATCH LOC "El nombre de usuario o la contraseña no son correctos. Vuelva a intentarlo." 108 WAIT WINDOW MISMATCH LOC TIMEOUT 1.5 THISFORM.txtUserName.Value = "" THIS FORM. txtPassword. Value = "" THIS FORM.txtUserName. S etFocus END IF C-4) Botón Cancelar (cmdCancela:Click) THISFORM.cUser = "" THISFORM.Release D) Programa Principal de la aplicación Progrl.prg public o,cUser SET TALK OFF SET ECHO OFF SET DELETE ON SET DATE DMY SET STATUS BAR OFF SET BELL OFF SET MESSAGE TO SET SAFETY OFF SET EXACT OFF SET MULTILOCKS ON CLEAR MACROS && limpiamos el archivo de macros de VFP ON KEY LABEL ESC * && desactivamos la tecla Escape 109 * Guardamos todas las posibles barras de herramientas de VFP y también * si están visibles o no. Si ocurre lo primero las ocultamos Dimension aBarras[11,2] aBarras[1, 1 ]="Controles de formularios" aBarras[2,1 ]="Controles de informes" aBarras[3,1 ]="Distribución" aBarras[4, 1 ]="Estándar" aBarras[5,1]="Diseñador de bases de datos" aBarras[6,1 ]="Diseñador de consultas" aBarras[7,1 ]="Diseñador de formularios" aBarras[8,1 ]="Diseñador de informes" aBarras[9,1 ]="Diseñador de vistas" aBarras[1 0, 1 ]="Paleta de colores" aBarras[1 1,1 ]="Vista preliminar" FOR i=1 to ALEN(aBarras,1) aBarras[i,2]=WVISIBLE(aBarras[i, l ]) IF aBarras[i,2] HIDE WINDOW (aBarras[i,l]) ENDIF NEXT restore from c:\windows\id.mem additive o=createobject("tstclase.frmusu") 110 do form login to cUser if len(cUser)!=0 WAIT WINDOW "Si Entra con cUser:"+cUser+" Caja:"+str(nQidCaja,2) TIMEOUT 1.5 * nCaja=nQidCaja do menú1.mpr read events else * WAIT WINDOW "No Entra con cUser:"+cUser+" len:"+str(len(cUser)) TIMEOUT 1.5 WAIT WINDOW "No esta autorizado a usar el Sistema: "+cUser TIMEOUT 5.5 CLOSE ALL RELEASE ALL EXTENDED CLEAR CLEAR ALL quit endif * Cerramos todo y limpiamos la memoria CLOSE ALL RELEASE ALL EXTENDED CLEAR CLEAR ALL 111 Anexo D 112 Configurar un enlace telefónico a una red, utilizando el sistema operativo Windows 9x de Microsoft. Se deberá tener instalado el módulo para Acceso telefónico, para verificarlo, dar un doble click con el botón izquierdo al icono Mi PC, en caso de no aparecer la carpeta con ese nombre, instalarlo siguiendo el procedimiento siguiente: a) Procedimiento para instalar los programas para enlace telefónico en Windows 9x Ø Ø Ø Ø Ø Ø Dar click en Inicio. Seleccionar la opción Configuración. Activar la opción Panel de control. Dar doble click Agregar o quitar programas Dar clic en la opción Instalación de Windows. Seleccionar el módulo de comunicaciones ( ver figura) 113 Ø Activar el botón Detalles (ver figura siguiente). 114 Ø Activar las casillas de selección correspondientes a Acceso telefónico a redes y Marcador de teléfono Ø Dar click en el botón Aceptar. b) Instalar un enlace telefónico a redes. Ø Activar Mi PC y seleccionar la carpeta Enlace telefónico a redes. (ver figura siguiente) 115 Ø Al abrir la carpeta anterior, seleccionar Realizar conexión nueva y proporcionar los datos que se solicitan: Nombre de la conexión, teléfono, etc. 116 Anexo E 117 Instalación de un servidor para enlace telefónico en Windows 98, segunda edición. Se necesita tener instalados el módulo Servidor de acceso telefónico a redes (seguir los pasos indicados en el anexo C inciso a para activar la instalación de comunicaciones como se ilustra en la figura siguiente. Teniendo instalado lo anterior, seguir los siguientes pasos: Ø Ø Ø Ø Ø Abrir Mi PC. Dar un doble click sobre la carpeta Acceso telefónico a redes. Seleccionar la opción Conexiones. Seleccionar Servidor de acceso telefónico a redes. Activar el servidor telefónico (ver figura siguiente). 118 119 Anexo F 120 Estructura de las principales tablas utilizadas durante el proceso de recepción y registro de pagos por los servicios de CAPDAM . 1.- Tabla denominada CA_ TOMAS.DBF, en la cual se almacenan los datos de los usuarios de los servicios de CAPDAM, se muestran los campos utilizados para la aplicación de cajas. 2.- Tabla denominada ABONAR.DBF, en la cual se almacenan los datos del pago efectuado por el usuario. 121 3.- Tabla denominada CARGOS.DBF, en la cual se almacenan los cargos que hace la CAPDAM a los usuarios, se muestran los campos utilizados en la aplicación. 4.- Tabla denominada CONVENIOS.DBF, en la cual se registran lo relativos a los convenios que hace la CAPDAM con aquellos usuarios que solicitan facilidades de pago. Como se observa, el campo llave para las tablas es el correspondiente al número de cuenta del usuario. 122 Glosario Flexibilidad La facilidad con la cual un componente o sistema puede ser modificado para su uso en aplicaciones o ambientes diversos a aquel para el cual fue específicamente diseñado [IEEE 90]. Usabilidad La facilidad con la cual un usuario puede aprender a operar, preparar los datos que alimentara e interpretar las salidas o reportes de un sistema o componente [IEEE 90]. Interoperabilidad La habilidad de dos o más sistemas o componentes para intercambiar información y usar la información que se intercambió [IEEE 90]. Escalabilidad La facilidad con la que un sistema o componente puede ser modificado para adecuarse al problema. Portabilidad La facilidad con la que un sistema o componente puede ser transferido de un hardware o ambiente de software a otro [IEEE 90]. Mantenible (Maintainability ) La facilidad con la que un sistema de software o componente puede ser modificado para corregir fallas, mejorar su desempeño u otros atributos, o adaptarlo a un cambio de ambiente [IEEE 90]. Adaptabilidad La facilidad con la que un software satisface diferentes requisitos de sistemas y necesidades del usuario [Evans 87]. 123 Complejidad • (Aparente) el grado al que un sistema o componente tiene un diseño o implementación que es difícil de entender y verificar [IEEE 90]. • (Inherente) el grado de complicación de un sistema o componente de un sistema, determinado por factores tales como el número y lo intrincado de las bifurcaciones condicionales, el grado de anidación y el tipo de estructura de datos [Evans 87]. Stub Un subprograma que se emplea para unir 2 aplicaciones en RPC 124 BIBLIOGRAFÍA Bray Mik. (2001). Application Programming Interface. Carnegie Mellon University URL: http://www.sei.cmu.edu/str/descriptions/api body.html. Bray Mike (2001). Middleware. Carnegie Mellon University URL: http://www.sei.cmu.edu/str/descriptions/middleware body.html. Computer Associates. (1992). Drivers Guide, version 5.2. Darleen Sadoski. (2000). Client/Server Software Architectures--An Overview. Carnegie Mellon University. URL: http://www.sei.cmu.edu/str/descriptions/clientserver body.html. Hostmann Markus & Kirtland Mary (1997, Julio), DCOM Architecture. Obtenido de la Red Mundial el 26 de Febrero de 2002: http://msdn.microsoft.com/library/default.asp?url=/library/en- us/dndcom/html/msdn dcomarch.asp [IEEE 90] Institute of Electrical and Electronics Engineers. IEEE Standard Computer Dictionary: A Compilation of IEEE Standard Computer Glossaries. New York, NY: 1990. Kroenke David M. (1996), Procesamiento de bases de datos, fundamentos, diseño e instrumentación. Prentice Hall. 5a edición, México. Martínez Luis. (1999). La cabecera de los .DBF. FoxPress, Mayo 2001 http://www.$ress.com/revista/Num0501/May01 i.htm. Microsoft Corporation (1996, Noviembre), DCOM Technical Overview. Obtenido de la Red Mundial el 26 de Febrero de 2002: httv://msdn.microsoft.com/library/default.asp?url=/library/en- us/dndcom/html/msdn dcomtec.asp 125 Microsoft Corporation (1997, Abril), DCOM a Bussines Overview. Obtenido de la Red Mundial el 26 de Febrero de 2002: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndcom/html/msdn dcombiz.asp Mueller, J.P. (2000). Visual Basic COM+ Programming Bible. IDG Books Vondrak Cory (2001). Distributed Computing Environment. Carnegie Mellon University URL: http://www.sei.cmu.edu/str/descriptions/dce body.html. Vondrak Cory (1997). Remote Procedure Call. Carnegie Mellon University URL: http://www.sei.cmu.edu/str/descriptions/rpc body.html. Williams Sara & Kindel Charlie, Microsoft Corporation (1996, Octubre), The Component Object Model: A Technical Overview. Obtenido de la Red Mundial el 26 de Febrero de 2002: http://msdn.microsoft.com/library/default.asp?url=/library/en- us/dndcomg/html/msdn comppr.asp 126