Está en la página 1de 23

MANUAL DEL DESARROLLADOR

Proyecto (codename) ZERO


PrimerConcursoUniversitariodeSoftwareLibredeCastillaLaMancha.
SegundoConcursoUniversitariodeSoftwareLibre

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

ndice de contenido
Acercadeestedocumento.....................................................................................................
....................5
Qusedebesaber?...............................................................................................................................
....6
Elentornodedesarrollo..................................................................................................
..........................7
NetBeans......................................................................................................................
....................7
Sistemaoperativo.................................................................................................................
............7
ApacheTomcat.................................................................................................................................
7
MySQL...........................................................................................................................................
..8
JRE.................................................................................................................................
..................8
MySQLConnectordriver...............................................................................................
................8
UmbrelloyDIA..........................................................................................................
.....................8
Otrasherramientas..............................................................................................................
.............9
Laestructuradelproyecto..................................................................................................................
......10
ZeroV1.......................................................................................................................
.........................10
WebPages............................................................................................................
.........................10
almacen,cliente,artculo,etc..................................................................................................
..10
css........................................................................................................................
.....................10
imagenes...................................................................................................................
................11
js...............................................................................................................................................
..11
metainfywebinf.......................................................................................................
..............11
sdmenu.........................................................................................................
.............................12
ConfigurationFiles................................................................................................
........................13
ServerResources................................................................................................................
............13
SourcePackages.................................................................................................................
............13
servlets..............................................................................................................................
.........13
Libraries..............................................................................................................
..........................14
ModuloTPVZero...........................................................................................................
......................14
SourcePackages.............................................................................................................
................14
applets...............................................................................................................................
.........14
imagenes....................................................................................................................
................14
Testpackages.......................................................................................................................
...........14
Libraries..............................................................................................................
...........................14
Testlibraries...............................................................................................................
....................14
ClasesGeneralesZero...............................................................................................
...........................15
SourcePackages..................................................................................................................
...........15
almacenamientoDAO.........................................................................................
.......................15
beans............................................................................................................................
..............16
Testpackages.......................................................................................................................
...........17
Libraries..............................................................................................................
...........................17
Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Testlibraries...............................................................................................................
....................17
Labasededatos.........................................................................................................................
..............18
Tablas...........................................................................................................................................
...19
ElservidordeServlet/JSPApacheTomcat...............................................................................
..............21
Eplogo.............................................................................................................................................
........23

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Acercadeestedocumento
Este documento recoge de manera detallada informacin acerca de las herramientas
utilizadasparallevaracaboeldesarrollodelproyecto,delaestructuradelmismoascomodelas
distintaspartesdeestaestructura.
Elobjetivoesorientaraunfuturodesarrolladorenlaorganizacindelasaportacionesque
stehagaeneldesarrollo.Deahlaimportanciadedetallarminuciosamenteelcontenidodecada
unodelaspartesqueincluyeelproyecto.
Alserundocumentoorientadoaunusuarioavanzado,losprocesosdeinstalacindelas
aplicacionesbsicasnecesariasparaeldesarrollonohanquedadorecogidasenestedocumento,es
decir,noseexplicacomoseinstalaelsistemaoperativonielIDEdedesarrolloalconsiderarse
informacinquesesaledelmbitodeestemanual.
Para completar la instalacin del resto de las herramientas necesarias para el correcto
funcionamientodelentorno,seinvitaaldesarrolladoraquelealaGuarpidadeinstalacinque
recogelospasosnecesariosparaconfigurarelcontenedordeservletsyservidordeaplicaciones
ApacheTomcat,labasededatos,laJREeinclusolacopiadeseguridaddelabasededatos.
Evidentemente,elcontenidodeestedocumentoestarsujetoanumerososcambiosconforme
segenerennuevasrevisionesdelaaplicacin.
Estaversindeldocumentocorrespondealarevisin0.0.1betadelaaplicacin.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Qusedebesaber?
Como bien se ha comentado anteriormente, este documento est destinado a aquellos
usuariosavanzadosquedeseenconocerlaestructuradelproyectoconelfindeparticiparenel
desarrollodelmismo.Esporesoqueresultacasiimprescindibletenerunasnocionesbsicasde
ciertastecnologasparapoderllevaracaboundesarrolloeficiente.
Paraeldesarrollodelproyecto,seconsiderarondesdeelprincipionicamenteherramientas
libres,desdeelsistemaoperativohastalasuiteofimticanecesariapararealizarladocumentacin.
Enprimerlugar,esmuyrecomendablerevisartodaladocumentacingeneradadurantela
etapadeelicitacinderequisitosyanlisis.Estadocumentacinenglobalasentrevistasconlos
clientes,lashistoriasdeusuario,losdiagramasUML,comosoneldiagramadecasosdeuso,el
diagramadeclasesyeldiagramadesecuencia,ascomotodolorelativoaldiseodelabasede
datos;ModeloEntidadRelacin,elesquemarelacional...nicamenteconociendoelprocesode
ingenieradelsoftwarellevadoacabosepuedeconocerelalcancedeltrabajoquesehahecho.Por
supuesto,todaestadocumentacinestdisponibleparadescargadesdelaseccindedocumentos
delaforja.
Ellenguajedeprogramacinelegidofuejava.Hayvariasrazonesparaapostarporjavaenel
desarrollodesoftware,cabedestacarelhechodequejavaesunlenguajeorientadoaobjetos,muy
maduro,potente,conunagrancomunidaddeusuariosentodoelmundo,muyespecialmenteenel
mbitoeducativo,unaextensadocumentacinyconunacurvadeaprendizajemuyrpida.Esto
permiteobtenerresultadosrpidamente.
Por la naturaleza del proyecto, basado en una arquitectura clienteservidor, se haca
imprescindiblehacerunodelastecnologasorientadasainternetdelasquedisponejava.
J2EEesunaplataformadeprogramacinpartedelaPlataformaJavaparadesarrollary
ejecutarsoftwaredeaplicacionesenLenguajedeprogramacinJavaconarquitecturadenniveles
distribuida,basndoseampliamenteencomponentesdesoftwaremodularesejecutndosesobreun
servidordeaplicaciones.
Este tipo de desarrollos, adems de java, utilizan habitualmente otros lenguajes de
programacinpropiosdeldiseowebcomosonHTML,javascriptyXML.
TambinsehacenecesarioconocerSQL(StructuredQueryLanguage).SQLesunlenguaje
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
realizarlasconsultasoportunasalabasededatosMySQLqueutilizalaaplicacin.
Es recomendable que cualquier nueva funcionalidad que se desee implementar quede
perfectamente documentada y especialmente interesante resulta utilizar para ello el modelado
UMLtalycomosehahechohastaahora.El anexoA incluyeunadescripcinacercadelos
diagramasquesehanrealizadoenestaprimeraiteracindeldesarrollo.
Contodoesto,seestendisposicindeentendertodoelcdigogenerado.
Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Elentornodedesarrollo
NetBeans
ParallevaracaboelproyectohemosusadoelIDEdedesarrolloNetBeansensuversin
6.0.xsobredistintasdistribucionesdeGNU/Linux,todasellasbasadasenDebian.Principalmente
eltrabajosehallevadoacabosobreUbuntuFeistyFawn7.04x86.Enelsiguienteenlacesepuede
descargarlaversindelIDEquesehautilizadoparaeldesarrollo:
http://download.netbeans.org/netbeans/6.0/final/bundles/netbeans6.0.1mljavaeelinux.sh

