SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
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)
Índice de contenido
Acerca de este documento.....................................................................................................        ....................5
¿Qué se debe saber?...............................................................................................................................   ....6
El entorno de desarrollo..................................................................................................     ..........................7
      NetBeans...................................................................................................................... ....................7
      Sistema operativo.................................................................................................................     ............7
      Apache Tomcat.................................................................................................................................     7
      MySQL........................................................................................................................................... ..8
      JRE.................................................................................................................................
                                                                                                                                       ..................8
      MySQL Connector driver ...............................................................................................             ................8
      Umbrello y DIA..........................................................................................................      .....................8
      Otras herramientas..............................................................................................................      .............9
La estructura del proyecto..................................................................................................................     ......10
   ZeroV1.......................................................................................................................
                                                                                                                              .........................10
      Web Pages ............................................................................................................  .........................10
         almacen, cliente, artículo, etc..................................................................................................           ..10
         css ........................................................................................................................
                                                                                                                                  .....................10
         imagenes ...................................................................................................................  ................11
         js...............................................................................................................................................
                                                                                                                                                     ..11
         meta­inf y web­inf.......................................................................................................       ..............11
         sdmenu.........................................................................................................  .............................12
      Configuration Files................................................................................................      ........................13
      Server Resources................................................................................................................     ............13
      Source Packages.................................................................................................................     ............13
         servlets..............................................................................................................................
                                                                                                                                              .........13
      Libraries ..............................................................................................................
                                                                                                                             ..........................14
   ModuloTPVZero...........................................................................................................      ......................14
      Source Packages.............................................................................................................     ................14
         applets...............................................................................................................................
                                                                                                                                              .........14
         imagenes....................................................................................................................  ................14
      Test packages.......................................................................................................................  ...........14
      Libraries..............................................................................................................
                                                                                                                            ...........................14
      Test libraries...................................................................................................................................14
   ClasesGeneralesZero...............................................................................................       ...........................15
      Source Packages..................................................................................................................     ...........15
         almacenamientoDAO.........................................................................................             .......................15
         beans............................................................................................................................
                                                                                                                                         ..............16
      Test packages.......................................................................................................................  ...........17
      Libraries..............................................................................................................
                                                                                                                            ...........................17


                                                         Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
Test libraries............................................................................................................... ....................17
La base de datos......................................................................................................................... ..............18
      Tablas...........................................................................................................................................
                                                                                                                                                     ...19
El servidor de Servlet/JSP Apache Tomcat...............................................................................                   ..............21
Epílogo.............................................................................................................................................
                                                                                                                                                ........23




                                                          Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
Acerca de este documento
       Este   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)
¿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)
El entorno de desarrollo

   NetBeans
       Para 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 operativo
      Y 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 Tomcat
      Tomcat 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)
MySQL
       MySQL 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.


   JRE
      JRE 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 DIA
       Umbrello 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)
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)
La estructura del proyecto
      Para 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)
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)
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)
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 Files
      Esta 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 Resources
       Esta carpeta no contiene actualmente ningún fichero.


   Source Packages
      Source 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)
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. 


ModuloTPVZero
       Este 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 packages
       Esta carpeta esta vacía.


    Libraries
       Contiene la JDK 1.6.


    Test libraries
       Contiene JUnit 4.1 y Junit 1.8.2.

                                          Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
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


