You are on page 1of 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 sharedclasescompartidasportodaslasaplicacionesw eb 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)

You might also like