Sistemaoperativo
Yaquenesteotroenlace,laversin7.04deUbuntu:
http://www.ubuntu.com/getubuntu/download
Sinembargo,noeslanicaopcin.GranpartedeldesarrollosehahechosobreMolinux3.0,
una distribucinbasadaenDebianydesarrolladaporlaJuntadecomunidadesdeCastilla la
Manchaquesepuededescargardesdeaqu:
http://www.molinux.info/index.php?option=com_remository&Itemid=0&func=select&id=34

ApacheTomcat
TomcatesunproyectodesarrolladoporlafundacinApache.Esuncontenedordeservlets
quepuedefuncionarcomoservidorwebautnomoperoquehabitualmenteseintegraconelpropio
servidorApache.TieneunalicencialibredeApache.
Laversinutilizadaparaeldesarrollohasidola6.0.16.Lascaractersticasmsdestacables
deestaversinson:

ImplementadodeServlet2.5yJSP2.1

DiseadoparafuncionarenJavaSE5.0yposteriores

Sepuededescargardesdeelsiguienteenlace:
http://tomcat.apache.org/download60.cgi
Lainstalacinyconfiguracinnecesariaparaelfuncionamientodelmismoestrecogidaen
laguarpidadeinstalacin.ParamsinformacinacercadelproyectoTomcat,visitarlapgina
deldesarrolloatravsdelenlaceanterior.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

