Manual desarrollador

23
MANUAL DEL DESARROLLADOR Proyecto (codename) ZERO Primer Concurso Universitario de Software Libre de Castilla-La Mancha. Segundo Concurso Universitario de Software Libre Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Transcript of Manual desarrollador

Page 1: Manual desarrollador

MANUAL DEL DESARROLLADORProyecto (codename) ZERO

Primer Concurso Universitario de Software Libre de Castilla­La Mancha.

Segundo Concurso Universitario de Software Libre

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 2: Manual desarrollador

Índice de contenidoAcerca de este documento.........................................................................................................................5¿Qué se debe saber?...................................................................................................................................6El entorno de desarrollo............................................................................................................................7

NetBeans..........................................................................................................................................7Sistema operativo.............................................................................................................................7Apache Tomcat.................................................................................................................................7MySQL.............................................................................................................................................8JRE...................................................................................................................................................8MySQL Connector driver ...............................................................................................................8Umbrello y DIA...............................................................................................................................8Otras herramientas...........................................................................................................................9

La estructura del proyecto........................................................................................................................10ZeroV1................................................................................................................................................10

Web Pages .....................................................................................................................................10almacen, cliente, artículo, etc....................................................................................................10css .............................................................................................................................................10imagenes ...................................................................................................................................11js.................................................................................................................................................11meta­inf y web­inf.....................................................................................................................11sdmenu......................................................................................................................................12

Configuration Files........................................................................................................................13Server Resources............................................................................................................................13Source Packages.............................................................................................................................13

servlets.......................................................................................................................................13Libraries ........................................................................................................................................14

ModuloTPVZero.................................................................................................................................14Source Packages.............................................................................................................................14

applets........................................................................................................................................14imagenes....................................................................................................................................14

Test packages..................................................................................................................................14Libraries.........................................................................................................................................14Test libraries...................................................................................................................................14

ClasesGeneralesZero..........................................................................................................................15Source Packages.............................................................................................................................15

almacenamientoDAO................................................................................................................15beans..........................................................................................................................................16

Test packages..................................................................................................................................17Libraries.........................................................................................................................................17

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 3: Manual desarrollador

Test libraries...................................................................................................................................17La base de datos.......................................................................................................................................18

Tablas..............................................................................................................................................19El servidor de Servlet/JSP Apache Tomcat.............................................................................................21Epílogo.....................................................................................................................................................23

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 4: Manual desarrollador

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 5: Manual desarrollador

Acerca de este documentoEste   documento   recoge  de   manera   detallada   información   acerca   de   las   herramientas 

utilizadas para llevar a cabo el desarrollo del proyecto, de la estructura del mismo así como de las distintas partes de esta estructura.

El objetivo es orientar a un futuro desarrollador en la organización de las aportaciones que éste haga en el desarrollo. De ahí la importancia de detallar minuciosamente el contenido de cada uno de las partes que incluye el proyecto.

Al ser un documento orientado a un usuario avanzado, los procesos de instalación de las aplicaciones básicas necesarias para el desarrollo no han quedado recogidas en este documento, es decir, no se explica como se instala el sistema operativo ni el IDE de desarrollo al considerarse información que se sale del ámbito de este manual.

Para   completar   la   instalación  del   resto   de   las   herramientas   necesarias   para  el   correcto funcionamiento del entorno, se invita al desarrollador a que lea la Guía rápida de instalación que recoge los pasos necesarios para configurar el contenedor de servlets y servidor de aplicaciones Apache Tomcat, la base de datos, la JRE e incluso la copia de seguridad de la base de datos.

Evidentemente, el contenido de este documento estará sujeto a numerosos cambios conforme se generen nuevas revisiones de la aplicación. 

Esta versión del documento corresponde a la revisión 0.0.1­beta de la aplicación.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 6: Manual desarrollador

¿Qué se debe saber?Como  bien   se   ha   comentado   anteriormente,   este   documento   está   destinado  a   aquellos 

usuarios avanzados que deseen conocer la estructura del proyecto con el fin de participar en el desarrollo del mismo. Es por eso que resulta casi imprescindible tener unas nociones básicas de ciertas tecnologías para poder llevar a cabo un desarrollo eficiente. 

Para el desarrollo del proyecto, se consideraron desde el principio únicamente herramientas libres, desde el sistema operativo hasta la suite ofimática necesaria para realizar la documentación.