ClasesGeneralesZero
        Con 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)
            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)
    /* 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 packages
       Esta carpeta esta vacía.


    Libraries
       Contiene la JDK 1.6.


    Test libraries
       Contiene JUnit 4.1 y Junit 1.8.2.




                                     Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
Base de datos
      La 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)
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.


     Tablas
       La 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)
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)
El servidor de Servlet/JSP Apache Tomcat
      Tomcat 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)
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)
Epílogo
       Por ú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)

Más contenido relacionado

La actualidad más candente

Índice el Libro "Hacking Web Applications: Client-Side Attacks"
Índice el Libro "Hacking Web Applications: Client-Side Attacks"Índice el Libro "Hacking Web Applications: Client-Side Attacks"
Índice el Libro "Hacking Web Applications: Client-Side Attacks"
Telefónica
 
Curso java2 awt_swing
Curso java2 awt_swingCurso java2 awt_swing
Curso java2 awt_swing
Lener Romero
 
Excelvbaplication 2010
Excelvbaplication 2010Excelvbaplication 2010
Excelvbaplication 2010
ALEX GARCIA
 

La actualidad más candente (19)

Índice del libro "Hacking Aplicaciones Web: SQL Injection"
Índice del libro "Hacking Aplicaciones Web: SQL Injection" Índice del libro "Hacking Aplicaciones Web: SQL Injection"
Índice del libro "Hacking Aplicaciones Web: SQL Injection"
 
Índice de libro: "Spring Boot & Angular: Desarrollo de WebApps Seguras. Tomo ...
Índice de libro: "Spring Boot & Angular: Desarrollo de WebApps Seguras. Tomo ...Índice de libro: "Spring Boot & Angular: Desarrollo de WebApps Seguras. Tomo ...
Índice de libro: "Spring Boot & Angular: Desarrollo de WebApps Seguras. Tomo ...
 
Máxima Seguridad en WordPress
Máxima Seguridad en WordPressMáxima Seguridad en WordPress
Máxima Seguridad en WordPress
 
Índice el Libro "Hacking Web Applications: Client-Side Attacks"
Índice el Libro "Hacking Web Applications: Client-Side Attacks"Índice el Libro "Hacking Web Applications: Client-Side Attacks"
Índice el Libro "Hacking Web Applications: Client-Side Attacks"
 
Lego education we do guia del profesor
Lego education we do guia del profesorLego education we do guia del profesor
Lego education we do guia del profesor
 
Índice del libro "Hacking Web Technologies"
Índice del libro "Hacking Web Technologies"Índice del libro "Hacking Web Technologies"
Índice del libro "Hacking Web Technologies"
 
Libro Bitcoin: La tecnología Blockchain y su investigación
Libro Bitcoin: La tecnología Blockchain y su investigaciónLibro Bitcoin: La tecnología Blockchain y su investigación
Libro Bitcoin: La tecnología Blockchain y su investigación
 
Índice del libro "Ataques en redes de datos IPv4&IPv6 (4ª Edición)"
Índice del libro "Ataques en redes de datos IPv4&IPv6 (4ª Edición)"Índice del libro "Ataques en redes de datos IPv4&IPv6 (4ª Edición)"
Índice del libro "Ataques en redes de datos IPv4&IPv6 (4ª Edición)"
 
Índice del libro "Spring Boot & Angular: Desarrollo de Webapps seguras" de 0x...
Índice del libro "Spring Boot & Angular: Desarrollo de Webapps seguras" de 0x...Índice del libro "Spring Boot & Angular: Desarrollo de Webapps seguras" de 0x...
Índice del libro "Spring Boot & Angular: Desarrollo de Webapps seguras" de 0x...
 
Curso java basico
Curso java basicoCurso java basico
Curso java basico
 
Curso java2 awt_swing
Curso java2 awt_swingCurso java2 awt_swing
Curso java2 awt_swing
 
Índice del libro Crime Investigation
Índice del libro Crime InvestigationÍndice del libro Crime Investigation
Índice del libro Crime Investigation
 
Índice del libro: "Python para pentesters" [2ª Edición] de 0xWord
Índice del libro: "Python para pentesters" [2ª Edición] de 0xWordÍndice del libro: "Python para pentesters" [2ª Edición] de 0xWord
Índice del libro: "Python para pentesters" [2ª Edición] de 0xWord
 
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...
 
Índice del libro "Hacking con Drones" de 0xWord
Índice del libro "Hacking con Drones" de 0xWordÍndice del libro "Hacking con Drones" de 0xWord
Índice del libro "Hacking con Drones" de 0xWord
 
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWord
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWordÍndice del libro "Hacking Web Technologies" Silver Edition de 0xWord
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWord
 
Excelvbaplication 2010
Excelvbaplication 2010Excelvbaplication 2010
Excelvbaplication 2010
 
Curso javascript
Curso javascriptCurso javascript
Curso javascript
 
Índice del libro "Machine Learning aplicado a Ciberseguridad: Técnicas y ejem...
Índice del libro "Machine Learning aplicado a Ciberseguridad: Técnicas y ejem...Índice del libro "Machine Learning aplicado a Ciberseguridad: Técnicas y ejem...
Índice del libro "Machine Learning aplicado a Ciberseguridad: Técnicas y ejem...
 

Destacado (6)

ERP
ERPERP
ERP
 
Centro de computo
Centro de computoCentro de computo
Centro de computo
 
Centro de Computo
Centro de ComputoCentro de Computo
Centro de Computo
 
Creación de un centro de Computo
Creación de un centro de ComputoCreación de un centro de Computo
Creación de un centro de Computo
 
condiciones constructivas de centros de computo
condiciones constructivas de centros de computocondiciones constructivas de centros de computo
condiciones constructivas de centros de computo
 
Crear un centro de cómputo
Crear un centro de cómputoCrear un centro de cómputo
Crear un centro de cómputo
 

Similar a Manual desarrollador (20)

Curso java2 awt_swing (1)
Curso java2 awt_swing (1)Curso java2 awt_swing (1)
Curso java2 awt_swing (1)
 
Joomla gran
Joomla granJoomla gran
Joomla gran
 
Manual pc simu
Manual pc simu  Manual pc simu
Manual pc simu
 
Elastix a ritmo de merengue v-1-3
Elastix a ritmo de merengue v-1-3Elastix a ritmo de merengue v-1-3
Elastix a ritmo de merengue v-1-3
 
Cursojoomlacep
CursojoomlacepCursojoomlacep
Cursojoomlacep
 
Curso joomla
Curso joomlaCurso joomla
Curso joomla
 
Curso Joomla
Curso JoomlaCurso Joomla
Curso Joomla
 
Flash as3 components_help
Flash as3 components_helpFlash as3 components_help
Flash as3 components_help
 
9no writter
9no writter9no writter
9no writter
 
Manual activ inspire r180219
Manual activ inspire r180219Manual activ inspire r180219
Manual activ inspire r180219
 
Manual activinspire 1
Manual activinspire 1Manual activinspire 1
Manual activinspire 1
 
Manual blackberry b8520_[www.gsmspain.com]
Manual blackberry b8520_[www.gsmspain.com]Manual blackberry b8520_[www.gsmspain.com]
Manual blackberry b8520_[www.gsmspain.com]
 
Guía del profesor oficial de LEGO WeDo
Guía del profesor oficial de LEGO WeDoGuía del profesor oficial de LEGO WeDo
Guía del profesor oficial de LEGO WeDo
 
Lego education we do teacher's guide (wedo)
Lego education we do teacher's guide (wedo)Lego education we do teacher's guide (wedo)
Lego education we do teacher's guide (wedo)
 
Manual activ inspire
Manual activ inspireManual activ inspire
Manual activ inspire
 
Opciones de ubuntu
Opciones de ubuntuOpciones de ubuntu
Opciones de ubuntu
 
Ubuntu parausuarioswindows
Ubuntu parausuarioswindowsUbuntu parausuarioswindows
Ubuntu parausuarioswindows
 
Manual de Ubuntu
Manual de UbuntuManual de Ubuntu
Manual de Ubuntu
 
Manual tip 125_portugues_espanhol_03-17_site
Manual tip 125_portugues_espanhol_03-17_siteManual tip 125_portugues_espanhol_03-17_site
Manual tip 125_portugues_espanhol_03-17_site
 
Chamilo 1.8.7.1-docente-manual-v0.1.2
Chamilo 1.8.7.1-docente-manual-v0.1.2Chamilo 1.8.7.1-docente-manual-v0.1.2
Chamilo 1.8.7.1-docente-manual-v0.1.2
 

Manual desarrollador

  • 1. 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)
  • 2. Índice de contenido Acerca de este documento..................................................................................................... ....................5 ¿Qué se debe saber?............................................................................................................................... ....6 El entorno de desarrollo.................................................................................................. ..........................7 NetBeans...................................................................................................................... ....................7 Sistema operativo................................................................................................................. ............7 Apache Tomcat................................................................................................................................. 7 MySQL........................................................................................................................................... ..8 JRE................................................................................................................................. ..................8 MySQL Connector driver ............................................................................................... ................8 Umbrello y DIA.......................................................................................................... .....................8 Otras herramientas.............................................................................................................. .............9 La estructura del proyecto.................................................................................................................. ......10 ZeroV1....................................................................................................................... .........................10 Web Pages ............................................................................................................ .........................10 almacen, cliente, artículo, etc.................................................................................................. ..10 css ........................................................................................................................ .....................10 imagenes ................................................................................................................... ................11 js............................................................................................................................................... ..11 meta­inf y web­inf....................................................................................................... ..............11 sdmenu......................................................................................................... .............................12 Configuration Files................................................................................................ ........................13 Server Resources................................................................................................................ ............13 Source Packages................................................................................................................. ............13 servlets.............................................................................................................................. .........13 Libraries .............................................................................................................. ..........................14 ModuloTPVZero........................................................................................................... ......................14 Source Packages............................................................................................................. ................14 applets............................................................................................................................... .........14 imagenes.................................................................................................................... ................14 Test packages....................................................................................................................... ...........14 Libraries.............................................................................................................. ...........................14 Test libraries...................................................................................................................................14 ClasesGeneralesZero............................................................................................... ...........................15 Source Packages.................................................................................................................. ...........15 almacenamientoDAO......................................................................................... .......................15 beans............................................................................................................................ ..............16 Test packages....................................................................................................................... ...........17 Libraries.............................................................................................................. ...........................17 Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
  • 3. Test libraries............................................................................................................... ....................17 La base de datos......................................................................................................................... ..............18 Tablas........................................................................................................................................... ...19 El servidor de Servlet/JSP Apache Tomcat............................................................................... ..............21 Epílogo............................................................................................................................................. ........23 Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
  • 4. Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
  • 5. Acerca de este documento Este   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)
  • 6. ¿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)
  • 7. El entorno de desarrollo NetBeans Para 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 operativo Y 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 Tomcat Tomcat 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)
  • 8. MySQL MySQL 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. JRE JRE 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 DIA Umbrello 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)
  • 9. 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)
  • 10. La estructura del proyecto Para 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)
  • 11. 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)
  • 12. 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)
  • 13. 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 Files Esta 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 Resources Esta carpeta no contiene actualmente ningún fichero. Source Packages Source 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)
  • 14. 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.  ModuloTPVZero Este 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 packages Esta carpeta esta vacía. Libraries Contiene la JDK 1.6. Test libraries Contiene JUnit 4.1 y Junit 1.8.2. Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
  • 15. 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 ClasesGeneralesZero Con 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)
  • 16.          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)
  • 17.     /* 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 packages Esta carpeta esta vacía. Libraries Contiene la JDK 1.6. Test libraries Contiene JUnit 4.1 y Junit 1.8.2. Manual del desarrollador - Proyecto (Codename) Zero (versión 0.0.1-beta)
  • 18. Base de datos La 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)
  • 19. 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. Tablas La 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)
  • 20. 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)
  • 21. El servidor de Servlet/JSP Apache Tomcat Tomcat 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)
  • 22. 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)
  • 23. Epílogo Por ú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)