Maestría en Informática Aplicada en Redes I. Marco conceptual 1.1 SMS El servicio de mensajes cortos o SMS (Short Message Service) es un servicio disponible en los teléfonos móviles que permite el envío de mensajes cortos (también conocidos como mensajes de texto) entre teléfonos móviles, teléfonos fijos y otros dispositivos de mano. SMS fue diseñado originalmente como parte del estándar de telefonía móvil digital GSM, pero en la actualidad está disponible en una amplia variedad de redes, incluyendo las redes 3G. 1.2 SMSC Corresponde a las siglas en inglés Short Message Service Center (Central de Servicio de Mensajes Cortos), es un elemento de la red de telefonía móvil, cuya función es enviar y recibir mensajes de texto. En el momento que un usuario envía un mensaje de texto (SMS) a otro usuario lo que sucede es que el teléfono envía el mensaje a la SMSC correspondiente al operador del usuario remitente. La SMSC guarda el mensaje y lo entrega a su destinatario cuando este se encuentra en cobertura. Por lo general la SMSC, dentro de los cientos de parámetros configurables que se puede modificar, dispone de un tiempo máximo durante el cual el mensaje es guardado, si durante este tiempo el destinatario no es localizado, el mensaje es descartado. También el usuario remitente puede especificar este tiempo; pero siempre siendo el configurado en la SMSC el determinante. Para la transmisión y recepción de mensajes SMSs, las SMSCs utilizan interfaces de red convencionales, así como algunos protocolos desarrollados específicamente para las comunicaciones de red móviles. Página 7 de 82 Maestría en Informática Aplicada en Redes 1.3 Proyecto Gammu Gammu es un proyecto que derivo de gnokii (gnokii.org) que en sus inicios solo daba soporte a celulares Nokia; pero evolucionó a otra variedad de marcas logrando comunicación por cable, irda (infrarrojo) y Bluetooth. La herramienta Gammu es un proyecto que abarca aplicaciones, scripts y drivers para administrar varias funciones de teléfonos celulares y otros dispositivos similares. Gammu permite al usuario acceder al sistema de archivos del teléfono celular y a las funcionalidades especiales de control, como radios o cámaras integradas. Esta herramienta se configura editando el archivo de configuración “gammurc” del directorio de usuario, o bien, en /etc/gammurc para todos los usuarios. Gammu también tiene la capacidad de enviar y recibir mensajes SMS (Servicio de Mensajes cortos) por medio del demonio denominado SMSD. Para ejecutarlo se tiene que editar primero el archivo de configuración de dicho demonio smsdrc, configurar ciertas características de este modo de trabajo en tablas para configuración en la base de datos smsd; finalmente ejecutar el script gammu.sh en background desde la línea de comandos. El paquete de instalación de Gammu en su ultima o previas versiones se puede obtener desde su sitio oficial http://www.gammu.org Gammu puede ser configurado para trabajar en dos modos: • Archivos – Los mensajes SMS se leen y almacenan en archivos de disco • MYSQL – Los mensajes SMS se leen y almacenan en una base de datos Configuración SMSD: El archivo de configuración smsdrc puede estar ubicado en cualquier directorio y ser guardado con cualquier nombre. Por defecto el archivo de configuración smsdrc se ubica en el directorio docs/examples/config/ que viene en el paquete de instalación de Gammu. Su formato es el mismo utilizado en el archivo de configuración principal (gammurc). Si el archivo smsdrc no es definido en la línea de comando los valores de configuración son leídos desde gammurc. Página 8 de 82 Maestría en Informática Aplicada en Redes [gammu] port = /dev/ttyS1 model = 6110 connection = dlr3 #synchronizetime = yes logfile = gammulog logformat = textall use_locking = yes #gammuloc = gammu.us #startinfo = yes El símbolo “#” nos indica que esa la línea se tomará como un comentario o parte de documentación, si fuera necesario fijar algún dato diferente a estos por defecto definidos se deben especificar en este archivo. #[include_numbers] #number1 = 1234 Removiendo los comentarios a la sección anterior es posible definir números de teléfonos desde los cuales se podrán recibir mensajes tal que mensajes entrantes de otros números telefónicos no definidos en este apartado serán eliminados, actuando en alguna manera de forma inteligente. #[exclude_numbers] #number1 = 1234 Al quitar el comentario de la sección anterior es posible indicar a gammu de qué números de teléfonos no se procesaran mensajes entrantes, es decir esta sería tomada como la definición de la “Lista negra de teléfonos”. Configuración de Gammu en el modo SMSD Definiciones de variables de configuración para el contenedor de bases de datos Mysql, como dirección del servidor de base de datos, nombre de la base de datos, usuario y clave deben definirse en el archivo de configuración smsdrc. Ejemplo: user = root password = maestriaufg Página 9 de 82 Maestría en Informática Aplicada en Redes pc = localhost database = smsd Para que la aplicación Gammu pueda tener acceso a los recursos de la base de datos es necesario definir ciertos privilegios al usuario de conexión. Para la tabla de recepción de mensajes SMS • Tabla Inbox - INSERT Para enviar mensajes SMS: • Tabla Outbox - SELECT, INSERT, DELETE y UPDATE • Tabla Outbox_MultiPart - SELECT, INSERT y DELETE • Tabla SentItems - INSERT y UPDATE Otros parámetros para la configuración general son: PIN Numero PIN de la tarjeta SIM del teléfono celular logfile Nombre del archivo Log para información acerca de las acciones del modulo smsd. CommTimeout Define un tiempo en segundos que smsd espera para volver a repetir un lazo de lectura escritura nuevamente. Por SendTimeout defecto: 1 Muestra cuantos segundos smsd esperará por respuesta de la red durante el envió del mensaje de texto. Si no ocurre nada en este tiempo, sms lo reenviará. Por defecto: 10 receivefrequency Frecuencia de recepción. El número de segundos entre pruebas para recibir mensajes, cuando el teléfono esta ocupado enviando mensajes SMS. Normalmente esta prueba de recepción de mensajes se hace en el tiempo estipulado en commtimeout y después de cada mensaje enviado. Por defecto: 0 (No utilizado) deliveryreport Reportes de entrega. Si se utilizan reportes de entrega (log). Opciones: no/log/sms. log: Una línea de entrada de registro(log), sms: Almacenado en inbox como un mensaje de texto, Por defecto: no phoneid Identificación del teléfono utilizado para enviar y recibir mensajes SMS. Ejemplo de configuración general: [smsd] PIN = 1234 Página 10 de 82 Maestría en Informática Aplicada en Redes logfile = smsdlog commtimeout = 1 sendtimeout = 10 #receivefrequency = 0 #resetfrequency = 0 #deliveryreport = no #phoneid = MyPhone1 El script para la creación de la estructura de la base de datos de Gammu se encuentra en el paquete de instalación en la siguiente ruta: docs/examples/config/mysql.sql. Descripción de la estructura de la base de datos de GAMMU. Tabla Inbox Tabla en la que se almacenan los mensajes entrantes (SMS) Campo UpdatedInDB Tipo Timestamp Descripción Fecha y hora en que se da una actualización del usuario, demonio, etc. ReceivingDateTi Timestamp me Hora y fecha en que un mensaje SMS fue recibido Text Text Mensaje de texto codificado en Hexadecimal SenderNumber Varchar(20) Numero de teléfono (decodificado) que envía el mensaje. Coding enum('Default_No_Compres Tipo de codificación del mensaje de texto. sion',’Unicode_No_Compres sion','8bit','Default_Compres sion','Unicode_Compression ') UDH Texto Cabecera de datos de usuario codificado SMSCNumber Varchar(20) Numero decodificado de la central de servicio de mensajes cortos Página 11 de 82 Maestría en Informática Aplicada en Redes Campo Tipo Descripción Class Int(11) Clase SMS or -1 TextDecoded Varchar(160) Mensaje de texto (SMS) decodificado. Por defecto Alfabeto/Unicote SMS) ID Integer (11) Identificador del mensaje SMS (Para utilizar con aplicaciones externas) RecipientID Texto Identificador del demonio de gammu que lo ha agregado Processed enum('false', 'true') Utilizado para marcar si un mensaje SMS fue procesado o no. Tabla Outbox Tabla para un mensaje SMS (o el primer mensaje de una secuencia) esperando para ser enviado. Campo UpdatedInDB Tipo Timestamp Descripción Fecha y hora en que se da una actualización del usuario, demonio, etc. InsertIntoDB Timestamp SendingDateTime Timestamp Fecha y hora fijada en el momento de un Insert Campo en el que se fija algún valor. Cuando buscamos forzar el envío después de un tiempo planificado. Text Texto Mensaje de texto codificado usando valores Hexadecimales. DestinationNumb Varchar(20) er Coding Número de teléfono (decodificado) del destinatario del mensaje enum('Default_No_Compres Tipo de codificación del mensaje de texto. sion', 'Unicode_No_Compression', '8bit', 'Default_Compression', 'Unicode_Compression') UDH Text Cabecera de datos del usuario codificado usando valores hexadecimales. Class Int(11) Clase SMS or -1 Página 12 de 82 Maestría en Informática Aplicada en Redes Campo TextDecoded Tipo Varchar(160) Descripción Mensaje de texto en forma legible para el humano. ID Integer (11) No asignada. Identificación de secuencia SMS/SMS. MultiPart enum('false','true') Informa, si hay más SMS de esta secuencia en la tabla Outbox_Multipart. RelativeValidity Integer (11) Validez relativa del SMS como codificación utilizando especificaciones GSM. SenderID Text El valor que contenga este campo será enviado por SMSD SendingTimeOut Timestamp Utilizado por SMSD para sus propios objetivos DeliveryReport enum('default','yes','no') Cuando el valor ‘default’ es utilizado, el Reporte de entrega es utilizado o no de acuerdo a la configuración de la instancia SMSD; ‘yes’ fuerza el Reporte de entrega. CreatorID Text Puede usarse para agregar información sobre un proceso, que secuencia SMS/SMS agregar dentro de la base de datos. Esta es copiada para Sent_Items "as is" Tabla Outbox_multipart Tabla para la segunda y próxima secuencia de SMS esperando para ser enviados. Campo Text Tipo Text Descripción Mensaje de texto codificado usando Hexadecimales. Coding enum('Default_No_Compre Tipo de codificación del mensaje de texto. ssion','Unicode_No_Compr ession', '8bit','Default_Compression' , 'Unicode_Compression'), Página 13 de 82 valores Maestría en Informática Aplicada en Redes Campo UDH Tipo Text Descripción Cabecera de datos del usuario codificado usando valores hexadecimales. Class Int(11) Clase SMS or -1 TextDecoded varchar(160) Mensaje de texto en forma legible para el humano. ID Int(11) unsigned Identico significado para valores en la tabla Outbox SequencePosition Int(11) Información, ¿Cuál es número SMS en la secuencia SMS? Tabla Sent_items Tabla para SMS enviados. Campo UpdatedInDB Tipo Timestamp Descripción Fecha y hora en que se da una actualización del usuario, demonio, etc. InsertIntoDB Timestamp Fecha y hora fijada en el momento de un Insert SendingDateTime Timestamp Fijarlo a un cierto valor, cuando se desea forzar a el envío después de un tiempo previsto. DeliveryDateTime Timestamp Cuando el reporte de envío fue utilizado por SMS, esta entrada contiene la hora en que este reporte fue recibido. Status enum('SendingOK', Cuando el reporte de envío fue utilizado por 'SendingOKNoReport', SMS, esta entrada contiene código de error 'SendingError', legible por el humano. 'DeliveryOK', 'DeliveryFailed', 'DeliveryPending', 'DeliveryUnknown', 'Error') StatusError Int(11) Cuando el reporte de envío fue utilizado por SMS, esta entrada contiene códigos de error como las especificaciones GSM Text Text Texto SMS codificado usando valores hexadecimales. DestinationNumber Varchar(20) Numero de destino decodificado para SMS Página 14 de 82 Maestría en Informática Aplicada en Redes Campo Coding Tipo Descripción enum('Default_No_Compre Texto codificado SMS. ssion', 'Unicode_No_Compression' , '8bit', 'Default_Compression', 'Unicode_Compression') UDH Texto Cabecera de datos del usuario codificado con valores hexadecimales. SMSCNumber Varchar(20) Numero decodificado de la central de servicio de mensajes cortos Class Int(11) Clase SMS ó -1 TextDecoded varchar(160) Texto SMS en forma legible al humano. ID Int(11) No asignado - SMS ID SenderID Text ¿Qué instancia de SMSD envió esta única secuencia. SequencePosition Int(11) Número SMS en secuencia SMS TPMR Int(11) Mensajes de referencia como especificaciones GSM RelativeValidity Int(11) Validación Relativa utilizando especificaciones GSM CreatorID Text Copiado de CreatorID desde la tabla Outbox (y contiene cualquier información put por los usuarios con acceso a la base de datos) Modo de Archivos Configuración Las siguientes rutas pueden ser utilizadas con el trailing “/” o “\” dependiendo del sistema operativo. inboxpath Donde los mensajes SMS recibidos son almacenados, por defecto el directorio actual. Página 15 de 82 Maestría en Informática Aplicada en Redes outboxpath Donde los mensajes SMS a ser enviados deberían ser ubicados, por defecto el directorio actual. sentsmspath Donde los mensajes SMS transmitidos son ubicados, por defecto outboxpath(= deleted) errorsmspath Donde los mensajes SMS con error en la transmisión están ubicados, por defecto sentsmspath. inboxformat El formato en que el mensaje SMS será almacenado: ‘detail’, 'unicode', 'standard'. El formato 'detail' es el formato utilizado por backup,'standard' es el juego de caracteres estándar. Por defecto: unicode. transmitformat El formato para transmitir el SMS: 'auto','unicode', '7bit'. Por defecto: auto Ejemplo: Inboxpath = /var/spool/sms/inbox/ outboxpath = /var/spool/sms/outbox/ sentsmspath = /var/spool/sms/sent/ errorsmspath = /var/spool/sms/error/ inboxformat = unicode transmitformat = auto 1.4 MySql MySQL, el sistema de gestión de bases de datos SQL Open Source más popular, lo desarrolla, distribuye y soporta MySQL AB. MySQL AB es una compañía comercial, fundada por los desarrolladores de MySQL. Es una compañía Open Source de segunda generación que une los valores y metodología Open Source con un exitoso modelo de negocio. Página 16 de 82 Maestría en Informática Aplicada en Redes El sitio Web MySQL (http://www.mysql.com/) proporciona la última información sobre MySQL y MySQL AB. • MySQL es un sistema de gestión de bases de datos Una base de datos es una colección estructurada de datos. Puede ser cualquier cosa, desde una simple lista de compra a una galería de pintura o las más vastas cantidades de información en una red corporativa. Para añadir, acceder, y procesar los datos almacenados en una base de datos, necesita un sistema de gestión de base de datos como MySQL Server. Al ser los computadores muy buenos en tratar grandes cantidades de datos, los sistemas de gestión de bases de datos juegan un papel central en computación, como aplicaciones autónomas o como parte de otras aplicaciones. • MySQL es un sistema de gestión de bases de datos relacionales Una base de datos relacional almacena datos en tablas separadas en lugar de poner todos los datos en un gran almacén. Esto añade velocidad y flexibilidad. La parte SQL de "MySQL" se refiere a "Structured Query Language". SQL es el lenguaje estandarizado más común para acceder a bases de datos y está definido por el estándar ANSI/ISO SQL. El estándar SQL ha evolucionado desde 1986 y existen varias versiones. • MySQL software es Open Source. Open Source significa que es posible para cualquiera usar y modificar el software. Cualquiera puede bajar el software MySQL desde Internet y usarlo sin pagar nada. Si se desea estudiar el código fuente y cambiarlo para adaptarlo a necesidades particulares. El software MySQL usa la licencia GPL (GNU General Public License), http://www.fsf.org/licenses/, para definir lo que se puede y no se puede hacer con el software en diferentes situaciones. Si no se desea utilizar la licencia GPL o se necesita añadir código MySQL en una aplicación comercial, se puede comprar la licencia comercial. Página 17 de 82 Maestría en Informática Aplicada en Redes • El servidor de base de datos MySQL es muy rápido, fiable y fácil de usar. El servidor MySQL también tiene una serie de características prácticas desarrolladas en cooperación con los usuarios. MySQL Server se desarrolló originalmente para tratar grandes bases de datos mucho más rápido que soluciones existentes y ha sido usado con éxito en entornos de producción de alto rendimiento durante varios años. MySQL Server ofrece hoy en día una gran cantidad de funciones. Su conectividad, velocidad, y seguridad hacen de MySQL Server altamente apropiado para acceder bases de datos en Internet • MySQL Server trabaja en entornos cliente/servidor o incrustados El software de bases de datos MySQL es un sistema cliente/servidor que consiste en un servidor SQL multi-threaded que trabaja con diferentes back ends, programas y bibliotecas cliente, herramientas administrativas y un amplio abanico de interfaces de programación para aplicaciones (APIs). • Una gran cantidad de software de contribuciones está disponible para MySQL, es decir muchas aplicaciones soportan el servidor de base de datos de MySQL. 1.5 Java Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems a principios de los años 1990. Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel como punteros. JavaScript, un lenguaje interpretado, comparte un nombre similar y una sintaxis similar, pero no está directamente relacionado con Java. Página 18 de 82 Maestría en Informática Aplicada en Redes Sun Microsystems proporciona una implementación GNU General Public License de un compilador Java y una máquina virtual Java, conforme a las especificaciones del Java Community Process, aunque la biblioteca de clases que se requiere para ejecutar los programas Java no es software libre. El lenguaje Java se creó con cinco objetivos principales: 1. Debería usar la metodología de la programación orientada a objetos. 2. Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos. 3. Debería incluir por defecto soporte para trabajo en red. 4. Debería diseñarse para ejecutar código en sistemas remotos de forma segura. 5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++. Para conseguir la ejecución de código remoto y el soporte de red, los programadores de Java a veces recurren a extensiones como CORBA (Common Object Request Broker Architecture), Internet Communications Engine o OSGi respectivamente. Las características principales de Java son las siguientes: • Orientado a Objetos La primera característica, orientado a objetos (“OO”), se refiere a un método de programación y al diseño del lenguaje. Aunque hay muchas interpretaciones para OO, una primera idea es diseñar el software de forma que los distintos tipos de datos que use estén unidos a sus operaciones. Así, los datos y el código (funciones o métodos) se combinan en entidades llamadas objetos. Un objeto puede verse como un paquete que contiene el “comportamiento” (el código) y el “estado” (datos). El principio es separar aquello que cambia de las cosas que permanecen inalterables. Frecuentemente, cambiar una estructura de datos implica un cambio en el Página 19 de 82 Maestría en Informática Aplicada en Redes código que opera sobre los mismos, o viceversa. Esta separación en objetos coherentes e independientes ofrece una base más estable para el diseño de un sistema software. El objetivo es hacer que grandes proyectos sean fáciles de gestionar y manejar, mejorando como consecuencia su calidad y reduciendo el número de proyectos fallidos. Otra de las grandes promesas de la programación orientada a objetos es la creación de entidades más genéricas (objetos) que permitan la reutilización del software entre proyectos, una de las premisas fundamentales de la Ingeniería del Software. Un objeto genérico “cliente”, por ejemplo, debería en teoría tener el mismo conjunto de comportamiento en diferentes proyectos, sobre todo cuando estos coinciden en cierta medida, algo que suele suceder en las grandes organizaciones. En este sentido, los objetos podrían verse como piezas reutilizables que pueden emplearse en múltiples proyectos distintos, posibilitando así a la industria del software a construir proyectos de envergadura empleando componentes ya existentes y de comprobada calidad; conduciendo esto finalmente a una reducción drástica del tiempo de desarrollo. Podemos usar como ejemplo de objeto el aluminio. Una vez definidos datos (peso, maleabilidad, etc.), y su “comportamiento” (soldar dos piezas, etc.), el objeto “aluminio” puede ser reutilizado en el campo de la construcción, del automóvil, de la aviación, etc. La reutilización del software ha experimentado resultados dispares, encontrando dos dificultades principales: el diseño de objetos realmente genéricos es pobremente comprendido, y falta una metodología para la amplia comunicación de oportunidades de reutilización. Algunas comunidades de “código abierto” (open source) quieren ayudar en este problema dando medios a los desarrolladores para diseminar la información sobre el uso y versatilidad de objetos reutilizables y librerías de objetos. • Independencia de la plataforma La segunda característica, la independencia de la plataforma, significa que programas escritos en el lenguaje Java pueden ejecutarse igualmente en cualquier tipo de hardware. Es lo que significa ser capaz de escribir un Página 20 de 82 Maestría en Informática Aplicada en Redes programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el lema de Java, ‘’’write once, run everywhere’’’. Para ello, se compila el código fuente escrito en lenguaje Java, para generar un código conocido como “bytecode” (específicamente Java bytecode) instrucciones de máquina simplificadas específicas de la plataforma Java. Esta pieza está “a medio camino” entre el código fuente y el código máquina que entiende el dispositivo destino. El bytecode es ejecutado entonces en la máquina virtual (VM), un programa escrito en código nativo de la plataforma destino (que es el que entiende su hardware), que interpreta y ejecuta el código. Además, se suministran librerías adicionales para acceder a las características de cada dispositivo (como los gráficos, ejecución mediante hebras o threads, la interfaz de red) de forma unificada. Se debe tener presente que, aunque hay una etapa explícita de compilación, el bytecode generado es interpretado o convertido a instrucciones máquina del código nativo por el compilador JIT (Just In Time). Hay implementaciones del compilador de Java que convierten el código fuente directamente en código objeto nativo, como GCJ. Esto elimina la etapa intermedia donde se genera el bytecode, pero la salida de este tipo de compiladores sólo puede ejecutarse en un tipo de arquitectura. Las primeras implementaciones del lenguaje usaban una máquina virtual interpretada para conseguir la portabilidad. Sin embargo, el resultado eran programas que se ejecutaban comparativamente más lentos que aquellos escritos en C o C++. Esto hizo que Java se ganase una reputación de lento en rendimiento. Las implementaciones recientes de la JVM dan lugar a programas que se ejecutan considerablemente más rápido que las versiones antiguas, empleando diversas técnicas. La portabilidad es técnicamente difícil de lograr, y el éxito de Java en ese campo ha sido dispar. Aunque es de hecho posible escribir programas para la Página 21 de 82 Maestría en Informática Aplicada en Redes plataforma Java que actúen de forma correcta en múltiples plataformas de distinta arquitectura. El concepto de independencia de la plataforma de Java cuenta, sin embargo, con un gran éxito en las aplicaciones en el entorno del servidor, como los Servicios Web, los Servlets, los Java Beans y otros. 1.6 Eclipse Eclipse es una plataforma de software de Código abierto independiente de una plataforma para desarrollar lo que el proyecto llama "Aplicaciones de Cliente Enriquecido", opuesto a las aplicaciones "Cliente-liviano" basadas en navegadores. Esta plataforma, típicamente ha sido usada para desarrollar entornos integrados de desarrollo (del Inglés IDE), como el IDE de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se embarca como parte de Eclipse (y que son usados también para desarrollar el mismo Eclipse). Sin embargo, también se puede usar para otros tipos de aplicaciones cliente, como BitTorrent Azureus. Eclipse es también una comunidad de usuarios, extendiendo constantemente las áreas de aplicación cubiertas. Un ejemplo es el recientemente creado Eclipse Modeling Project, cubriendo casi todas las áreas de Model Driven Engineering. Eclipse fue desarrollado originalmente por IBM como el sucesor de su familia de herramientas para VisualAge. Eclipse es ahora desarrollado por la Fundación Eclipse, una organización independiente sin ánimo de lucro que fomenta una comunidad de código abierto y un conjunto de productos complementarios, capacidades y servicios. • Arquitectura La base para Eclipse es la Plataforma de cliente enriquecido (del Inglés Rich Client Platform RCP). Los siguientes componentes constituyen la plataforma de cliente enriquecido: Página 22 de 82 Maestría en Informática Aplicada en Redes • Plataforma principal - inicio de Eclipse, ejecución de plugins • OSGi - una plataforma para bundling estándar. • El Standard Widget Toolkit (SWT) - Un widget toolkit portable. • JFace - manejo de archivos, manejo de texto, editores de texto • El Workbench de Eclipse - vistas, editores, perspectivas, asistentes Los widgets de Eclipse están implementados por un herramienta de widget para Java llamada SWT, a diferencia de la mayoría de las aplicaciones Java, que usan las opciones estándar Abstract Window Toolkit (AWT) o Swing. La interfaz de usuario de Eclipse también tiene una capa GUI intermedia llamada JFace, la cual simplifica la construcción de aplicaciones basada en SWT. El entorno integrado de desarrollo (IDE) de Eclipse emplea módulos (en inglés plugin) para proporcionar toda su funcionalidad al frente de la plataforma de cliente rico, a diferencia de otros entornos monolíticos donde las funcionalidades están todas incluidas, las necesite el usuario o no. Este mecanismo de módulos es una plataforma ligera para componentes de software. Adicionalmente a permitirle a Eclipse extenderse usando otros lenguajes de programación como son C/C++ y Phyton, permite a Eclipse trabajar con lenguajes para procesado de texto como LaTeX, aplicaciones en red como Telnet y Sistema de gestión de base de datos. La arquitectura plugin permite escribir cualquier extensión deseada en el ambiente, como seria Gestión de la configuración. Se provee soporte para Java y CVS en el SDK de Eclipse. Y no tiene porque ser usado únicamente para soportar otros lenguajes de programación. La definición que da el proyecto Eclipse acerca de su software es: "una especie de herramienta universal - un IDE abierto y extensible para todo y nada en particular". En cuanto a las aplicaciones clientes, eclipse provee al programador con frameworks muy ricos para el desarrollo de aplicaciones gráficas, definición y manipulación de modelos de software, aplicaciones web, etc. Por ejemplo, GEF (Graphic Editing Página 23 de 82 Maestría en Informática Aplicada en Redes Framework - Framework para la edición gráfica) es un plugin de eclipse para el desarrollo de editores visuales que pueden ir desde procesadores de texto wysiwyg hasta editores de diagramas UML, interfaces gráficas para el usuario (GUI), etc. Dado que los editores realizados con GEF "viven" dentro de eclipse, además de poder ser usados conjuntamente con otros plugins, hacen uso de su interfaz gráfica que puede ser personalizada y profesional. El SDK de Eclipse incluye las herramientas de desarrollo de Java, ofreciendo un IDE con un compilador de Java interno y un modelo completo de los archivos fuente de Java. Esto permite técnicas avanzadas de refactorización y análisis de código. El IDE también hace uso de un espacio de trabajo, en este caso un grupo de metadata en un espacio para archivos plano, permitiendo modificaciones externas a los archivos en tanto se refresque el espacio de trabajo correspondiente. Características: La versión actual de Eclipse dispone de las siguientes características: • Editor de texto • Resaltado de sintaxis En cuanto a las aplicaciones clientes, eclipse provee al programador con frameworks muy ricos para el desarrollo de aplicaciones gráficas, definición y manipulación de modelos de software, aplicaciones web, etc. Por ejemplo, GEF (Graphic Editing Framework - Framework para la edición gráfica) es un plugin de eclipse para el desarrollo de editores visuales que pueden ir desde procesadores de texto wysiwyg hasta editores de diagramas UML, interfaces gráficas para el usuario (GUI), etc. Dado que los editores realizados con GEF "viven" dentro de eclipse, además de poder ser usados conjuntamente con otros plugins, hacen uso de su interfaz gráfica personalizable y profesional. • El SDK de Eclipse incluye las herramientas de desarrollo de Java, ofreciendo un IDE con un compilador de Java interno y un modelo completo de los archivos fuente de Java. Esto permite técnicas avanzadas de refactorización y análisis de código. El IDE también hace uso de un espacio de trabajo, en este caso un grupo Página 24 de 82 Maestría en Informática Aplicada en Redes de metadata en un espacio para archivos plano, permitiendo modificaciones externas a los archivos en tanto se refresque el espacio de trabajo correspondiente. • Compilación en tiempo real • Pruebas unitarias con JUnit • Control de versiones con CVS • Integración con Ant • Asistentes (wizards): para creación de proyectos, clases, tests, etc. • Refactorización Asimismo, a través de "plugins" libremente disponibles es posible añadir: • Control de versiones con Subversion, vía Subclipse. • Integración con Hibernate, vía Hibernate Tools. Proyectos Eclipse Eclipse esta compuesto de muchos proyectos diferentes. Algunos proyectos se mencionan a continuación. • El proyecto Eclipse per se que incluye la Plataforma Eclipse. Plataforma Eclipse de Cliente Enriquecido (RCP) y las herramientas de desarrollo de Java (JDT). • Plataforma de herramientas para pruebas y desempeño (de sus siglas en Inglés TPTP) que provee una plataforma que permite a desarrolladores de software construir herramientas de pruebas y desempeño, como son Depuradores, profilers y aplicaciones Benchmark. Página 25 de 82 Maestría en Informática Aplicada en Redes • Proyecto Plataforma de Herramientas Web (WTP) extiende la plataforma Eclipse con herramientas para desarrollar aplicaciones Web en Java EE. Esta compuesta de: Editores de fuentes para HTML, JavaScript, CSS, JSP, SQL, XML, DTD, XSD y WSDL; Editores gráficos para XSD y WSDL; proyectos de naturaleza Java EE, constructores y modelos y un navegador de Java EE; un explorador y asistente para servicios Web y una herramienta de pruebas WS-I; herramientas para acceso a base de datos, filtrado y modelos; y herramientas para manejo de servidores de pruebas unitarias. • Proyecto de herramientas para inteligencia empresarial y generación de reportes (BIRT), un sistema de reporteo Código abierto basado en Eclipse para aplicaciones Web, especialmente aquellas basadas en Java EE. • Proyecto de Edición Visual (VE) una plataforma para crear constructores GUI para Eclipse • Plataforma de Modelado Eclipse (EMF) una plataforma de modelado y generación de código para construir herramientas y otras aplicaciones basadas en un modelo de datos estructurado, desde una especificación de modelo descrita en XMI. • Herramientas de Modelado Generativo (GMT) un grupo de herramientas para modelado por ejemplo para ejecutar transformaciones de modelo QVT. • Plataforma de Editor Gráfico (GEF) permite a los desarrolladores tomar el modelo de una aplicación existente y fácilmente crear un editor de gráficos ricos. • UML2 una implementación de UML 2.0 metamodel para la plataforma Eclipse diseñada para soportar el desarrollo de herramientas de modelado. • Plataforma de comunicaciones de Eclipse Communication Framework (ECF) habilita la creación de aplicaciones de comunicaciones en la plataforma de Eclipse. Página 26 de 82 Maestría en Informática Aplicada en Redes • Proyecto Plataforma de herramientas de Datos (DTP) • Plataforma de Herramientas Paralelas (PTP) entrega una plataforma de herramientas paralelas portables, escalables, basadas en estándares que habilita la integración de herramientas específicamente desarrolladas para computadoras con arquitectura paralela. • Plataforma de Cliente Rico incluido (eRCP) la intención es extender la plataforma de Cliente Rico (de las siglas en Inglés RCP) para dispositivos incluidos. eRCP es en general un grupo de componentes que son subgrupos de los componentes RCP. Básicamente habilita el mismo modelo de aplicaciones usado en maquinas de escritorio para ser usados en dispositivos. • Plataforma de Desarrollo de Software para Dispositivos (DSDP) es un proyecto de desarrollo de software colaborativo de código abierto dedicado a proveer una plataforma extendible basada en estándares para cubrir un amplio rango de necesidades en el área del desarrollo de software para dispositivos usando la plataforma de Eclipse. Proyectos IDE en Lenguajes • AspectJ es una extensión del lenguaje Java orientado a aspectos. • Proyecto de herramientas de desarrollo en C/C++ (CDT) trabaja para proveer un Ambiente integrado de desarrollo completamente funcional para C y C++ para la plataforma Eclipse. • Subproyecto IDE de COBOL para Eclipse (COBOL) construye un Ambiente Integrado de Desarrollo (IDE) completamente funcional para COBOL en la plataforma Eclipse. • Herramientas de Desarrollo de Java (JDT) provee las herramientas que implementan un IDE de Java, soportando el desarrollo de cualquier aplicación Java, incluyendo los plug-ins de Eclipse. Página 27 de 82 Maestría en Informática Aplicada en Redes • Photran (photran) es un IDE completamente funcional para Fortran con soporte para Refactorización. • Proyecto IDE PHP trabaja para proveer un IDE completamente funcional para PHP para la plataforma Eclipse. • Wolfram Workbench es un IDE basado en Eclipse (también disponible como plugin para Eclipse) para el lenguaje Mathematica. • PyDev un IDE completamente funcional para python con soporte para Refactorización, y depurador gráfico. 1.7 Lomboz Lomboz es un plugin gratuito y abierto para el entorno de desarrollo J2EE. Tiene medios para desarrollar, probar, perfilar y desplegar aplicaciones web, Java, J2EE y EJB. Lomboz admite la mayoría de los runtimes de servidores de aplicaciones J2EE estándar, y admite la mayoría de los runtimes populares de código abierto tales como JOnAS. Al igual que JOnAS, Lomboz está hospedado y desarrollado por el consorcio ObjectWeb (el grupo de desarrollo se llama a sí mismo "eteration"). Esto está distribuido bajo LGPL. Lomboz suministra: 1. Asistentes para crear y ensamblar módulos J2EE. 2. editor JSP y asistente para el código. 3. Compatibilidad con JBoss, WebLogic, Apache Tomcat, JOnAS y JRun. 4. generadores de código EJB basados en XDoclet. 5. Generadores de Servicios Web basados en Apache Axis. 1.8 Hibernate Hibernate es un servicio de persistencia objeto/relaciones y consultas para Java. Hibernate facilita a los desarrolladores crear las clases de persistencia utilizando Página 28 de 82 Maestría en Informática Aplicada en Redes el lenguaje Java - incluyendo la asociación, herencia, polimorfismo y composición y el entorno de colecciones Java. Usar JDBC es complejo y muy dependiente de la estructura de los datos. Sería más natural y mucho más sencillo trabajar directamente con objetos, pero es imposible con las BBDD relacionales, y las BBDD orientadas a objeto están todavía muy poco desarrolladas. La mejor opción entonces es utilizar un motor de persistencia, que es el componente software encargado de traducir entre objetos y registros. Un motor de persistencia de código abierto es Hibernate, que nos permitirá hacer cosas como poder guardar un objeto en la base de datos simplemente con session.save(miObjeto) o borrarlo con session.delete(miObjeto). Usa el mecanismo de reflexión de Java, que permite a un objeto en ejecución examinarse y manipularse a sí mismo, en contra de, por ejemplo, JDO, que necesita que modifiquemos los archivos de las clases. Vamos a tener un archivo properties (hibernate.properties) o un archivo xml (hibernate.cfg.xml) para la configuración, una serie de JavaBeans que son las clases a persistir y en las que cada campo se asociará con una columna de la BBDD, y un archivo xml por cada una de estas clases (NombreClase.hbm.xml) que indica el mapping entre objetos y relaciones. Ejemplo de archivo de mapeo: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping.dtd"> <hibernate-mapping> <class name="dbdemo.User" table="users"> <id name="ID" column="LogonId" type="string"> <generator class="assigned"/> </id> <property name="userName" column="Name" type="string"/> <property name="password" type="string"/> Página 29 de 82 Maestría en Informática Aplicada en Redes <property name="emailAddress" type="string"/> <property name="lastLogon" type="date"/> </class> </hibernate-mapping> La etiqueta class del código anterior indica el nombre de la clase que vamos a mapear a la tablar de users en la base de datos. La etiquete Id tiene que ver con el mapeo de la clave primaria de la tabla. La etiqueta del generador le dice a hibernate como debe producir la clave primaria (Hibernate genera una, del tipo que se desee; pero se le debe indicar como), en este caso se a fijado como “asignado”. Si se quiere que hibernate asigne las claves se pueden utilizar las claves uuid.hex y uuid.string. Las etiquetas property le indican a hibernate los atributos del objeto (name) y su campo correspondiente en la tabla dentro de la base de datos. El atributo type es opcional (Hibernate utilizará reflection para conjeturar el tipo para el caso en que no se le indique) 1.9 PERL Practical Extraction and Report Language es un sofisticado lenguaje de programación diseñado a finales de los años 80 por el lingüista norteamericano Larry Wall. PERL combina en forma concisa las mejores características de lenguajes como C, sed, awk y sh. En general, es posible reducir extensos programas escritos en C a pocas líneas de código de un programa PERL, con la ventaja adicional de que corren sin cambio sobre casi cualquier plataforma existente, lo que convierte a PERL en el lenguaje ideal para desarrollo de prototipos y aplicaciones robustas 100% portables. Durante los últimos años la popularidad del lenguaje alcanzó niveles insospechados a raíz de su utilización generalizada en soluciones Web. PERL es el estándar "no oficial" para la construcción de compuertas CGI (Common Gateway Interface) que generan páginas dinámicas en la Web. Junto con las facilidades para el desarrollo de aplicaciones Web, PERL es útil en la resolución de cualquier tarea y posee habilidades para integrarse con sistemas operativos, bases de datos, redes, protocolos, ambientes gráficos, otros lenguajes de programación (Java, C, etc. ), etc. Su versatilidad y eficiencia en el manejo de texto Página 30 de 82 Maestría en Informática Aplicada en Redes y, específicamente, de "expresiones regulares" no tiene equivalente en ningún otro lenguaje de programación actual. Finalmente, es importante mencionar que PERL también es un lenguaje orientado a objetos aunque el programador no está forzado a programar con este esquema. Página 31 de 82