En primer lugar, es muy recomendable revisar toda la documentación generada durante la etapa de elicitación de requisitos y análisis. Esta documentación engloba las entrevistas con los clientes, las historias de usuario, los diagramas UML, como son el diagrama de casos de uso, el diagrama de clases y el diagrama de secuencia, así como todo lo relativo al diseño de la base de datos; Modelo Entidad­Relación, el esquema relacional... Únicamente conociendo el proceso de ingeniería del software llevado a cabo se puede conocer el alcance del trabajo que se ha hecho. Por supuesto, toda esta documentación está disponible para descarga desde la sección de documentos de la forja.

El lenguaje de programación elegido fue java. Hay varias razones para apostar por java en el desarrollo de software, cabe destacar el hecho de que java es un lenguaje orientado a objetos, muy maduro, potente, con una gran comunidad de usuarios en todo el mundo, muy especialmente en el ámbito educativo, una extensa documentación y con una curva de aprendizaje muy rápida. Esto permite obtener resultados rápidamente. 

Por   la   naturaleza   del   proyecto,   basado   en   una   arquitectura   cliente­servidor,   se   hacía imprescindible hacer uno de las tecnologías orientadas a internet de las que dispone java. 

J2EE es una plataforma de programación—parte de la Plataforma Java—para desarrollar y ejecutar software de aplicaciones en Lenguaje de programación Java con arquitectura de n niveles distribuida, basándose ampliamente en componentes de software modulares ejecutándose sobre un servidor de aplicaciones.

Este   tipo   de   desarrollos,   además   de   java,   utilizan   habitualmente   otros   lenguajes   de programación propios del diseño web como son HTML, javascript y XML.

También se hace necesario conocer SQL (Structured Query Language). SQL es un lenguaje declarativo de acceso a  bases de datos  relacionales que  permite  especificar diversos   tipos de operaciones sobre  las  mismas. Es un estandar ampliamente  utilizado y que se  empleará para realizar las consultas oportunas a la base de datos MySQL que utiliza la aplicación.

Es   recomendable   que   cualquier   nueva   funcionalidad   que   se   desee   implementar   quede perfectamente  documentada y  especialmente   interesante  resulta  utilizar para ello el  modelado UML tal  y como se ha hecho hasta ahora. El  anexo A  incluye una descripción acerca de los diagramas que se han realizado en esta primera iteración del desarrollo.

Con todo esto, se está en disposición de entender todo el código generado.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 7: Manual desarrollador

El entorno de desarrollo

NetBeansPara llevar a cabo el proyecto hemos usado el IDE de desarrollo NetBeans en su versión 

6.0.x sobre distintas distribuciones de GNU/Linux, todas ellas basadas en Debian. Principalmente el trabajo se ha llevado a cabo sobre Ubuntu Feisty Fawn 7.04 x86. En el siguiente enlace  se puede descargar la versión del IDE que se ha utilizado para el desarrollo:

 http://download.netbeans.org/netbeans/6.0/final/bundles/netbeans­6.0.1­ml­javaee­linux.sh

Sistema operativoY aquí en este otro enlace, la versión 7.04 de Ubuntu:

http://www.ubuntu.com/getubuntu/download

Sin embargo, no es la única opción. Gran parte del desarrollo se ha hecho sobre Molinux 3.0, una distribución basada en Debian y desarrollada por  la Junta de comunidades de Castilla  la Mancha que se puede descargar desde aquí:

http://www.molinux.info/index.php?option=com_remository&Itemid=0&func=select&id=34

Apache TomcatTomcat es un proyecto desarrollado por la fundación Apache. Es un contenedor de servlets 

que puede funcionar como servidor web autónomo pero que habitualmente se integra con el propio servidor Apache. Tiene una licencia libre de Apache. 

La versión utilizada para el desarrollo ha sido la 6.0.16. Las características más destacables de esta versión son:

• Implementado de Servlet 2.5 y JSP 2.1

• Diseñado para funcionar en Java SE 5.0 y posteriores

Se puede descargar desde el siguiente enlace:

http://tomcat.apache.org/download­60.cgi

La instalación y configuración necesaria para el funcionamiento del mismo está recogida en la guía rápida de instalación. Para más información acerca del proyecto Tomcat, visitar la página del desarrollo a través del enlace anterior.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 8: Manual desarrollador

MySQLMySQL es un motor de base de datos  relacional, multihilo y multiusuario ampliamente 

utilizado   no   sólo   en   proyectos   de   software   libre   sino   también   en   multitud   de   desarrollos comerciales  ya   que  dispone de  dos   versiones,  una  comercial  y   otra   libre   con  licencia  GPL. MySQL pertenece a Sun Microsystems desde enero de 2008.