MySQL
MySQLesunmotordebasededatosrelacional,multihiloymultiusuarioampliamente
utilizado no slo en proyectos de software libre sino tambin en multitud de desarrollos
comerciales ya que dispone de dos versiones, una comercial y otra libre con licencia GPL.
MySQLperteneceaSunMicrosystemsdesdeenerode2008.
En las distribuciones de linux anteriormente mencionadas, est disponible desde los
repositorios.Denuevoseinstaaldesarrolladoraconsultarlaguarpidadeinstalacinparasaber
comoconfigurarlabasededatoscorrectamente.Porsupuesto,estdisponibleparadescargadesde
supginaoficialatravsdelsiguienteenlace:
http://dev.mysql.com/downloads/mysql/5.0.html#linux
Para facilitar la administracin de la base de datos se han usado principalmente dos
herramientas,PHPMyAdminyMySQLAdministrator.

JRE
JREeselacrnimodeJavaRuntimeEnvironment(entornoentiempodeejecucinJava)yse
correspondeconunconjuntodeutilidadesquepermitenlaejecucindeprogramasescritosenjava
sobredistintasplataformas.(Linux,windows,*BSD,Solaris....).
ElJREestformadoporunaJVM(mquinavirtualJava)queeselprogramaqueinterpreta
elcdigoJavayademsporlaslibrerasdeclasesestndarqueimplementanelAPIdeJava.
AmbasJVMyAPIdebenserconsistentesentres,deahqueseandistribuidasdeformaconjunta.
BastacondisponerdelaJREparaejecutarlasaplicacionesdesarrolladasenJava,mientras
queparadesarrollarnuevasaplicacionesendicholenguajeesnecesariounentornodedesarrollo,
denominado JDK, que adems del JRE (mnimo imprescindible) incluye, entre otros, un
compiladorparaJava.CabedestacarNetBeansyEclipse.Denuevo,sepuededescargardeaqu:
http://javadl.sun.com/webapps/download/AutoDL?BundleId=12791

MySQLConnectordriver
Libreradisponibleparadescargadesdelawebdelmysqlquepermitecomunicarnosconla
basededatos.Sinoexisteya,hemosdetenerlaenlacarpetalibdelTomcat.
http://dev.mysql.com/downloads/connector/j/5.1.html

UmbrelloyDIA
UmbrelloesunaherramientalibreparacrearyeditardiagramasUML,queayudaenel
procesodeldesarrollodesoftware.EstdiseadoprincipalmenteparaKDE,aunquefuncionaen
otros entornos de escritorio como Gnome. Tambin esta disponible para descarga desde los
repositoriosdeUbuntu/Molinuxyatravsdelapginadelproyecto:

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

http://uml.sourceforge.net/download.php
DIA es una aplicacin grfica de propsito general para la creacin de diagramas,
desarrolladacomopartedelproyectoGNOME.Estconcebidodeformamodular,condiferentes
paquetes de formas para diferentesnecesidades. Disponible para distintas plataformas (Linux,
windows...), destaca por su sencillez de uso. Al igual que Umbrello, esta disponible en los
repositoriosdeladistribucinyaqu:
http://www.gnome.org/projects/dia/downld.html
Estas dos herramientas han sido utilizadas para realizar los distintos diagramas que se
crearonellafasedeanlisis.

Otrasherramientas.
OtrasherramientasutilizadashansidoTheGimp,paraeltratamientoespordicodealguna
imagen,OpenOfficeparacrearladocumentacinyvirtualBoxparadisponerdeunservidorvirtual
dondehacerlaspruebasdeconexinclienteservidor.
Unavezfinalizadalainstalacindetodaslasherramientasnecesarias,podemosempezara
trabajar.
Recordar por ltimo que, para probar la aplicacin, independientemente de que se est
trabajandoenlocalodesdeunordenadorcliente,bastadisponerdeunnavegadorwebquesoporte
lamquinavirtualdejava(necesariaparavisualizarelmdulodeTPV),parapoderprobarla
aplicacin. Se han realizadopruebas desde clientes Windows y Linux y el resultado ha sido
satisfactorioenamboscasos.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Laestructuradelproyecto
Paraempezar,enmsfcilseguirestemanualsisetieneabiertoNetBeansconlostres
proyectosincluidosenelworkspace.
Es probablequeal abrir ZeroV1 sea necesario resolver algn 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.Podemosmovernosahoraporlaestructuraenformaderbol.Procedemosacomentar
cadaunodelosdirectoriosysucontenido.

