Download Descargar

Document related concepts
no text concepts found
Transcript
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