En   las   distribuciones   de   linux   anteriormente   mencionadas,   está   disponible   desde   los repositorios. De nuevo se insta al desarrollador a consultar la guía rápida de instalación para saber como configurar la base de datos correctamente. Por supuesto, está disponible para descarga desde su página oficial a través del siguiente enlace:

http://dev.mysql.com/downloads/mysql/5.0.html#linux

Para   facilitar   la   administración  de   la   base   de   datos   se   han   usado  principalmente  dos herramientas, PHPMyAdmin y MySQLAdministrator.

JREJRE es el acrónimo de Java Runtime Environment (entorno en tiempo de ejecución Java) y se 

corresponde con un conjunto de utilidades que permiten la ejecución de programas escritos en java sobre distintas plataformas. (Linux, windows, *BSD, Solaris....).

El JRE está formado por una JVM (máquina virtual Java) que es el programa que interpreta el código Java y además por las librerías de clases estándar que implementan el API de Java. Ambas JVM y API deben ser consistentes entre sí, de ahí que sean distribuidas de forma conjunta.

Basta con disponer de la  JRE para ejecutar las aplicaciones desarrolladas en Java, mientras que para desarrollar nuevas aplicaciones en dicho lenguaje es necesario un entorno de desarrollo, denominado   JDK,   que   además   del   JRE   (mínimo   imprescindible)   incluye,   entre   otros,   un compilador para Java. Cabe destacar NetBeans y Eclipse. De nuevo, se puede descargar de aquí:

http://javadl.sun.com/webapps/download/AutoDL?BundleId=12791

MySQL Connector driver Librería disponible para descarga desde la web del mysql que permite comunicarnos con la 

base de datos. Si no existe ya, hemos de tenerla en la carpeta lib del Tomcat.

http://dev.mysql.com/downloads/connector/j/5.1.html

Umbrello y DIAUmbrello es una herramienta libre para crear y editar diagramas UML, que ayuda en el 

proceso del desarrollo de software. Está diseñado principalmente para KDE, aunque funciona en otros   entornos   de   escritorio   como   Gnome.   También  esta   disponible   para   descarga  desde  los repositorios de Ubuntu/Molinux y a través de la página del proyecto:

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 9: Manual desarrollador

http://uml.sourceforge.net/download.php

DIA   es   una   aplicación  gráfica   de   propósito   general   para   la   creación   de   diagramas, desarrollada como parte del proyecto GNOME. Está concebido de forma modular, con diferentes paquetes  de  formas para diferentes necesidades. Disponible  para distintas  plataformas  (Linux, windows...),   destaca  por   su   sencillez   de   uso.  Al   igual   que   Umbrello,   esta   disponible   en   los repositorios de la distribución y aquí:

http://www.gnome.org/projects/dia/downld.html

Estas  dos  herramientas  han  sido utilizadas para  realizar  los   distintos  diagramas que   se crearon el la fase de análisis.

Otras herramientas.Otras herramientas utilizadas han sido The Gimp, para el tratamiento esporádico de alguna 

imagen, OpenOffice para crear la documentación y virtualBox para disponer de un servidor virtual donde hacer las pruebas de conexión cliente­servidor.

Una vez finalizada la instalación de todas las herramientas necesarias, podemos empezar a trabajar.

Recordar  por último que, para probar  la  aplicación,  independientemente de  que se  esté trabajando en local o desde un ordenador cliente, basta disponer de un navegador web que soporte la máquina virtual de java (necesaria para visualizar el módulo de TPV), para poder probar la aplicación. Se han  realizado pruebas desde clientes Windows y Linux y el   resultado ha sido satisfactorio en ambos casos.

 

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 10: Manual desarrollador

La estructura del proyectoPara empezar, en más fácil seguir este manual si se  tiene abierto NetBeans con los tres 

proyectos incluidos en el workspace.

Es probable que al  abrir  ZeroV1  sea necesario   resolver algún problema de  referencias, relativas   seguramente a   los   otros   dos  proyectos   que   forman parte   de  la   estructura  como son ModuloTPVZero  y  clasesGeneralesZero.  Basta   con  abrir   estos  proyectos  para  solucionar  el problema. Podemos movernos ahora por la estructura en forma de árbol. Procedemos a comentar cada uno de los directorios y su contenido.

ZeroV1

Web Pages Esta carpeta contiene todas las páginas web de las que dispone el proyecto web así como las 