ZeroV1
WebPages
Estacarpetacontienetodaslaspginaswebdelasquedisponeelproyectowebascomolas
subcarpetas correspondientes a las distintas funcionalidades del mismo. Correspondecasi por
completoalacapadepresentacindentrodelparadigmadelmodelodetrescapas,alcualsehace
referenciaenelAnexoA.Siesnecesariocrearunanuevafuncionalidad,entonceshayquecrear
unanuevasubcarpetaqueidentifiquedeformaunvocaaestanuevafuncionalidad.Paranombrar
unasubcarpetautilizaremosunnombreensingular,enminsculaysinsignosdepuntuacincomo
tildes,diresisolaletra ,porejemplo, puntoverde.Estanuevasubcarpetacontendrtodaslas
pginaswebdestinadasalagestindelpuntoverde.
almacen,cliente,artculo,etc
Estassubcarpetas,comosehacomentadoenelejemplo,contienenlaspginaswebrelativas
atareas propiasdecadaunadeestas funcionalidades.Porejemplo,lacarpeta articulo ha de
contener nuevoArticulo.jsp, listadoArticulo.jsp, bienvenidaArticulo.html, etc. Las pginas web
incluidasenestassubcarpetashandenombrarse,aligualqueconlascarpetas,evitandosignosde
puntuacinoespeciales.Porejemplo:miNuevaFuncionalidad.jsp.
css
Estasubcarpetacontienetodaslashojasdeestilo(exceptoladelmen)necesariasparala
correctapresentacindelaspginasweb.Hayqueusarhojasdeestilosiemprequesepueda
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 pginas web
dedicadasalainsercinderegistros,stasellamatablaInsersionCSS.css. Sisedeseacrearuna
nuevahojadeestilosesconvenienteusarunnombrelomsidentificativoposible.Sisecree
convenientedisponerdeunahojadeestilosparalaspginasdestinadasalborradodelosregistros,
independientemente de lo que estemos borrando, podemos llamarla entonces

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

borraRegistrosCSS.cssyaplicarlaentodasaquellaspginaswebquecreamosconvenientesconel
findequeguardenunasimilitudencuantoalapresentacin.
imagenes
Contienelasimgenesnecesariasparalamaquetacinexceptolasdelmen,lascualesestn
incluidasensucorrespondientecarpeta.
js
Estacarpetaincluyelosficheros javascript queutilizaremosennuestroproyectoweb.Es
recomendablequetodoelcdigo javascript estenficheros *.js dentrodeestacarpetaysean
referenciadosmedianteenlacesenlaspginaswebquelosusen.
metainfywebinf
Estas dos carpetas son generadas automticamente por NetBeans y su contenido es
imprescindibleparaelcorrectofuncionamientodelaaplicacinporloquesedebesaberloquese
quierehaceryparaquconelfindenodeteriorarsucontenido.
Lacarpetawebinfcontieneunficherollamadoweb.xmlqueeseldescriptordedespliegue
paralaaplicacin.Definevariosparmetrosquesonusadoscuandosedespliegalaaplicacinenel
contenedordeServlets/JSPTomcatcomoporejemploelpuntodeentradadelaaplicacinweb.En
l,sehacereferenciaalosservlets,lapginadeinicio,owelcomefilelistyelDataSourcedelpool
deconexionesdelcualsehablaacontinuacin.
Lacarpetametainfcontieneelficherocontext.xml.Enesteficheroesenelquerealmente
especificaremoslosparmetrosdeconexinaunabasededatosdeterminada.Deberexistiruna
entrada<Resource>porcadabasededatosquesevayaaemplearysunombredebercoincidir
conelindicadoenelficheroweb.xml
Acontinuacinsemuestralaconfiguracindelpooldeconexionesdelabasededatos:
<?xmlversion="1.0"encoding="UTF8"?>
<Contextpath="/ZeroV1"docBase="ZeroV1"
debug="5"reloadable="true"crossContext="true">
<Resourcename="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>

Elelemento<Context>hacereferenciaalcontextodondeesterecursoesvlido,estoes,ala
aplicacinqueseestdesplegando.SuspropiedadespathydocBasehacenreferenciaalnombre
dedichaaplicacin.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Laspropiedadesdeconfiguracinde<resource>sonlassiguientes:

name:nombreJNDI.Debeserelmismonombrequeelindicadoenweb.xml.

auth:igualque<resauth>enelficheroweb.xml.

type:igualque<restype>enelficheroweb.xml.

username:usuarioparaaccederalabasededatos.

password:sucontrasea.

driverClassName:nombrecompletodelaclaseconeldriverJDBC

url:urldeconexinalabasededatos

maxActive:nmeromximodeinstanciasactivassimultneasparaestabasededatos.

maxIdle:nmeromximodeconexionessimultneassinactividad.

maxWait: tiempo en milisegundos que esperar el sistema antes de generar una


excepcincuandoselesolicitaunanuevaconexinynohayaningunadisponible.

validationQuery:ConsultaSQLquepuedeusarseparacomprobarlavalidezdeuna
conexin.DebeserunSELECTydevolveralmenosunafila.

