Title: SAPI, una plataforma para aplicaciones inal
1SAPI, una plataforma para aplicaciones
inalámbricas basada en software open source
- Fecha 26 de Junio de 2003
- Autor Cristian Ferretti
2Temario
- Reuso y Open Source
- Open Source en SAPI
- SAPI Iteración 2 Descripción del proyecto
- SAPI Iteración 2 Arquitectura
- Componentes Open Source Utilizadas
- Infraestructura y Middleware
- Bibliotecas Java
- Herramientas de Desarrollo
- Conclusiones
- Preguntas
- Referencias
3Reuso, conceptos generales
- Reuso
- Simplemente, no reinventar la rueda
- Promesa fundamental ahorro en el desarrollo al
evitar construir todas las componentes necesarias
para un sistema a construir - Reuso oportunista cada programador
- Copiar y pegar trozos de código
- Robo de ideas desde otros proyectos código
fuente, diseño - Quien reusa de esta manera, hereda los
esfuerzos asociados al código, replicando
mantención, testing y verificación, etc. - Reuso sistemático la organización
- Reuso de componentes (rutinas, bibliotecas,
middleware, frameworks) - Evolución y habilitadores
- 70 80 Dominios altamente especializados, como
cálculo numérico netlib - 80 90 Frameworks toolkits, especialmente
interfaces - 90 Lenguajes OO (C, Java). Bibliotecas
estándares de componentes. - Middleware (CORBA, J2EE). Lenguajes de
scripting. Open Source. - Patrones de Diseño.
4Reuso, nuestra experiencia en SAPI
- Crear componentes reusables requiere un esfuerzo
adicional - Una componente no es general hasta que ha sido
usada con éxito en más de un proyecto - No diseñe una componente para ser general.
Diseñe una componente simple. - Si la necesita de nuevo, aplique refactoring.
- Después de algunas iteraciones (2?), puede ser
candidata a convertirse en una componente
reusable - Una componente que ha sido usada en más de un
proyecto con éxito, debe ser mantenida en forma
separada de cada proyecto particular (control de
configuración independiente) - Mover una componente al estatus de reusable no
es gratis! - Moraleja Una componente no es general antes
(por diseño)... es general después (por uso)
5Reuso, nuestra experiencia en SAPI (2)
- Quién paga?
- Cuando una componente reusable quiere ser
utilizada por un proyecto que necesita casi la
misma funcionalidad... Quién paga por el cambio? - Respuesta el proyecto que requiere la
funcionalidad nueva implementa dicha
funcionalidad, y se hace responsable de mantener
compatibilidad hacia atrás - Qué proporción?
- En SAPI, de 80.000 líneas en Java, 5.000
corresponden a componentes reutilizables
desarrolladas in-house - Cuándo?
- Antes del diseño/codificación
6Open Source
- Concepto. Cuándo una componente es Open Source?
- Libre distribución
- Disponibilidad del código fuente
- Permite trabajos derivados
- Además, típicamente (pero no necesariamente)
- Desarrollada por un grupo geográficamente
disperso, coordinado en forma ad-hoc a través de
Internet - Grupo de desarrollo abierto a recibir
contribuciones y cambios en el tronco principal
de distribución - Releases frecuentes
- Comunidad de usuarios de tamaño considerable
(fenómeno de debugging y beta testing
distribuído)
7Open Source (2)
- Más de una licencia
- GNU, obliga a entregar el código fuente de la
componente junto con un desarrollo derivado de
ella. Si el desarrollo incluye una modificación
de la componente misma, obliga a entregar los
fuentes de la modificación - BSD, sin restricciones de distribución o uso,
basta mantener el reconocimiento del trabajo
original - Muchos esquemas intermedios licencias apache,
netscape, etc. - Si no es necesario modificar los fuentes,
cualquiera de estas licencias permite que la
componente sea utilizada en un sistema comercial - Open Source en la industria
- IBM, Sun, RedHat
- Open Source en Motorola
- A nivel de productos Embedded Linux
- A nivel de ingeniería de software SourceForge,
Bugzilla
8Reuso, una perspectiva diferente
- Nuevamente, el objetivo ahorro en el esfuerzo de
desarrollo - Componentes reusables disponibles?
- Mercado de componentes? Muy pequeño (excepto en
infraestructura) - Componentes Open Source
- Infraestructura sistema operativo, administrador
de bases de datos, servidor de aplicaciones Java,
etc. - Bibliotecas Numéricas, Grafos, Interfaces,
HTTP... cientos! - Herramientas Compiladores, IDEs, Herramientas de
construcción - Elegir una componente Open Source
- Cumple mi objetivo?
- Documentación y Soporte (sí, usted tiene el
fuente, pero no tiene tiempo) - Continuidad del proyecto
- No es distinto de evaluar componentes comerciales
- Sólo parece serlo caemos en la tentación de
creer que si es comercial, esas preguntas son
menos relevantes
9Caso SAPI Iteración 2
- Agrega la funcionaldiad Encuesta Inteligente,
sobre la ya existente Cápsulas Personalizadas - Produce delta de código
- Hereda la batería de tests del incremento
anterior - Aplica refactoring
- Utiliza dos componentes reusables a nivel
organizacional Scheduler, para agendamiento de
eventos, y Swarm, herramienta de testing - Infraestructura (sistema operativo, middleware,
base de datos) totalmente open source - Alta reutilización de bibliotecas open source
- Herramientas de desarrollo utilizadas también
open source
10Diagrama de Arquitectura
Motor de Suscripción
BD Suscrip- ción
Internet
Despachador de bajo nivel (Motorola ó Portador)
Motor de Agenda- Miento y Notifiación
Suscripción
Canal de Log
Conección directa ó través de Internet
BD Contenido
Motor de Despacho de Contenido
SMS-C Portador
Interfaz Web _at_ Portal Web del Portador
Motor de Personalización
BD Persona- lización
Suscripción Despacho
BD Log
Motor de logging
Suscripción
11Infraestructura y Middleware
- RedHat Linux
- Sistema operativo de destino, y plataforma de
pruebas - MySQL
- Administrador de Bases de Datos
- Utilizado como Data Store para J2EE, incluyendo
replicación - Kannel
- Conección con SMS-C / Simulación de SMS-C
utilizando un módem GSM - Apache
- Servidor Web para las componentes estáticas
- Tomcat
- Servlet Container
- OpenSSL / OpenSSH
- Comunicación segura y encriptada
- JBoss
- EJB Container
- Velocity
- Framework para uso de plantillas
- Usado para generar contenido Web dinámico a
través de servlets
12Bibliotecas Java
- Java Standard Library / Extensions
- Colecciones (Iterator, HashMap, Hashtable,
LinkedList, TreeMap, TreeSet, Vector) - Manipulación de fechas (Date, DateFormat,
Calendar, GregorianCalendar) - Properties
- JDBC
- Mail
- Servlets, EJB, JNDI
- IO
- AWT, Swing
- Java Media Framework (JMF)
- HTTPClient
- Conección cliente HTTP 1.1 incluyendo soporte de
autentificación y cookies - util.concurrent
- Clases para soportar el desarrollo de
aplicaciones concurrentes - Pools de threads, primitivas de sincronización,
etc. - Xerces
- Parser XML para Java
- Archivos de configuración y comunicación con
componentes externas
13Bibliotecas Java (2)
- Element Construction Set (ECS)
- Creación de contenido para markup languages
- Usada para generación de contenido WAP
- Log4J (Log for Java)
- Log de sucesos al nivel de aplicación
- Usado para logs del servicio y debugging
- Torque
- Framework para mapeo Objeto-Relacional
- Java Graph Editing Framework, GEF
- Tipo de datos, algoritmos y visualización de
grafos - Usado para una demo
14Diagrama de Arquitectura (2)
J2EE Application Server
Internet
Servlet Container Presentation Layer
EJB Container
Despachador de bajo nivel (Motorola ó Portador)
Scheduler Beans
EJB Local Method Invocation
Suscripción
User Profile Beans
Conección directa ó través de Internet
Subscription Beans
SMS-C (Portador))
Interfaz Web _at_ Portal Web del Portador
Content Beans
Suscripción Despacho
RDBMS Como capa de persistencia para J2EE
Suscripción
15Herramientas de Desarrollo
- Ant
- Herramienta de construcción, estilo make,
estándar en la comunidad Java - Parte del Proyecto Apache Jakarta
- Eclipse
- Entorno Integrado de Desarrollo (IDE)
- Extensible mediante plug-ins
- JEdit
- Editor Inteligente de código fuente Java
- Extensible mediante plug-ins
- JMeter
- Realiza pruebas de carga de servicios Web
- JUnit
- Framework de pruebas unitarias para Java
- Cactus
- Extensión de JUnit para pruebas unitarias en J2EE
- Cygwin
- Utilitarios UNIX y capa de emulación POSIX para
Win32
16Conclusiones
- El reuso sistemático al interior de una
organización requiere de un esfuerzo adicional
para la mantención y configuración de dichas
componentes - Desde el punto de vista de un proyecto, la
disponibilidad de componentes reusables al inicio
permite apalancar el esfuerzo de desarrollo - Existe una GRAN cantidad de componentes Open
Source disponibles en Internet - Como parte de la planificación asociada al
diseño, pueden tomarse las decisiones para
explorar y/o utilizar componentes reusables, en
particular Open Source - El reuso efectivo requiere de un esfuerzo de
marketting Para poder reusar una componente,
es necesario saber que existe! - Realizar una búsqueda al inicio de un proyecto
puede ahorrar mucho esfuerzo de desarrollo
Freshmeat, SourceForge, etc.
17Preguntas?
18Gracias !
- Esta presentación está disponible en
- http//www.motorola.com/cl/seminario
- Referencias
- SourceForge
- Freshmeat
- mySQL
- JBoss
- Java_at_sun
- IBM Developerworks
- Proyecto Jakarta
- Alphaworks
- Open Source Initiative (OSI)
- Biblioteca util.concurrent
- Biblioteca HTTPClient
- Framework JUnit
- Cygwin
- RedHat Linux
- JEdit
- The Cathedral and the Bazaar
- Why software reuse has failed and how to make it
work - Netlib
- Worse is better
- GNU
- Proyecto Apache
- Graph Editing Framework
19SAPI, una plataforma para aplicaciones
inalámbricas basada en software open source
20Modelo J2EE de tres capas
21Fast V-Model
MIL_01
MIL_02
MIL_02
MIL_03
MIL_05
MIL_01
Test Execution and Release
MIL_04
4s
1s
3s
1s
3s