subcarpetas correspondientes a   las distintas  funcionalidades  del  mismo. Corresponde casi por completo a la capa de presentación dentro del paradigma del modelo de tres capas, al cual se hace referencia en el  Anexo A. Si es necesario crear una nueva funcionalidad, entonces hay que crear una nueva subcarpeta que identifique de forma unívoca a esta nueva funcionalidad. Para nombrar una subcarpeta utilizaremos un nombre en singular, en minúscula y sin signos de puntuación como tildes, diéresis o la letra  ñ, por ejemplo,  puntoverde. Esta nueva subcarpeta contendrá todas las páginas web destinadas a la gestión del puntoverde.

almacen, cliente, artículo, etc

Estas subcarpetas, como se ha comentado en el ejemplo, contienen las páginas web relativas a  tareas propias de cada una de estas  funcionalidades.  Por ejemplo,  la carpeta  articulo  ha de contener  nuevoArticulo.jsp,   listadoArticulo.jsp,   bienvenidaArticulo.html,   etc.   Las   páginas   web incluidas en estas subcarpetas han de nombrarse, al igual que con las carpetas, evitando signos de puntuación o especiales. Por ejemplo: miNuevaFuncionalidad.jsp.

css 

Esta subcarpeta contiene todas las hojas de estilo (excepto la del menú) necesarias para la correcta presentación de las páginas web. Hay que usar hojas de estilo siempre que se pueda evitando  en   la   manera   de   lo   posible   atributos   en   las   etiquetas   de   maquetado.   Por   ejemplo, disponemos de   una  hoja   de   estilos   que   se   utiliza   exclusivamente  para   aquellas   páginas web dedicadas a la inserción de registros, Ésta se llama tablaInsersionCSS.css. Si se desea crear una nueva hoja de estilos es conveniente usar un nombre lo más  identificativo posible. Si se cree conveniente disponer de una hoja de estilos para las páginas destinadas al borrado de los registros, independientemente   de   lo   que   estemos   borrando,   podemos   llamarla   entonces 

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 11: Manual desarrollador

borraRegistrosCSS.css y aplicarla en todas aquellas páginas web que creamos convenientes con el fin de que guarden una similitud en cuanto a la presentación.

imagenes 

Contiene las imágenes necesarias para la maquetación excepto las del menú, las cuales están incluidas en su correspondiente carpeta. 

js

Esta carpeta incluye los ficheros  javascript  que utilizaremos en nuestro proyecto web. Es recomendable que todo el código  javascript  esté en ficheros  *.js  dentro de esta carpeta y sean referenciados mediante enlaces en las páginas web que los usen. 

meta­inf y web­inf

Estas   dos   carpetas   son   generadas   automáticamente   por   NetBeans   y   su   contenido   es imprescindible para el correcto funcionamiento de la aplicación por lo que se debe saber lo que se quiere hacer y para qué con el fin de no deteriorar su contenido. 

La carpeta web­inf contiene un fichero llamado web.xml que es el descriptor de despliegue para la aplicación. Define varios parámetros que son usados cuando se despliega la aplicación en el contenedor de Servlets/JSP Tomcat como por ejemplo el punto de entrada de la aplicación web. En él, se hace referencia a los servlets, la página de inicio, o welcome­file­list y el DataSource del pool de conexiones del cual se habla a continuación.

La carpeta meta­inf contiene el fichero context.xml. En este fichero es en el que realmente especificaremos los parámetros de conexión a una base de datos determinada. Deberá existir una entrada <Resource> por cada base de datos que se vaya a emplear y su nombre deberá coincidir con el indicado en el fichero web.xml

A continuación se muestra la configuración del pool de conexiones de la base de datos:

<?xml version="1.0" encoding="UTF­8"?><Context path="/ZeroV1" docBase="ZeroV1"debug="5" reloadable="true" crossContext="true"><Resource name="jdbc/mysqlDS" auth="Container"type="javax.sql.DataSource"maxActive="20" maxIdle="5" maxWait ="100"username="root" password="1234"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/zero?autoReconnect=true"/></Context>

El elemento <Context> hace referencia al contexto donde este recurso es válido, esto es, a la aplicación que se está desplegando. Sus propiedades path y docBase hacen referencia al nombre de dicha aplicación.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 12: Manual desarrollador

Las propiedades de configuración de <resource> son las siguientes:

name: nombre JNDI. Debe ser el mismo nombre que el indicado en web.xml.

auth: igual que <res­auth> en el fichero web.xml.

type: igual que <res­type> en el fichero web.xml.

username: usuario para acceder a la base de datos.

password: su contraseña.

driverClassName: nombre completo de la clase con el driver JDBC

url: url de conexión a la base de datos