Es imprescindibleportantoquela basede datos estcorrectamenteconfigurada y que


dispongadeunusuariorootcuyaclavesea1234.
sdmenu
Estacarpetacontienetodolorelativoalmenquesecargaalaizquierdaenlaventanade
administracingeneral.Elmensereferenciaenprincipal.jsp.Lasubcarpetasdmenuquecontiene
sdmenuestaformadaporlosficheros*js,lahojadeestilosdelmenylasimgenes.
Laestructuradelficheromenu.htmlesbastanteintuitivayaadirnuevasentradasalmismo
no supone ningunadificultad.Bastaconecharleunvistazoparacomprobarqueelcdigo es
siempreigualyquenicamentehaycopiarypegarelcdigodeunaentradaparatenerotranueva.
Elrestodepginascorrespondenalapginadeiniciodesesin index.jsp, lapginadel
usuarioadministrador,principal.jsplacualestadivididaen4framesquecontienencabecera.jsp,
pie.html,bienvenida.jspymenu.html,ylapginaprincipaldelpuntodeventaterminalTPV.jspen
lacualsecargaelmdulodelTPV.
Destacarelfichero cabecera.jsp. Enunprincipio,sepensenlcomounficheroHTML
esttico,sinembargo,seoptporusarun*.jspalconsiderarqueeraelmejorlugarparaincluirun
cerrarsesin.
Si fuese necesario aadir nuevas pginas web en la raiz del directorio web pages, es
importanteconsiderarlacategorizacincomentadaanteriormentedondecadafuncionalidaddela
aplicacin dispone de una subcarpeta donde almacenar las nuevas pginas que resultasen
Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

necesarias. Una vez ms se hace incapi en el hecho de utilizar nombres significativos, en


minuscula,ensingularyquenocontentancaracteresespeciales.

ConfigurationFiles
Estacarpetacontiene,comosupropionombreindicaarchivosdeconfiguracin.Porunlado
elcontext.xml,elcualhemosdetalladoanteriormenteyelmanifest.xml.Necesarioparagenerarel
paquetedondeseconstruyelaaplicacin.

ServerResources
Estacarpetanocontieneactualmenteningnfichero.

SourcePackages
SourcePackagescontienelosservlets,quesonlosficherosqueestnenelladodelservidor
yqueformanpartedelacapadelalgicadenegociodelaaplicacinypermitencomunicarla
capadepresentacinconlacapadepersistenciaodedatos.ElproyectoClasesGeneralesZero
incluyeelrestodeclasesdecontroldelacapadelalgicadenegocio.Esteproyectosedetallams
adelante.
servlets
UnservletesunobjetoqueseejecutaenunservidorocontenedorJEE,fueespecialmente
diseadoparaofrecercontenidodinmicodesdeunservidorweb,generalmenteenHTML.
UnservletesunobjetoJavaqueimplementalainterfazjavax.servlet.Servletoheredaalguna
de las clases ms convenientes para un protocoloespecfico(ej:javax.servlet.HttpServlet). Al
implementarestainterfazelservletescapazdeinterpretarlosobjetosdetipoHttpServletRequesty
HttpServletResponsequienescontienenlainformacindelapginaqueinvocalservlet.
Cada servlet desempea una funcin diferente y por tanto el cdigo es sustancialmente
distintoalcontrarioqueocurreconlasclasesgeneralesylasclases*DAO,lascualestienentodas
unaestructuraparecida.
LoginServlet es el responsable de la autenticacin de los usuarios en la aplicacin.
Compruebaelusuario,lacontraseaysielusuarioseencuentrayaconectado.
DesconexionServleteselresponsabledefinalizarlasesindelusuario.Actualizandodeesta
formalabasededatosydelvolviendoalusuarioalapginadeentrada.
DevolucionServlet se encarga de las peticiones de devolucin de artculos durante una
compra.
VentaServleteselencargadodeproporcionarlainformacinnecesariaenlasconsultasque
realizaelTPV,envindoleastelosartculossolicitados.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Libraries
Esta carpeta contiene las librerias externas del proyecto, necesarias para que funcione
correctamentecomosonlaJDKensuversin1.6,laslibreraspropiasdelcontenedordeservletsy
servidor web Apache Tomcat 6.0.16 y la librera de clases clasesGeneralesZero. Podemos
consultartodoslosproyectosimportados(ModuloTPVZero)enlaspropiedadesdeestacarpeta.

