View
212
Download
0
Embed Size (px)
DESCRIPTION
lajsp
Citation preview
Gestindetareasdedesarrollodesoftware
Fco.JavierYezJuan
ITIS
Consultor:JavierFerrGarcia
9deenerode2006
ndice de contenidoPlandetrabajo......................................................................................................................................................3
DescripcindelTFC.......................................................................................................................................3Objetivosgeneralesyespecficos...................................................................................................................3Planificacin....................................................................................................................................................3
Anlisisderequisitos............................................................................................................................................5Introduccin....................................................................................................................................................5Glosario...........................................................................................................................................................6Modelodedominio.........................................................................................................................................7Casosdeuso....................................................................................................................................................8Guiones...........................................................................................................................................................9Descripcintextualdeloscasosdeuso........................................................................................................10Fichasdeloscasosdeuso.............................................................................................................................11Futurasmejoras.............................................................................................................................................13
Diseo.................................................................................................................................................................14Arquitectura..................................................................................................................................................15
Capas.......................................................................................................................................................15Implementacindelascapas...................................................................................................................15Arquitecturadepatrones.........................................................................................................................17Diagramadedespliegue..........................................................................................................................19Diagramadecomponentes......................................................................................................................20Diagramadeclases..................................................................................................................................21Diagramadecolaboracin.......................................................................................................................23Persistencia..............................................................................................................................................24Detallesdeimplementacin....................................................................................................................26
ServiceLocator...................................................................................................................................26TypesafeEnumeration.......................................................................................................................26
Interfazdeusuario.........................................................................................................................................27Conclusiones.......................................................................................................................................................28Guadeinstalacin.............................................................................................................................................29
Paso1.............................................................................................................................................................29Paso2............................................................................................................................................................29Paso3............................................................................................................................................................30Paso4............................................................................................................................................................30Paso5............................................................................................................................................................30
2de34
Plandetrabajo
DescripcindelTFCEstetrabajofinaldecarreraconsisteenlarealizacindeunaaplicacinbajolaplataformaJ2EE.La
realizacindeesta aplicacinpermitir aplicarconocimientosadquiridosendiferentesasignaturasdelosestudiosdeITIS.ConeldesarrollodelaaplicacinseadquirirnlosconocimientosbsicossobreJ2EE.
Laaplicacinarealizarpermitirgestionarlastareaspendientesenunproyectodedesarrollodesoftware.Esdeutilidadsobretodoenlasultimasfasesdelproyectocuandosequierecerraryhaymltiplescambiospequeosquehacer(corregirbugs,pequeasmejoras,etc).Tambinestilparalafasedemantenimientoenlaquelosusuariosdetectanbugsypidenpequeoscambios.
ObjetivosgeneralesyespecficosEldesarrollodelaaplicacinsebasarenpatronesdediseo.
Lalgicadelaaplicacinsedividirenvariaspartes:lgicadepresentacin,lgicadenegocioylgicadeintegracin(persistenciaenSGBD).Sepretendeaplicarlospatronesdediseoapropiadosparacadatipodelgica.
Sepretendenlossiguientesobjetivosfuncionales:
1. Introducir tareas pendientes indicando el tipo de tarea (corregir bug, aadir funcionalidad,cambiarfuncionalidad,etc),eltitulo,ladescripcin,laprioridadyelproyecto.
2. Cambiarelestadodeunatarea(encurso,realizada,rechazada,etc.)
3. Listarlastareasfiltradasporestado,yordenadasporprioridad.
4. Crear,modificaryeliminarproyectos.
PlanificacinFecha Hito
16/10/05 Documentodeanlisisderequisitos
30/10/05 Documentodediseo
13/11/05 Programacin:Crear,modificaryeliminarproyectos
20/11/05 Programacin:Introducirtareas
27/11/05 Programacin:Listartareas
4/12/05 Programacin:Cambiarelestadodeunatarea
18/12/05 Memoria
3de34
Fecha Hito
25/12/05 PresentacindefensadelTFC
4de34
AnlisisderequisitosIntroduccin
Enlosproyectosdedesarrollodesoftwaresesuelengestionarlosbugsmedianteaplicacionesrealizadasparatalfin,como,porejemplo,bugzilla.
Sepretenderealizarunaaplicacinquehagaunpocoms.Ademsdelosbugs,duranteeldesarrollodesoftwaresesuelenacumularpequeastareas,talescomovariacionesenlafuncionalidad,variacionesenelinterfaz,etc.Todasestastareasjuntoconlosbugspodrnsergestionadasporlaaplicacin.
5de34
GlosarioProyecto:serefiereaunproyectodedesarrollodesoftware.
Tarea:trabajopendientederealizarenunproyecto.
Estado:situacinenqueseencuentrauntarea.
Tipo:naturalezadeunatarea.Losposiblestipossonlossiguientes:bug,modificacin,nuevafuncionalidad.
6de34
Modelodedominio
Parasimplificarsehanomitidolosmtodosdeaccesoalosatributosdelasclases.
7de34
Casosdeuso
8de34
GuionesAdministrador:eladministradoreselresponsabledecrear,modificaryeliminarlosproyectosalosqueselesasignarntareas.
Usuario:elusuarioserquienasignetareasalosproyectos.Tambinseencargardemodificarelestadodedichastareas.
9de34
DescripcintextualdeloscasosdeusoCU01Crearproyecto:creaunnuevoproyectoenelsistema.
CU02Modificarproyecto:modificalaspropiedadesdeunproyectoexistenteenelsistema.
CU03Eliminarproyecto:eliminaunproyectoexistenteenelsistema.Siexistentareasrelacionadasconelproyectotambinsoneliminadas.
CU04Listarproyectos:listatodoslosproyectosexistentesenelsistema.
CU05Introducirtarea:introduceunanuevatareaasociadaaundeterminadoproyecto.
CU06Modificartarea:modificalaspropiedadesdeunatareaexistenteenelsistema.
CU07Cambiarestadotarea:cambiaelestadodeunatareaexistenteenelsistema.
CU08Listartareas:listalastareaspertenecientesaundeterminadoproyecto.
10de34
Fichasdeloscasosdeuso
Casodeuso:crearproyecto Cdigo:CU01
Descripcin:creaunnuevoproyectoenelsistema
Actores:administrador
Prioridad:alta
Precondicin: Postcondicin:
Casosdeusorelacionados: Frecuenciadeuso:baja
Casodeuso:modificarproyecto Cdigo:CU02
Descripcin:modificalaspropiedadesdeunproyectoexistenteenelsistema
Actores:administrador
Prioridad:baja
Precondicin:elproyectotienequehabersidocreado
Postcondicin:
Casosdeusorelacionados: Frecuenciadeuso:baja
Casodeuso:Eliminarproyecto Cdigo:CU03
Descripcin:eliminaunproyectoexistenteenelsistema.Siexistentareasrelacionadasconelproyectotambinsoneliminadas.
Actores:administrador
Prioridad:baja
Precondicin:elproyectotienequehabersidocreado
Postcondicin: las tareas relacionados con elproyectonodebeexistir
Casosdeusorelacionados: Frecuenciadeuso:baja
Casodeuso:Listarproyectos Cdigo:CU04
Descripcin:listatodoslosproyectosexistentesenelsistema
Actores:administrador,usuario
Prioridad:alta
Precondicin: Postcondicin:
Casosdeusorelacionados: Frecuenciadeuso:alta
Casodeuso:Introducirtarea Cdigo:CU05
Descripcin:introduceunanuevatareaasociadaaundeterminadoproyecto
Actores:usuario
11de34
Prioridad:media
Precondicin: el proyecto relacionado tiene queexistir
Postcondicin:
Casosdeusorelacionados: Frecuenciadeuso:alta
Casodeuso:Modificartarea Cdigo:CU06
Descripcin:modificalaspropiedadesdeunatareaexistenteenelsistema
Actores:usuario
Prioridad:baja
Precondicin:latareatienequeexistir Postcondicin:
Casosdeusorelacionados: Frecuenciadeuso:baja
Casodeuso:Cambiarestadotarea Cdigo:CU07
Descripcin:cambiaelestadodeunatareaexistenteenelsistema
Actores:usuario
Prioridad:alta
Precondicin:latareadebeexistir Postcondicin:
Casosdeusorelacionados: Frecuenciadeuso:alta
Casodeuso:Listartareas Cdigo:CU08
Descripcin:listalastareaspertenecientesaundeterminadoproyecto
Actores:usuario
Prioridad:media
Precondicin: Postcondicin:
Casosdeusorelacionados: Frecuenciadeuso:alta
12de34
FuturasmejorasDebidoalimitacionesdetiempoenesteproyectonosehanpodidoincluiralgunasfuncionalidades.
Estasfuncionalidadessonlassiguientes:
Seguridad: creacin de una gestin de usuarios basada en roles. Cada usuario deberautenticarseparaaccederalsistemaylafuncionalidadquetendrdisponiblevariarsegnlosrolesqueposea.
Asignacindetareas: sepodrasignarunatareaaunusuarioenconcreto.Sepodrlistarlastareasasignadasaundeterminadousuarioyfiltrarporestado.
Avisos por email: cuando a un usuario se le asigne una tarea se le avisar por correoelectrnico.
13de34
Diseo
14de34
Arquitectura
Capas
Enesteesquemapodemosverlascapasdelasquevaaconstarelsistema.
Lacapaderenderizadoserefierealnavegador(InternetExplorer,Firefox,Opera,etc.).
Lacapadepresentacineslaquerespondealaspeticionesdelacapaderenderizadodespusdeconsultaralacapadenegocio.SurespuestaesenformadeHTML.
Lacapadenegociorespondealacapadepresentacindespusdeconsultaralacapadeintegracin.Enestacapaesdondesedebeimplementarlasreglasdenegocio.
Lacapadeintegracinpermitealacapadenegocioaccederalapersistencia.
Lacapadepersistenciaeslaquepermitepersistiryrecuperarlainformacinprocedenteodemandadaporlasotrascapas.
Implementacin de las capasLacapaderenderizadonolavamosaimplementaryaqueexistenmltiplesnavegadoresquesiguenlos
estndaresyquesernvalidosparaintegrarseenelsistema.
15de34
Renderiza
do
Presentaci
n
Negocio
Integraci
n
Persiste
ncia
LacapadepresentacinlaimplementaremosusandoelpopularframeworkStruts.
LacapadenegociolaimplementaremosusandoStatelessSessionBeans.
LacapadeintegracinlaimplementaremosusandoelpatrnDAO(vermsadelantelaexplicacin).
La capa de persistencia, al igual que la de renderizado, no la vamos a implementar ya que existenmltiplessoluciones.EnestecasoconfiaremoslapersistenciaalSGBDPostgreSQL.
16de34
Arquitectura de patrones
17de34
DAO
SessionFaade
ServiceLocator
BusinessDelegate
Controler
Model
View
TransferObject
BasedeDatos
EncolorazulestnloscomponentesdelpatrnMVC2.,engrislospatronesdelgicadenegocio,enrojolosdeintegracin,enazulelpatrnTransferObjectyenamarilloelSGBDquenoesunpatrnperoloheincluidoenelesquemaparamayorclaridad.
MVC2: elpatrnMVC2(ModeloVistaControlador2)eselqueemplearenlacapadepresentacin.Struts esunframeworkmuyextendidoquesebasaenMVC2.ElfuncionamientodelpatrnMVC2sebasaenqueelcontrolador(servlet)recibelaspeticionesqueprocesa,traslocualinstanciaelmodelo(JavaBean o FormBean) e invoca a la vista (JSP) tras lo cual se contesta a la peticin. Enhttp://www.javaworld.com/javaworld/jw121999/jw12ssjjspmvc.htmlhayunarticulointeresantesobrelaaplicacindeMVC2conJSP.Deestearticuloheextradoelsiguienteesquema:
SessionFaade:estepatrnpermiteenunaplataformamulticapaJ2EEmostrarunafachadadelacapadelgicadenegocioalacapadepresentacin.Encapsulaelaccesoalalgicadenegociopresentandounniveldeabstraccinelevado.Laimplementacindel SessionFaade serealizaconun sessionbean. EstepatrnestabasadoenelpatrnFaadedeGoF,ysedescribeenellibroCoreJ2EEPatterns.
BussinesDelegate:lafuncindeestepatrnesencapsularlacomplejidaddelacomunicacinremotaconloscomponentesdenegocio.Aunqueseuseenlapartedelcliente,seconsideraunpatrndenegocioyaqueeselaccesodelalgicadenegocioparaelclienteylosueleprogramarelprogramadordelgicadenegocio.El Bussines Delegate suele usar el patrn Service Locator para hacer el lookup de los servicios. SecomunicadirectamenteconelSessionFaade.
DAO:elpatrnDAO(DataAccessObject)permiteencapsularlosaccesosalapersistencia.Esunpatrndelacapadeintegracin.
ServiceLocator:ocultalaimplementacindelmecanismodelookupdelAPIJNDI.
TransferObject:seusaparamoverinformacinentrecapas.EnCoreJ2EEPatternssepresentacomounpatrndelgicadenegocio.Perootrosautoresloconsideranunpatrnmulticapa.TambinesconocidocomoValueObject.
18de34
Diagrama de despliegueEneldiagramadedesplieguesevecomodesdeelcliente,pormediodelnavegadorweb,seaccedeal
servidordeaplicaciones(Jboss)ydesdeesteseaccedealSGBD(PostgreSQL)queestnenotramquina(aunquepodraestarenlamisma).
19de34
Diagrama de componentesLaaplicacinconstadedoscomponentes.SoftwareTasks.jareselcomponentequecontienelalgicade
negocio, mientras que SoftwareTasks.war es el componente que contiene la lgica de presentacin. Elcomponentedelgicadenegociopresentaunosinterfacesalosquelalgicadepresentacinaccede.
20de34
Diagrama de clasesElsiguientediagramasecorrespondeconlacapadenegocioeintegracin.
21de34
Elsiguientediagramasecorrespondeconlacapadepresentacin.SehaincluidolaclaseProjectDelegatequenoperteneceestrictamentealalgicadepresentacin.
nicamentesehacereferenciaalasclaserelacionadasconlaentidad proyecto yaquelosmecanismorelacionadosconlasdemsentidadessonmuysimilares.
22de34
Diagrama de colaboracinEl siguiente diagrama de colaboracinse refiere al caso de uso de mostrar todos los proyectos. Es
representativodelosdemscasosdeuso.
23de34
PersistenciaLalabordepersistenciaseconfaalsistemagestordebasesdedatosPostgreSQL.Acontinuacinsedefinenlastablasjuntoconlassentenciasdecreacin.
Tabla:Project
Campo Tipo Referenciaa
ProjectId serial
Name text
CREATE TABLE Project (ProjectId serial PRIMARY KEY,Name text);
Tabla:Priority
Campo Tipo Referenciaa
PriorityId serial
Name text
CREATE TABLE Priority (PriorityId serial PRIMARY KEY,Name text);
Tabla:Status
Campo Tipo Referenciaa
StatusId serial
Name text
CREATE TABLE Status (StatusId serial PRIMARY KEY,Name text);
Tabla:Task
Campo Tipo Referenciaa
TaskId serial
Name text
Description text
24de34
Tabla:Task
Campo Tipo Referenciaa
ProjectId int Project
StatusId int Status
PriorityId int Priority
TypeId int
CREATE TABLE Task (TskId serial PRIMARY KEY,Name text,Description text,ProjectId int REFERENCES Project,StatusId int REFERENCES Status,PriorityId int REFERENCES Priority,TypeId int);
25de34
Detalles de implementacin
ServiceLocator
Para implementar el patrn ServiceLocator he estudiado dos ejemplos. El primero ha sido el de laaplicacinJavaAdventureBuilderqueestaenlosblueprintsdeSunsobreJava.Elcdigofuenteesten:
http://java.sun.com/blueprints/code/adventure/1.0/src/com/sun/j2ee/blueprints/servicelocator/ejb/ServiceLocator.java.html
PorotroladohemiradoelejemplodeOracle:http://www.oracle.com/technology/sample_code/tech/java/j2ee/vsm12/src/oracle/otnsamples/util/ServiceLocator.java.html
MevoyaquedarconelejemplodeOracleporsusimplicidad.AunquelomodificarparaimplementarelpatrnSingletonynotenerqueinstanciarlaclasecadavezquesequierausar.
Typesafe Enumeration
Lostiposdetareasnosonconfigurables.PararepresentarlosusarelpatrnTypesafeEnumerationqueesdescritoenDesignPatterns:ElementsofReusableObjectOrientedSoftware.
Este patrn permite representar un conjunto fijo de valores de manera segura. Cada valor de laenumeracinposeeunainstanciapublica.Existeunnicoobjetoparacadavalor.
26de34
InterfazdeusuarioAqusemuestraunapantallasignificativadeloquepuedeserellistadodetareas.
Elmenestposicionadoalaizquierdamientrasquealaderechaaparecenlosdilogos.
27de34
ImplementacinEnesteapartadovoyacomentarlosaspectos,amijuicio,mssignificaticosdelaimplementacin.
ServiceLocator
LafuncionalidaddelServiceLocatoryahasidoexplicadaenelapartadodediseo.ParaimplementarmiServiceLocatormehebasadoenunodesarroladoporOracle:(http://www.oracle.com/technology/sample_code/tech/java/j2ee/vsm12/src/oracle/otnsamples/util/ServiceLocator.java.html)
LohemodificadoparaqueimplementaraelpatrnSinglentonyparaquenohayaquehacercastingdelosdiferentesobjetosdevueltos.
Elresultadoeselsiguiente:
package edu.uoc.projecttasks.util;
import java.util.Hashtable;
import javax.ejb.EJBHome;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.rmi.PortableRemoteObject;import javax.sql.DataSource;
/* * Basado en el ServiceLocator de Oracle *
*/
public final class ServiceLocator {
// Cache of objects in JNDI tree private static Hashtable homeCache = new Hashtable();
// Initial context private static InitialContext defaultContext = getContext();
private ServiceLocator() { }
private static InitialContext getContext() { try { return new InitialContext(); } catch (NamingException e) { throw new ServiceLocatorException(e.getMessage()); } }
/** * Method to return an object in the default JNDI context, with the supplied * JNDI name. * @param jndiName The JNDI name * @return Object The object in the JNDI tree for this name. * @throws UtilityException Exception this method can throw */
28de34
public static Object getService(String jndiName) { try { if (!homeCache.containsKey(jndiName)) {
// If the service is not in the cache, get the object for the // supplied jndi name and put it in the cache homeCache.put(jndiName, defaultContext.lookup(jndiName)); } } catch (NamingException ex) { throw new ServiceLocatorException("Exception thrown from getService " + "method of ServiceLocator class : " + ex.getMessage()); } catch (SecurityException ex) {
throw new ServiceLocatorException("Exception thrown from getService " + "method of ServiceLocator class : " + ex.getMessage()); }
// Return object from cache return homeCache.get(jndiName); }
public static Integer getInteger(String jndiName) { return (Integer) getService(jndiName); }
public static String getString(String jndiName) { return (String) getService(jndiName); }
public static DataSource getDataSource(String jndiName) { return (DataSource) getService(jndiName); }
public static EJBHome getRemoteHome(String jndiName, Class className) { return (EJBHome) PortableRemoteObject.narrow( getService(jndiName), className);
}
}
XDoclet
XDoclet(http://xdoclet.sf.net/)esunaherramientadegeneracinautomticadecdigo.LaaplicacinquehedesarrolladohaceusodelosStatelessSessionBeans,quesonbastanteengorrososdeprogramardebidoaquehayquerealizarvariasclasesparaunosolo.GraciasaXDocletbastaconprogramarunnicaclaseylasdemssegeneranautomticamente. Porejemplo,paraprogramar PriorityFacade sehaninsertadoenelcdigofuentelossiguientesatributosXDoclet:
/** * @ejb.bean name="PriorityFacade" * display-name="Name for PriorityFacade" * description="Description for PriorityFacade" * jndi-name="ejb/PriorityFacade" * type="Stateless" * view-type="both"*/
29de34
Tags
Enlacapadepresentacinlastareassonmuysimilares.ParanotenerquerealizarcdigoJSPmuysimilarencadaJSPheutilizadotagsdeJSP.Elmstilmehasidoelqueheempleadoparaloslistados:
Eliminar
TypeSafeEnumeration
Para implementar el patrn Type Safe Enumeration he hecho uso del Enum de Java 5. Lo cual hasimplificadobastantelascosas.
Haquedadoas:
package edu.uoc.tfc.projecttasks.to;
30de34
import java.io.Serializable;
public enum TypeTO implements Serializable {
BUG(1, "bug"), NEW_FUNCTIONALITY(2, "Nueva funcionalidad"),MODIFICATION(3, "Modificacin"), OTHER(4, "Otros");
private int id;private String name;
private TypeTO(int id, String name) {this.id = id;this.name = name;
}
public int getId() {return id;
}
public void setId(int id) {this.id = id;
}
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}}
31de34
ConclusionesLarealizacindeunproyectoJ2EEnoestrivial.LospatronesdediseoespecificosparaJ2EEsonuna
orientacinbsica,porlocualesnecesariotenerconocimientosdediagramacinUML.Debidoalotediosodelaprogramcindelasinterfaces,localesyremotas,esmuyrecomendablerecurriraXdocletparacrearcdigodeformaautomtica.
En la parte de presentacin la base es el conocimiento del HTML. Conociendo HTMLno es muycomplicadoentenderlafilosofiadelJSP.DentrodeJSPhayunavariedaddelibreriasquesepuedenescoger.EnelcasodeesteproyectoheoptadoporlasqueparecensermsdifundidasStrutsyJSTL.StrutsademsdeproporcionarlibreriasdetagsproporcionaunFrontControllerqueimplemetaMVC2.Sinosedispusieradelframework Struts , o de cualquier otro, la programacin de la parte de presentacin sera mucho mscompleja.
LaconclusinfinalesqueprogramarunaaplicacinJ2EErequieredeunacurvadeaprendizajeelevada.AcambioJ2EEproporcionaunaseriedeventajas:separacindelgicadenegocioypresentacin,seguridadcontroladaporelservidordeaplicacionesyrobustezdelasaplicaciones,entreotrasventajas.
32de34
GuadeinstalacinLoexplicadoaquserefierealainstalacindelaaplicacinenunservidordeaplicacionesJBoss.Seha
probadoenunJBoss versin4.0.3.. Esdeesperarquefuncioneenotras versiones, aunquenohasidoverificado.
Paso1
Creareneldirectoriodedespliegueunfichero,correspondientealdatasource,llamadotasksds.xmlconelsiguientecontenido:
TasksDS jdbc:postgresql://localhost:5432/tasks org.postgresql.Driver javier
PostgreSQL 8.0
Esposible,dependiendodelaconfiguracindelabasededatos,quehayaquemodificarelusuarioycontraseadelfichero.
Paso2
Crearlaestructuradelabasededatosconlassiguientessentencias:
33de34
CREATE TABLE Project (ProjectId serial PRIMARY KEY,Name text);
CREATE TABLE Priority (PriorityId serial PRIMARY KEY,Name text);
CREATE TABLE Status (StatusId serial PRIMARY KEY,Name text);
CREATE TABLE Task (TskId serial PRIMARY KEY,Name text,Description text,ProjectId int REFERENCES Project,StatusId int REFERENCES Status,PriorityId int REFERENCES Priority,TypeId int);
Paso3
CopiareneldirectoriodelibreriasdelservidorlaslibreriscorrespondientesaStrutsyaJSTL.
LaslibreriasdeStrutsestndisponiblesenhttp://apache.rediris.es/struts/library/struts1.2.8lib.zip.
Las librerias de JSTL estn disponibles en http://www.apache.org/dist/jakarta/taglibs/standard/jakartataglibsstandardcurrent.zip
Paso4
CopiareneldirectoriodedespliegueelficheroProjectTasksApplication.ear.
Paso5
ArrancarJBossyaccederahttp://localhost:8080/ProjectTasksWeb/
34de34
Plan de trabajoDescripcin del TFCObjetivos generales y especficosPlanificacin
Anlisis de requisitosIntroduccinGlosarioModelo de dominioCasos de usoGuionesDescripcin textual de los casos de usoFichas de los casos de usoFuturas mejoras
DiseoArquitecturaCapasImplementacin de las capasArquitectura de patronesDiagrama de despliegueDiagrama de componentesDiagrama de clasesDiagrama de colaboracinPersistenciaDetalles de implementacinServiceLocatorTypesafe Enumeration
Interfaz de usuario
ImplementacinService LocatorXDocletTagsType Safe Enumeration
ConclusionesGua de instalacinPaso1Paso 2Paso 3Paso 4Paso 5