maxActive: número máximo de instancias activas simultáneas para esta base de datos.

maxIdle: número máximo de conexiones simultáneas sin actividad.

maxWait:   tiempo   en   milisegundos   que   esperará   el   sistema   antes   de   generar   una excepción cuando se le solicita una nueva conexión y no haya ninguna disponible.

validationQuery:  Consulta SQL que puede usarse para comprobar  la validez de una conexión. Debe ser un SELECT y devolver al menos una fila.

Es  imprescindible por  tanto que  la  base de datos  esté  correctamente configurada y que disponga de un usuario “root” cuya clave sea “1234”.

sdmenu

Esta carpeta contiene todo lo relativo al menú que se carga a la izquierda en la ventana de administración general. El menú se referencia en principal.jsp. La subcarpeta sdmenu que contiene sdmenu esta formada por los ficheros *js, la hoja de estilos del menú y las imágenes.

La estructura del fichero menu.html es bastante intuitiva y añadir nuevas entradas al mismo no supone ninguna dificultad. Basta  con echarle un vistazo para comprobar que el código es siempre igual y que únicamente hay copiar y pegar el código de una entrada para tener otra nueva.

El resto de páginas corresponden a la página de inicio de sesión  index.jsp,  la página del usuario administrador, principal.jsp la cual esta dividida en 4 frames que contienen cabecera.jsp,  pie.html, bienvenida.jsp y menu.html, y la página principal del punto de venta terminalTPV.jsp en la cual se carga el módulo del TPV. 

Destacar el fichero  cabecera.jsp. En un principio, se pensó en él como un fichero HTML estático, sin embargo, se optó por usar un *.jsp al considerar que era el mejor lugar para incluir un cerrar sesión. 

Si   fuese necesario   añadir  nuevas   páginas  web   en   la   raiz   del   directorio  web pages,   es importante considerar la categorización comentada anteriormente donde cada funcionalidad de la aplicación   dispone   de   una   subcarpeta   donde   almacenar   las   nuevas   páginas   que   resultasen 

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 13: Manual desarrollador

necesarias.   Una   vez   más   se   hace  incapié   en   el   hecho   de   utilizar   nombres   significativos,   en minuscula, en singular y que no contentan caracteres especiales.

Configuration FilesEsta carpeta contiene, como su propio nombre indica archivos de configuración. Por un lado 

el context.xml, el cual hemos detallado anteriormente y el manifest.xml. Necesario para generar el paquete donde se construye la aplicación.

Server ResourcesEsta carpeta no contiene actualmente ningún fichero.

Source PackagesSource Packages contiene los servlets, que son los ficheros que están en el lado del servidor 

y que forman parte de la capa de la lógica de negocio de la aplicación y permiten comunicar la capa de presentación con la capa de persistencia o de datos. El proyecto ClasesGeneralesZero incluye el resto de clases de control de la capa de la lógica de negocio. Este proyecto se detalla más adelante.

servlets

Un servlet es un objeto que se ejecuta en un servidor o contenedor JEE, fue especialmente diseñado para ofrecer contenido dinámico desde un servidor web, generalmente en HTML.

Un servlet es un objeto Java que implementa la interfaz javax.servlet.Servlet o hereda alguna de  las clases más convenientes para un protocolo específico (ej:   javax.servlet.HttpServlet).  Al implementar esta interfaz el servlet es capaz de interpretar los objetos de tipo HttpServletRequest y HttpServletResponse quienes contienen la información de la página que invocó al servlet.

Cada servlet  desempeña una  función diferente y  por  tanto el  código es  sustancialmente distinto al contrario que ocurre con las clases generales y las clases *DAO,  las cuales tienen todas una estructura parecida.

LoginServlet  es   el   responsable   de   la   autenticación  de   los   usuarios   en   la   aplicación. Comprueba el usuario, la contraseña y si el usuario se encuentra ya conectado. 

DesconexionServlet es el responsable de finalizar la sesión del usuario. Actualizando de esta forma la base de datos y delvolviendo al usuario a la página de entrada.

DevolucionServlet  se   encarga  de  las  peticiones de devolución de artículos  durante una compra. 

VentaServlet es el encargado de proporcionar la información necesaria en las consultas que realiza el TPV, enviándole a éste los artículos solicitados.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 14: Manual desarrollador

Libraries Esta   carpeta   contiene   las   librerias   externas   del   proyecto,   necesarias   para   que   funcione 