ModuloTPVZero
Esteproyecto,detipoclasslibrary,dependedeZeroV1ydeclasesGeneralesZeroporlo
tanto,enningncasopuedefuncionardeformaautnomayaquelaiteracinconlabasededatos
sehaceatravsdeuntunnelingentreestaclasslibraryyelcorrespondienteservletdelproyecto
web.
El llamado "tunneling", quizs traducible como "atravesar un tunel" o algo parecido,
significatransmitirinformacinquesigueunprotocolopormediodeotro.Ennuestrocasose
llama"HTTPtunneling"yaqueusamoselprotocoloHTTPparatransmitirlainformacinbinaria.

SourcePackages
applets
EstacarpetaincluyelosappletsdelmduloTPV.Enprincipio,nicamentesedisponedeun
appletllamadoterminalTPV.java.SehanutilizadoSwing,queesunabibliotecagrficaparaJava
queformapartedelasJavaFoundationClasses(JFC).Incluyewidgetsparainterfazgrficade
usuariotalescomocajasdetexto,botones,desplegablesytablas.
Adems,incluyelaclasetablaArticulos.javaqueestableceelmodelodeljtabledondese
carganlosartculosquesevenden.
imagenes
ContienelasimgenesnecesariasparalainterfazdelTPV.

Testpackages
Estacarpetaestavaca.

Libraries
ContienelaJDK1.6.

Testlibraries
ContieneJUnit4.1yJunit1.8.2.
Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Unodelosproblemasquesenosplantearonduranteeldesarrollofuelaintegracindel
applet del TPV en el proyecto web, inclumos por tanto un pequeo tutorial acerca de la
integracindelappletconunJSPqueapareceenladocumentacindeNetBeans:
http://qa.netbeans.org/modules/webapps/promoe/applet/applettestspec.html

ClasesGeneralesZero
Conelfindepaquetizarenlamayormedidalaestructuradelproyecto,sehaconvenido
disponerdeunproyectoadicionaldetipolibreradeclasesdestinadoexclusivamenteaalmacenar
granpartedelasfuncionespropiasdelacapadelalgicadenegocio.

SourcePackages
almacenamientoDAO
Estepaquetecontienelasclasesquenospermitenmanipularlastablasdelabasededatos.
Enellasseencuentranlosmtodosbsicosnecesariosparatrabajarcondichastablas,comoson
insercin,borrado,consultayactualizacin.
La estructura esmuy parecidaentodas en ellas, en primerlugar, la declaracin de las
variables,acontinuacinunconstructorqueconstruye,valgalaredundancia,lassentenciasquese
leenviarnalmotordebasededatosyporotralosmtodoscorrespondientesacadaunadelas
sentencias,quesonalfinyalcabolosqueinsertan,borran,consultanyactualizanregistros.
Paranombraralasmismassehaseguidounprocedimientomuysimple,recurriralnombre
delastablasdelabasededatosseguidodeDAO,quedandomuyclarodeestamaneralafuncinde
estasclases.nicamenteasseconsigueunapaquetizacincompletadelaestructuradelproyecto.
Elcontenido,muyparecidoentodasellasesalgosimilaralsiguientecdigo:
publicclassMiClaseDAO{
privateConnectioncon;
privatePreparedStatementpstmtInsertar;
privatePreparedStatementpstmtBorrar;
privatePreparedStatementpstmtActualizar;
....
publicUsuarioDAO(Connectioncon)throwsSQLException{
this.con=con;
pstmtInsertar=con.prepareStatement("INSERTINTO...");
pstmtBorrar=con.prepareStatement("...");
....
}
publicResultSetinsertar(MiClasec)throwsSQLException{

pstmtInsertar.clearParameters();
pstmtInsertar.setString(1,c.getCampo1());

pstmtInsertar.setDate(2,c.getCampo2());
Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

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

pstmtInsertar.executeUpdate();
returnpstmtInsertar.getResultSet();
}
publicResultSetborrar(TipoMiClasec)throwsSQLException{

pstmtInsertar.clearParameters();
....
returnpstmtBorrar.getResultSet();
}
publicResultSetactualizar(TipoMiClasec)throwsSQLException{

pstmtActualizar.clearParameters();
.....

returnpstmtActualizar.getResultSet();
}
....
}

beans
Losbeansconstruyenlosobjetosquelepasamosalosmtodosdelasclases*DAOyquenos
permitenhacerlasconsultasalabasededatos.
Comoenelcasoanterior,sehaseguidoelprocedimientodedisponerdeunaclasegeneral
porcadatabladelabasededatos,conelfindemodularizaralmximoposiblelaestructuradel
proyecto.
Elcontenidodeestasclasesvieneaseralgosimilaralosiguiente:
publicclassMiClase
{
/*Variableslocalesdelaclase*/
intidMiClase;
StringnombreMiClase;

/*Constructordelaclase*/
publicMiClase(intidMiClase,StringnombreMiClase)
{
this.idMiClase=idMiClase;
this.nombreMiClase=nombreMiClase;
}

/*Metodosdeconsulta*/
publicintgetIdMiClase()
{
returnthis.idMiClase;
}
publicStringgetNombreMiClase()
{
returnthis.nombreMiClase;
}

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

/*Metodosdemodificacion*/
publicbooleansetIdMiClase(intidMiClase)
{
this.idMiClase=idMiClase;
returntrue;
}
publicbooleansetNombreMiClase(StringnombreMiClase)
{
this.nombreMiClase=nombreMiClase;
returntrue;
}
}

Laestructuraessinoigual,simuyparecidaentodaslasclasesgenerales.
Estaestructurasehahechoasparanoduplicarcdigo,deestaforma,tantoelproyectoweb
comoelmdulodeTPVpuedenhacerusodelasclasesdisponiblesconimportarlalibrera.

Testpackages
Estacarpetaestavaca.

Libraries
ContienelaJDK1.6.

Testlibraries
ContieneJUnit4.1yJunit1.8.2.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Basededatos
Laversindelmotordebasededatosutilizadoparaeldesarrollohasidola5.0.38.Comose
comentalprincipiodeestedocumento,paralaadministracindelabasededatossehautilizado
una herramienta grfica, fcil e intuitiva. Podemos utilizar PHPMyAdmin, para hacer
modificacionesenlabasededatos,aadir,borrar,modificaryactualizarregistrosytablas.