correctamente como son la JDK en su versión 1.6, las librerías propias del contenedor de servlets y servidor   web   Apache   Tomcat   6.0.16   y   la   librería   de   clases  clasesGeneralesZero.  Podemos consultar todos los proyectos importados (ModuloTPVZero) en las propiedades de esta carpeta. 

ModuloTPVZeroEste proyecto, de tipo class library, depende de ZeroV1 y de clasesGeneralesZero por lo 

tanto, en ningún caso puede funcionar de forma autónoma ya que la iteración con la base de datos se hace a través de un tunneling entre esta class library y el correspondiente servlet del proyecto web. 

El   llamado  "tunneling",   quizás   traducible  como   "atravesar   un   tunel"   o   algo   parecido, significa transmitir información que sigue un protocolo por medio de otro. En nuestro caso se llama "HTTP tunneling" ya que usamos el protocolo HTTP para transmitir la información binaria.

Source Packages

applets

Esta carpeta incluye los applets del módulo TPV. En principio, únicamente se dispone de un applet llamado terminalTPV.java. Se han utilizado Swing, que es una biblioteca gráfica para Java que forma parte de las Java Foundation Classes (JFC). Incluye widgets para interfaz gráfica de usuario tales como cajas de texto, botones, desplegables y tablas.

Además, incluye la clase tablaArticulos.java que establece el modelo del jtable donde se cargan los artículos que se venden.

imagenes

Contiene las imágenes necesarias para la interfaz del TPV.

Test packagesEsta carpeta esta vacía.

LibrariesContiene la JDK 1.6.

Test librariesContiene JUnit 4.1 y Junit 1.8.2.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 15: Manual desarrollador

Uno de los problemas que se nos plantearon durante el desarrollo fue la integración del applet   del   TPV  en   el   proyecto   web,   incluímos   por   tanto   un   pequeño  tutorial   acerca  de   la integración del applet con un JSP que aparece en la documentación de NetBeans:

http://qa.netbeans.org/modules/webapps/promo­e/applet/applet­testspec.html

ClasesGeneralesZeroCon el fin de paquetizar en la mayor medida la estructura del proyecto, se ha convenido 

disponer de un proyecto adicional de tipo librería de clases destinado exclusivamente a almacenar gran parte de las funciones propias de la capa de la lógica de negocio.

Source Packages

almacenamientoDAO

Este paquete contiene las clases que nos permiten manipular las tablas de la base de datos. En ellas se encuentran los métodos básicos necesarios para trabajar con dichas tablas, como son inserción, borrado, consulta y actualización. 

La estructura es muy parecida en  todas en ellas, en primer  lugar,   la declaración de  las variables, a continuación un constructor que construye, valga la redundancia, las sentencias que se le enviarán al motor de base de datos y por otra los métodos correspondientes a cada una de las sentencias, que son al fin y al cabo los que insertan, borran, consultan y actualizan registros. 

Para nombrar a las mismas se ha seguido un procedimiento muy simple, recurrir al nombre de las tablas de la base de datos seguido de DAO, quedando muy claro de esta manera la función de estas clases. Únicamente así se consigue una paquetización completa de la estructura del proyecto.

El contenido, muy parecido en todas ellas es algo similar al siguiente código:public class MiClaseDAO{

private Connection con;private PreparedStatement pstmtInsertar;private PreparedStatement pstmtBorrar;private PreparedStatement pstmtActualizar;....

public UsuarioDAO(Connection con) throws SQLException{this.con = con;

      pstmtInsertar = con.prepareStatement("INSERT INTO...");      pstmtBorrar = con.prepareStatement("...");

....}

public ResultSet insertar(MiClase c) throws SQLException {         pstmtInsertar.clearParameters();

      pstmtInsertar.setString(1,c.getCampo1());         pstmtInsertar.setDate(2,c.getCampo2());

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 16: Manual desarrollador

         pstmtInsertar.setInt(3,c.getCampo3());....

         pstmtInsertar.executeUpdate();            return pstmtInsertar.getResultSet();     

     }

     public ResultSet borrar(TipoMiClase c) throws SQLException {         pstmtInsertar.clearParameters();

....      return pstmtBorrar.getResultSet();

     }

      public ResultSet actualizar(TipoMiClase c) throws SQLException {         pstmtActualizar.clearParameters();

.....           return pstmtActualizar.getResultSet();      }

....

}

beans

Los beans construyen los objetos que le pasamos a los métodos de las clases *DAO y que nos permiten hacer las consultas a la base de datos. 

Como en el caso anterior, se ha seguido el procedimiento de disponer de una clase general por cada tabla de la base de datos, con el fin de modularizar al máximo posible la estructura del proyecto.

El contenido de estas clases viene a ser algo similar a lo siguiente: public class MiClase{    /* Variables locales de la clase */    int idMiClase;    String nombreMiClase;        /* Constructor de la clase */    public MiClase(int idMiClase, String nombreMiClase)    {        this.idMiClase = idMiClase;        this.nombreMiClase = nombreMiClase;    }        /* Metodos de consulta */    public int getIdMiClase()    {        return this.idMiClase;    }    public String getNombreMiClase()    {        return this.nombreMiClase;    }    

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 17: Manual desarrollador

    /* Metodos de modificacion */    public boolean setIdMiClase(int idMiClase)    {        this.idMiClase = idMiClase;        return true;    }    public boolean setNombreMiClase(String nombreMiClase)    {        this.nombreMiClase = nombreMiClase;        return true;    }}

La estructura es si no igual, si muy parecida en todas las clases generales. 

Esta estructura se ha hecho así para no duplicar código, de esta forma, tanto el proyecto web como el módulo de TPV pueden hacer uso de las clases disponibles con importar la librería.

Test packagesEsta carpeta esta vacía.

LibrariesContiene la JDK 1.6.

Test librariesContiene JUnit 4.1 y Junit 1.8.2.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 18: Manual desarrollador

Base de datosLa versión del motor de base de datos utilizado para el desarrollo ha sido la 5.0.38. Como se 

comentó al principio de este documento, para la administración de la base de datos se ha utilizado una   herramienta   gráfica,   fácil   e   intuitiva.   Podemos   utilizar   PHPMyAdmin,   para   hacer modificaciones en la base de datos, añadir, borrar, modificar y actualizar registros y tablas.

La ilustración anterior muestra la interfaz de la herramienta y además nos sirve para ver las tablas que forman parte en el momento de la publicación de este manual. En la página web del proyecto PHPMyAdmin podemos encontrar multitud de documentación sobre éste. 

Las tablas, como se puede comprobar empiezan siempre por mayúscula y están en singular. Una vez más, se insiste en mantener este patrón a la hora de crear nuevas tablas. Por ejemplo, si deseamos   crear   una   nueva   tabla,   para   almacenar   los   pedidos   a   proveedor,   la   llamaríamos PedidoProveedor. 

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 19: Manual desarrollador