Lailustracinanteriormuestralainterfazdelaherramientayademsnossirveparaverlas
tablasqueformanparteenelmomentodelapublicacindeestemanual.Enlapginawebdel
proyectoPHPMyAdminpodemosencontrarmultituddedocumentacinsobreste.
Lastablas,comosepuedecomprobarempiezansiemprepormaysculayestnensingular.
Unavezms,seinsisteenmantenerestepatrnalahoradecrearnuevastablas.Porejemplo,si
deseamos crear una nueva tabla, para almacenar los pedidos a proveedor, la llamaramos
PedidoProveedor.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Podemoscrearnuevastablasdelasiguienteforma:
CREATETABLE`Almacen`(
`IdAlmacen`int(3)NOTNULLauto_increment,
`Domicilio`varchar(50)collateutf8_spanish_cidefaultNULL,
`CodigoPostal`varchar(5)collateutf8_spanish_cidefaultNULL,
`Poblacion`varchar(50)collateutf8_spanish_cidefaultNULL,
`Provincia`varchar(20)collateutf8_spanish_cidefaultNULL,
`Telefono1`varchar(10)collateutf8_spanish_cidefaultNULL,
`Movil`varchar(10)collateutf8_spanish_cidefaultNULL,
`Fax`varchar(10)collateutf8_spanish_cidefaultNULL,
`Mail`varchar(50)collateutf8_spanish_cidefaultNULL,
`NombreAlmacen`varchar(50)collateutf8_spanish_ciNOTNULL,
PRIMARYKEY(`IdAlmacen`),
UNIQUEKEY`NombreAlmacen`(`NombreAlmacen`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_spanish_ciAUTO_INCREMENT=2;

Ah tenemos el cdigo necesario para crear la tabla que se muestra en la siguiente


ilustracin.ParainsertarlatablaenlabasededatosdesdelainterfazdePHPMyAdmin,nosvamos
alapestaaSQL,pegamoselcdigoyhacemosclicencontinuar.
EsrecomendablereflejareneldiagramaEntidadRelacincomoseintegralatabladentrode
laestructurayaexistentedelabasededatos.

Tablas
Laestructuradelastablasescomoseveenlaimagen,eldesarrolladorpuederecurriral
esquemarelacional,querecogetodaslastablasconsuscorrespondientesrelacionesparaconocer
mejoreltipodecamposutilizados.Sehandetenerencuentalassiguientesconsideraciones:
Loscamposquesonclaveprimaria,osonint,comoelquevemosenlaimagen,oson
bigint comoporejemploelidentificadordelatablaartculos.Suelenserautoincrementales,
salvocasosexcepcionalescomoenlatablaAdministradoryCajero.

Loscamposdetexto,detipovarchar,suelenserde50caracteres,porejemplo,parael
domicilio,lapoblacin,etc.20caracteresparacamposcomolaprovincia,5paraelcdigo
postaly10paralosnmerosdetelfono.

Los campos numricos, destinados a clculos como importes, precios, son de tipo
double.

LoscamposdetipoVerdadero/Falso,comoporejemploelcampoconectadodelatabla
Usuarios,sondetipotinyint(1).

Paranombrarloscampos,usaremosnombresidentificativos,enminscula,yqueno
contengancaracteresespeciales,porejemplo,sideseamoscrearelcampoDomiciliofiscalenla
tabla Almacen, que es la que se muestra en la imagen siguiente, lo nombraremos como
DomicilioFiscal.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Sifuesenecesariorealizarunacopiadeseguridaddelabasededatos,sepuedehacera
travsdelapropiainterfazdePHPMyAdminenlapestaaexportarousarelscriptcreadopara
dichopropsitoypuestoadisposicindelusuarioydeldesarrolladorenlaforjadelproyecto.
https://forja.rediris.es/docman/view.php/282/460/backupMySQL.sh
Tambincabelaposibilidadderestaurarunacopiadeseguridadenlapestaaimportar.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

ElservidordeServlet/JSPApacheTomcat
Tomcatenuncontenedordeservletsyservidorwebque,aunquehabitualmenteseintegra
conelpropioservidorApache,tambinpuedefuncionardeformaautnoma.Laversinutilizada
paraeldesarrollohasidola6.0.16.Sinentrarmuyendetalle,siresultainteresanteconocerla
estructuradedirectorios.Sihemosseguidocorrectamentelaguadeinstalacinrpida,larutade
nuestroservidorTomcathadeserlaquesemuestraenlasiguienteimagen.

LajerarquadedirectoriosportantoeslaquevemosRepasemosbrevementesta:

binarranque,cierre,yotrosscriptsyejecutables

commonclasescomunesquepuedenutilizarCatalinaylasaplicacionesweb

confficherosXMLyloscorrespondientesDTDparalaconfiguracindeTomcat

logslogsdeCatalinaydelasaplicaciones

serverclasesutilizadassolamenteporCatalina

sharedclasescompartidasportodaslasaplicacionesweb

webappsdirectorioquecontienelasaplicacionesweb

workalmacenamientotemporaldeficherosydirectorios

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

La carpeta que nos interesa especialmente para poder ejecutar correctamente nuestra
aplicacin de forma autnoma y sin necesidad de lanzarla desde el IDE de desarrollo es el
directoriowebapps,enelcual,talycomoapuntaladescripcin,esdondehadeestarcontenida
nuestraaplicacinenentornosdeproduccin.Portanto,esaqudondedebemoscopiarZeroV1.war
desdelacarpetadistdeldirectoriodelproyecto(workspacedetrabajo).
Elservidorhaceautomticamenteeldesplieguecuandololevantamosyutilizalosficheros
deconfiguracinincluidosenlaaplicacin,comoporejemplo,elcontext.xmlquecrearelpoolde
conexionesallanzarlaaplicacin.
Tambincabeconsiderarelcontenidodelacarpetabin,enlacualseencuentranlosscripts
necesarioparalanzarelservidor,pararlo,reiniciarloyconocersuestado.Estafuncionalidadseha
simplificadoaldisponerdeunscriptquehacelastareasanteriormentecomentadas.Podemos
descargarlodesdelaforja:
https://forja.rediris.es/docman/view.php/282/548/init_tomcat.sh
Cuandoestemosendesarrollo,podemoshacerestasmismasoperacionesdesdeNetBeanstal
ycomosemuestraenlasiguienteimagen.

Cuandoestdisponibleunaversindelaaplicacinlistaparaproduccinseexplicarnlos
pasos necesarios para lanzar Tomcat como un servicio del sistema operativo, para as poder
olvidarnosdel.
Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

Eplogo
Porltimo,recordaralposibledesarrolladorqueexistenforosdediscusindondetratarlos
distintostemassobrecodificacin,pruebas,bugs,nuevasfuncionalidades,etc,enloscualessele
invitaaparticipar.
Siademssetieneintersenelproyectoselesugierequeestatentoalasposiblesrevisiones
deestemanualydelrestodedocumentacindisponible.Unabuenamaneradeestaraldaes
sindicarse a los agregadores dinmicos del blog, donde informaremos puntualmente de las
novedadesquevayansurgiendo.
Tambincabeagradecerelhechodehaberllegadohastaaqu,yaqueposiblementeseauna
seal de que anteriormente se han ledo el resto de pginas. Animar sin ms a participar
activamente en el proyecto contribuyendo de esta manera a este pequeo sueo que supone
desarrollarunsistemadegestincomercialycontabilidadcapazdecubrirlasnecesidadesdelas
PYMES.
Suerte.

Manual del desarrollador - Proyecto (Codename) Zero (versin 0.0.1-beta)

También podría gustarte