Podemos crear nuevas tablas de la siguiente forma:CREATE TABLE `Almacen` (   `IdAlmacen` int(3) NOT NULL auto_increment,   `Domicilio` varchar(50) collate utf8_spanish_ci default NULL,   `CodigoPostal` varchar(5) collate utf8_spanish_ci default NULL,   `Poblacion` varchar(50) collate utf8_spanish_ci default NULL,   `Provincia` varchar(20) collate utf8_spanish_ci default NULL,   `Telefono1` varchar(10) collate utf8_spanish_ci default NULL,   `Movil` varchar(10) collate utf8_spanish_ci default NULL,   `Fax` varchar(10) collate utf8_spanish_ci default NULL,   `Mail` varchar(50) collate utf8_spanish_ci default NULL,   `NombreAlmacen` varchar(50) collate utf8_spanish_ci NOT NULL,   PRIMARY KEY  (`IdAlmacen`),   UNIQUE KEY `NombreAlmacen` (`NombreAlmacen`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=2 ;

Ahí   tenemos   el   código   necesario   para   crear   la   tabla   que   se   muestra   en   la   siguiente ilustración. Para insertar la tabla en la base de datos desde la interfaz de PHPMyAdmin, nos vamos a la pestaña SQL, pegamos el código y hacemos clic en continuar.

Es recomendable reflejar en el diagrama Entidad­Relación como se integra la tabla dentro de la estructura ya existente de la base de datos.

TablasLa estructura de las tablas es como se ve en la imagen, el desarrollador puede recurrir al 

esquema relacional, que recoge todas las tablas con sus correspondientes relaciones para conocer mejor el tipo de campos utilizados. Se han de tener en cuenta las siguientes consideraciones:

Los campos que son clave primaria, o son int, como el que vemos en la imagen, o son bigint  como por ejemplo el identificador de la tabla artículos. Suelen ser autoincrementales, salvo casos excepcionales como en la tabla Administrador y Cajero.

Los campos de texto, de tipo varchar, suelen ser de 50 caracteres, por ejemplo, para el domicilio, la población, etc. 20 caracteres para campos como la provincia, 5 para el código postal y 10 para los números de teléfono. 

Los  campos   numéricos,   destinados  a   cálculos   como  importes,   precios,   son   de   tipo double.

Los campos de tipo Verdadero/Falso, como por ejemplo el campo conectado de la tabla Usuarios, son de tipo tinyint(1).

Para nombrar  los campos, usaremos nombres identificativos, en minúscula, y que no contengan caracteres especiales, por ejemplo, si deseamos crear el campo Domicilio fiscal en la tabla  Almacen,  que   es   la   que   se  muestra   en   la   imagen  siguiente,  lo   nombraremos  como DomicilioFiscal.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 20: Manual desarrollador

Si fuese necesario realizar una copia de seguridad de la base de datos, se puede hacer a través de la propia interfaz de PHPMyAdmin en la pestaña exportar o usar el script creado para dicho propósito y puesto a disposición del usuario y del desarrollador en la forja del proyecto.

https://forja.rediris.es/docman/view.php/282/460/backupMySQL.sh

También cabe la posibilidad de restaurar una copia de seguridad en la pestaña importar. 

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 21: Manual desarrollador

El servidor de Servlet/JSP Apache TomcatTomcat en un contenedor de servlets y servidor web que, aunque habitualmente se integra 

con el propio servidor Apache, también puede funcionar de forma autónoma. La versión utilizada para el desarrollo ha sido la 6.0.16. Sin entrar muy en detalle, si resulta interesante conocer la estructura de directorios. Si hemos seguido correctamente la guía de instalación rápida, la ruta de nuestro servidor Tomcat ha de ser la que se muestra en la siguiente imagen.

La jerarquía de directorios por tanto es la que vemos Repasemos brevemente ésta:

bin ­ arranque, cierre, y otros scripts y ejecutables

common ­ clases comunes que pueden utilizar Catalina y las aplicaciones web

conf ­ ficheros XML y los correspondientes DTD para la configuración de Tomcat

logs ­ logs de Catalina y de las aplicaciones 

server ­ clases utilizadas solamente por Catalina

shared ­ clases compartidas por todas las aplicaciones web

webapps ­ directorio que contiene las aplicaciones web

work ­ almacenamiento temporal de ficheros y directorios

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 22: Manual desarrollador

La   carpeta   que   nos   interesa   especialmente   para   poder   ejecutar   correctamente   nuestra aplicación de  forma autónoma y   sin  necesidad de   lanzarla  desde el   IDE de  desarrollo   es   el directorio webapps, en el cual, tal y como apunta la descripción, es donde ha de estar contenida nuestra aplicación en entornos de producción. Por tanto, es aquí donde debemos copiar ZeroV1.war desde la carpeta dist del directorio del proyecto (workspace de trabajo).

El servidor hace automáticamente el despliegue cuando lo levantamos y utiliza los ficheros de configuración incluidos en la aplicación, como por ejemplo, el context.xml que creará el pool de conexiones al lanzar la aplicación.

También cabe considerar el contenido de la carpeta bin, en la cual se encuentran los scripts necesario para lanzar el servidor, pararlo, reiniciarlo y conocer su estado. Esta funcionalidad se ha simplificado al disponer de un script que hace las  tareas anteriormente comentadas. Podemos descargarlo desde la forja: 

https://forja.rediris.es/docman/view.php/282/548/init_tomcat.sh

Cuando estemos en desarrollo, podemos hacer estas mismas operaciones desde NetBeans tal y como se muestra en la siguiente imagen.

Cuando esté disponible una versión de la aplicación lista para producción se explicarán los pasos  necesarios  para  lanzar Tomcat  como un  servicio  del   sistema operativo,  para  así   poder “olvidarnos” de él.

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)

Page 23: Manual desarrollador

EpílogoPor último, recordar al posible desarrollador que existen foros de discusión donde tratar los 

distintos temas sobre codificación, pruebas, bugs, nuevas funcionalidades, etc, en los cuales se le invita a participar. 

Si además se tiene interés en el proyecto se le sugiere que esté atento a las posibles revisiones de este manual y del resto de documentación disponible. Una buena manera de estar al día es sindicarse  a   los   agregadores   dinámicos   del   blog,   donde   informaremos   puntualmente   de   las novedades que vayan surgiendo.

También cabe agradecer el hecho de haber llegado hasta aquí, ya que posiblemente sea una señal   de   que   anteriormente   se   han   leído   el   resto   de   páginas.   Animar   sin   más   a   participar activamente  en   el   proyecto   contribuyendo de   esta  manera  a   este   pequeño  sueño que   supone desarrollar un sistema de gestión comercial y contabilidad capaz de cubrir las necesidades de las PYMES. 

Suerte. 

Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)