Vous êtes sur la page 1sur 34

Gestindetareasdedesarrollodesoftware

Fco.JavierY ezJuan
ITIS
Consultor:JavierFerrGarcia
9deenerode2006

ndice de contenido
Plandetrabajo......................................................................................................................................................3
DescripcindelTFC.......................................................................................................................................3
Objetivosgeneralesyespecficos...................................................................................................................3
Planificacin....................................................................................................................................................3
Anlisisderequisitos............................................................................................................................................5
Introduccin....................................................................................................................................................5
Glosario...........................................................................................................................................................6
Modelodedominio.........................................................................................................................................7
Casosdeuso....................................................................................................................................................8
Guiones...........................................................................................................................................................9
Descripcintextualdeloscasosdeuso........................................................................................................10
Fichasdeloscasosdeuso.............................................................................................................................11
Futurasmejoras.............................................................................................................................................13
Diseo.................................................................................................................................................................14
Arquitectura..................................................................................................................................................15
Capas.......................................................................................................................................................15
Implementacindelascapas...................................................................................................................15
Arquitecturadepatrones.........................................................................................................................17
Diagramadedespliegue..........................................................................................................................19
Diagramadecomponentes......................................................................................................................20
Diagramadeclases..................................................................................................................................21
Diagramadecolaboracin.......................................................................................................................23
Persistencia..............................................................................................................................................24
Detallesdeimplementacin....................................................................................................................26
ServiceLocator...................................................................................................................................26
TypesafeEnumeration.......................................................................................................................26
Interfazdeusuario.........................................................................................................................................27
Conclusiones.......................................................................................................................................................28
Guadeinstalacin.............................................................................................................................................29
Paso1.............................................................................................................................................................29
Paso2............................................................................................................................................................29
Paso3............................................................................................................................................................30
Paso4............................................................................................................................................................30
Paso5............................................................................................................................................................30

2de34

Plandetrabajo
DescripcindelTFC
EstetrabajofinaldecarreraconsisteenlarealizacindeunaaplicacinbajolaplataformaJ2EE.La
realizacindeestaaplicacinpermitiraplicarconocimientosadquiridosendiferentesasignaturasdelos
estudiosdeITIS.ConeldesarrollodelaaplicacinseadquirirnlosconocimientosbsicossobreJ2EE.
Laaplicacinarealizarpermitirgestionarlastareaspendientesenunproyectodedesarrollodesoftware.
Esdeutilidadsobretodoenlasultimasfasesdelproyectocuandosequierecerraryhaymltiplescambios
pequeosquehacer(corregirbugs,pequeasmejoras,etc).Tambinestilparalafasedemantenimientoen
laquelosusuariosdetectanbugsypidenpequeoscambios.

Objetivosgeneralesyespecficos
Eldesarrollodelaaplicacinsebasarenpatronesdediseo.
Lalgicadelaaplicacinsedividirenvariaspartes:lgicadepresentacin,lgicadenegocioylgica
deintegracin(persistenciaenSGBD).Sepretendeaplicarlospatronesdediseoapropiadosparacadatipo
delgica.
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.

Planificacin
Fecha

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
25/12/05

Hito
PresentacindefensadelTFC

4de34

Anlisisderequisitos
Introduccin
Enlosproyectosdedesarrollodesoftwaresesuelengestionarlosbugsmedianteaplicacionesrealizadas
paratalfin,como,porejemplo,bugzilla.
Sepretenderealizarunaaplicacinquehagaunpocoms.Ademsdelosbugs,duranteeldesarrollode
softwaresesuelenacumularpequeastareas,talescomovariacionesenlafuncionalidad,variacionesenel
interfaz,etc.Todasestastareasjuntoconlosbugspodrnsergestionadasporlaaplicacin.

5de34

Glosario
Proyecto:serefiereaunproyectodedesarrollodesoftware.
Tarea:trabajopendientederealizarenunproyecto.
Estado:situacinenqueseencuentrauntarea.
Tipo:naturalezadeunatarea.Losposiblestipossonlossiguientes:bug,modificacin,nuevafuncionalidad.

6de34

Modelodedominio

Parasimplificarsehanomitidolosmtodosdeaccesoalosatributosdelasclases.

7de34

Casosdeuso

8de34

Guiones
Administrador:eladministradoreselresponsabledecrear,modificaryeliminarlosproyectosalosquese
lesasignarntareas.
Usuario:elusuarioserquienasignetareasalosproyectos.Tambinseencargardemodificarelestadode
dichastareas.

9de34

Descripcintextualdeloscasosdeuso
CU01Crearproyecto:creaunnuevoproyectoenelsistema.
CU02Modificarproyecto:modificalaspropiedadesdeunproyectoexistenteenelsistema.
CU03Eliminarproyecto:eliminaunproyectoexistenteenelsistema.Siexistentareasrelacionadasconel
proyectotambinsoneliminadas.
CU04Listarproyectos:listatodoslosproyectosexistentesenelsistema.
CU05Introducirtarea:introduceunanuevatareaasociadaaundeterminadoproyecto.
CU06Modificartarea:modificalaspropiedadesdeunatareaexistenteenelsistema.
CU07Cambiarestadotarea:cambiaelestadodeunatareaexistenteenelsistema.
CU08Listartareas:listalastareaspertenecientesaundeterminadoproyecto.

10de34

Fichasdeloscasosdeuso
Casodeuso:crearproyecto

Cdigo:CU01

Descripcin:creaunnuevoproyectoenel
sistema

Actores:administrador

Precondicin:

Postcondicin:

Casosdeusorelacionados:

Frecuenciadeuso:baja

Casodeuso:modificarproyecto

Cdigo:CU02

Descripcin:modificalaspropiedadesdeun
proyectoexistenteenelsistema

Actores:administrador

Precondicin:elproyectotienequehabersido
creado

Postcondicin:

Casosdeusorelacionados:

Frecuenciadeuso:baja

Casodeuso:Eliminarproyecto

Cdigo:CU03

Descripcin:eliminaunproyectoexistenteen
elsistema.Siexistentareasrelacionadasconel
proyectotambinsoneliminadas.

Actores:administrador

Precondicin:elproyectotienequehabersido
creado

Postcondicin: las tareas relacionados con el


proyectonodebeexistir

Casosdeusorelacionados:

Frecuenciadeuso:baja

Casodeuso:Listarproyectos

Cdigo:CU04

Descripcin:listatodoslosproyectosexistentes
enelsistema

Actores:administrador,usuario

Precondicin:

Postcondicin:

Casosdeusorelacionados:

Frecuenciadeuso:alta

Casodeuso:Introducirtarea

Cdigo:CU05

Descripcin:introduceunanuevatarea
asociadaaundeterminadoproyecto

Actores:usuario

Prioridad:alta

Prioridad:baja

Prioridad:baja

Prioridad:alta

11de34

Prioridad:media
Precondicin: el proyecto relacionado tiene que Postcondicin:
existir
Casosdeusorelacionados:

Frecuenciadeuso:alta

Casodeuso:Modificartarea

Cdigo:CU06

Descripcin:modificalaspropiedadesdeuna
tareaexistenteenelsistema

Actores:usuario

Precondicin:latareatienequeexistir

Postcondicin:

Casosdeusorelacionados:

Frecuenciadeuso:baja

Casodeuso:Cambiarestadotarea

Cdigo:CU07

Descripcin:cambiaelestadodeunatarea
existenteenelsistema

Actores:usuario

Precondicin:latareadebeexistir

Postcondicin:

Casosdeusorelacionados:

Frecuenciadeuso:alta

Casodeuso:Listartareas

Cdigo:CU08

Descripcin:listalastareaspertenecientesa
undeterminadoproyecto

Actores:usuario

Precondicin:

Postcondicin:

Casosdeusorelacionados:

Frecuenciadeuso:alta

Prioridad:baja

Prioridad:alta

Prioridad:media

12de34

Futurasmejoras
Debidoalimitacionesdetiempoenesteproyectonosehanpodidoincluiralgunasfuncionalidades.
Estasfuncionalidadessonlassiguientes:

Seguridad: creacin de una gestin de usuarios basada en roles. Cada usuario deber
autenticarseparaaccederalsistemaylafuncionalidadquetendrdisponiblevariarsegnlosroles
queposea.

Asignacindetareas:sepodrasignarunatareaaunusuarioenconcreto.Sepodrlistarlas
tareasasignadasaundeterminadousuarioyfiltrarporestado.

Avisos por email: cuando a un usuario se le asigne una tarea se le avisar por correo
electrnico.

13de34

Diseo

14de34

Arquitectura
Capas

Persistencia

Integracin

Negocio

Presentacin

Renderizado

Enesteesquemapodemosverlascapasdelasquevaaconstarelsistema.
Lacapaderenderizadoserefierealnavegador(InternetExplorer,Firefox,Opera,etc.).
Lacapadepresentacineslaquerespondealaspeticionesdelacapaderenderizadodespusdeconsultar
alacapadenegocio.SurespuestaesenformadeHTML.
Lacapadenegociorespondealacapadepresentacindespusdeconsultaralacapadeintegracin.En
estacapaesdondesedebeimplementarlasreglasdenegocio.
Lacapadeintegracinpermitealacapadenegocioaccederalapersistencia.
Lacapadepersistenciaeslaquepermitepersistiryrecuperarlainformacinprocedenteodemandadapor
lasotrascapas.

Implementacin de las capas


Lacapaderenderizadonolavamosaimplementaryaqueexistenmltiplesnavegadoresquesiguenlos
estndaresyquesernvalidosparaintegrarseenelsistema.
15de34

LacapadepresentacinlaimplementaremosusandoelpopularframeworkStruts.
LacapadenegociolaimplementaremosusandoStatelessSessionBeans.
LacapadeintegracinlaimplementaremosusandoelpatrnDAO(vermsadelantelaexplicacin).
La capa de persistencia, al igual que la de renderizado, no la vamos a implementar ya que existen
mltiplessoluciones.EnestecasoconfiaremoslapersistenciaalSGBDPostgreSQL.

16de34

Arquitectura de patrones

Model

View

Controler

TransferObject

BusinessDelegate

SessionFaade

ServiceLocator

DAO

BasedeDatos
17de34

EncolorazulestnloscomponentesdelpatrnMVC2.,engrislospatronesdelgicadenegocio,enrojo
losdeintegracin,enazulelpatrnTransferObjectyenamarilloelSGBDquenoesunpatrnperolohe
incluidoenelesquemaparamayorclaridad.
MVC2: elpatrnMVC2(ModeloVistaControlador2)eselqueemplearenlacapadepresentacin.
Struts esunframeworkmuyextendidoquesebasaenMVC2.ElfuncionamientodelpatrnMVC2se
basaenqueelcontrolador(servlet)recibelaspeticionesqueprocesa,traslocualinstanciaelmodelo
(JavaBean o FormBean) e invoca a la vista (JSP) tras lo cual se contesta a la peticin. En
http://www.javaworld.com/javaworld/jw121999/jw12ssjjspmvc.htmlhayunarticulointeresantesobre
laaplicacindeMVC2conJSP.Deestearticuloheextradoelsiguienteesquema:

SessionFaade:estepatrnpermiteenunaplataformamulticapaJ2EEmostrarunafachadadelacapa
delgicadenegocioalacapadepresentacin.Encapsulaelaccesoalalgicadenegociopresentandoun
niveldeabstraccinelevado.Laimplementacindel SessionFaade serealizaconun sessionbean. Este
patrnestabasadoenelpatrnFaadedeGoF,ysedescribeenellibroCoreJ2EEPatterns.
BussinesDelegate:lafuncindeestepatrnesencapsularlacomplejidaddelacomunicacinremotacon
loscomponentesdenegocio.Aunqueseuseenlapartedelcliente,seconsideraunpatrndenegocioyaque
eselaccesodelalgicadenegocioparaelclienteylosueleprogramarelprogramadordelgicadenegocio.
El Bussines Delegate suele usar el patrn Service Locator para hacer el lookup de los servicios. Se
comunicadirectamenteconelSessionFaade.
DAO:elpatrnDAO(DataAccessObject)permiteencapsularlosaccesosalapersistencia.Esunpatrn
delacapadeintegracin.
ServiceLocator:ocultalaimplementacindelmecanismodelookupdelAPIJNDI.
TransferObject:seusaparamoverinformacinentrecapas.EnCoreJ2EEPatternssepresentacomoun
patrndelgicadenegocio.Perootrosautoresloconsideranunpatrnmulticapa.Tambinesconocido
comoValueObject.

18de34

Diagrama de despliegue
Eneldiagramadedesplieguesevecomodesdeelcliente,pormediodelnavegadorweb,seaccedeal
servidordeaplicaciones(Jboss)ydesdeesteseaccedealSGBD(PostgreSQL)queestnenotramquina
(aunquepodraestarenlamisma).

19de34

Diagrama de componentes
Laaplicacinconstadedoscomponentes.SoftwareTasks.jareselcomponentequecontienelalgicade
negocio, mientras que SoftwareTasks.war es el componente que contiene la lgica de presentacin. El
componentedelgicadenegociopresentaunosinterfacesalosquelalgicadepresentacinaccede.

20de34

Diagrama de clases
Elsiguientediagramasecorrespondeconlacapadenegocioeintegracin.

21de34

Elsiguientediagramasecorrespondeconlacapadepresentacin.SehaincluidolaclaseProjectDelegate
quenoperteneceestrictamentealalgicadepresentacin.

nicamentesehacereferenciaalasclaserelacionadasconlaentidad proyecto yaquelosmecanismo


relacionadosconlasdemsentidadessonmuysimilares.

22de34

Diagrama de colaboracin
El siguiente diagrama de colaboracin se refiere al caso de uso de mostrar todos los proyectos. Es
representativodelosdemscasosdeuso.

23de34

Persistencia
LalabordepersistenciaseconfaalsistemagestordebasesdedatosPostgreSQL.Acontinuacinsedefinen
lastablasjuntoconlassentenciasdecreacin.

Tabla:Project
Campo

Tipo

ProjectId

serial

Name

text

Referenciaa

CREATE TABLE Project (


ProjectId serial PRIMARY KEY,
Name text);
Tabla:Priority
Campo

Tipo

PriorityId

serial

Name

text

Referenciaa

CREATE TABLE Priority (


PriorityId serial PRIMARY KEY,
Name text);
Tabla:Status
Campo

Tipo

StatusId

serial

Name

text

Referenciaa

CREATE TABLE Status (


StatusId serial PRIMARY KEY,
Name text);
Tabla:Task
Campo

Tipo

TaskId

serial

Name

text

Description

text

Referenciaa

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 la
aplicacinJavaAdventureBuilderqueestaenlosblueprintsdeSunsobreJava.Elcdigofuenteesten:
http://java.sun.com/blueprints/code/adventure/1.0/src/com/sun/j2ee/bluepr
ints/servicelocator/ejb/ServiceLocator.java.html
PorotroladohemiradoelejemplodeOracle:
http://www.oracle.com/technology/sample_code/tech/java/j2ee/vsm12/src/ora
cle/otnsamples/util/ServiceLocator.java.html
MevoyaquedarconelejemplodeOracleporsusimplicidad.Aunquelomodificarparaimplementarel
patrnSingletonynotenerqueinstanciarlaclasecadavezquesequierausar.

Typesafe Enumeration
Lostiposdetareasnosonconfigurables.PararepresentarlosusarelpatrnTypesafeEnumerationquees
descritoenDesignPatterns:ElementsofReusableObjectOrientedSoftware.
Este patrn permite representar un conjunto fijo de valores de manera segura. Cada valor de la
enumeracinposeeunainstanciapublica.Existeunnicoobjetoparacadavalor.

26de34

Interfazdeusuario
Aqusemuestraunapantallasignificativadeloquepuedeserellistadodetareas.

Elmenestposicionadoalaizquierdamientrasquealaderechaaparecenlosdilogos.

27de34

Implementacin
Enesteapartadovoyacomentarlosaspectos,amijuicio,mssignificaticosdelaimplementacin.

ServiceLocator
LafuncionalidaddelServiceLocatoryahasidoexplicadaenelapartadodediseo.Paraimplementarmi
ServiceLocatormehebasadoenunodesarroladoporOracle:
(http://www.oracle.com/technology/sample_code/tech/java/j2ee/vsm12/src/oracle/otnsamples/util/ServiceLoc
ator.java.html)
LohemodificadoparaqueimplementaraelpatrnSinglentonyparaquenohayaquehacercastingdelos
diferentesobjetosdevueltos.
Elresultadoeselsiguiente:

package edu.uoc.projecttasks.util;
import java.util.Hashtable;
import
import
import
import
import

javax.ejb.EJBHome;
javax.naming.InitialContext;
javax.naming.NamingException;
javax.rmi.PortableRemoteObject;
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 <b>jndiName</b> The JNDI name
* @return <b>Object</b> The object in the JNDI tree for this name.
* @throws <b>UtilityException</b> 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.Laaplicacinque
hedesarrolladohaceusodelosStatelessSessionBeans,quesonbastanteengorrososdeprogramardebidoa
quehayquerealizarvariasclasesparaunosolo.GraciasaXDocletbastaconprogramarunnicaclaseylas
demssegeneranautomticamente. Porejemplo,paraprogramar PriorityFacade sehaninsertadoenel
cdigofuentelossiguientesatributosXDoclet:
/**
* @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.ParanotenerquerealizarcdigoJSPmuysimilar
encadaJSPheutilizadotagsdeJSP.Elmstilmehasidoelqueheempleadoparaloslistados:
<%@ tag language="java" %>
<%@ variable name-given="elementList" %>
<%@ attribute name="modifyAction" required="true" %>
<%@ attribute name="deleteAction" required="true" %>
<%@ attribute name="groupName" required="true" %>
<%@ taglib uri="/WEB-INF/tlds/c.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html"%>
<% int count=0;%>
<c:forEach var="element" items="${elementList}">
<tr>
<td class="<%= (count % 2==0 ?"bodytablerow1":"bodytablerow2") %>">
<form name=<c:out value="${groupName}"/><%= count %> method="post"
action="/ProjectTasksWeb//<c:out value="${modifyAction}"/>">
<input
type="hidden"
name="id"
value="<c:out
value="${element.id}"/>">
<input
type="hidden"
name="name"
value="<c:out
value="${element.name}"/>">
<a href="javascript:document.<c:out value="${groupName}"/><%=
count %>.submit()">
<c:out value="${element.name}"/>
</a>
</form>
</td>
<%-- boton eliminar --%>
<td class="bodytablerow1">
<form
method="post"
action="/ProjectTasksWeb//<c:out
value="${deleteAction}"/>"
onsubmit="return
confirmDelete('<c:out
value="${element.name}"/>')">
<input
type="hidden"
name="id"
value="<c:out
value="${element.id}"/>">
<input
type="hidden"
name="name"
value="<c:out
value="${element.name}"/>">
<html:submit
styleClass="buttoncolornormal"
onmouseover
=
"this.className='buttoncolorover'" onmouseout = "this.className='buttoncolornormal'">
Eliminar
</html:submit>
</form>
</td>
</tr>
<% count++;%>
</c:forEach>

TypeSafeEnumeration
Para implementar el patrn Type Safe Enumeration he hecho uso del Enum de Java 5. Lo cual ha
simplificadobastantelascosas.
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

Conclusiones
LarealizacindeunproyectoJ2EEnoestrivial.LospatronesdediseoespecificosparaJ2EEsonuna
orientacinbsica,porlocualesnecesariotenerconocimientosdediagramacinUML.Debidoalotedioso
delaprogramcindelasinterfaces,localesyremotas,esmuyrecomendablerecurriraXdocletparacrear
cdigodeformaautomtica.
En la parte de presentacin la base es el conocimiento del HTML. Conociendo HTML no es muy
complicadoentenderlafilosofiadelJSP.DentrodeJSPhayunavariedaddelibreriasquesepuedenescoger.
EnelcasodeesteproyectoheoptadoporlasqueparecensermsdifundidasStrutsyJSTL.Strutsademsde
proporcionarlibreriasdetagsproporcionaunFrontControllerqueimplemetaMVC2.Sinosedispusieradel
framework Struts , o de cualquier otro, la programacin de la parte de presentacin sera mucho ms
compleja.
LaconclusinfinalesqueprogramarunaaplicacinJ2EErequieredeunacurvadeaprendizajeelevada.
AcambioJ2EEproporcionaunaseriedeventajas:separacindelgicadenegocioypresentacin,seguridad
controladaporelservidordeaplicacionesyrobustezdelasaplicaciones,entreotrasventajas.

32de34

Guadeinstalacin
LoexplicadoaquserefierealainstalacindelaaplicacinenunservidordeaplicacionesJBoss.Seha
probadoenunJBoss versin4.0.3..Esdeesperarquefuncioneenotras versiones,aunquenohasido
verificado.

Paso1
Creareneldirectoriodedespliegueunfichero,correspondientealdatasource,llamadotasksds.xmlcon
elsiguientecontenido:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!--->
<!-- JBoss Server Configuration
-->
<!--->
<!-- ===================================================================== -->
<!-- $Id: postgres-ds.xml,v 1.3 2004/09/15 14:37:40 loubyansky Exp $ -->
<!-- ==================================================================== -->
<!-- Datasource config for Postgres
-->
<!-- ==================================================================== -->

<datasources>
<local-tx-datasource>
<jndi-name>TasksDS</jndi-name>
<connection-url>jdbc:postgresql://localhost:5432/tasks</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<user-name>javier</user-name>
<password></password>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>PostgreSQL 8.0</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>

Esposible,dependiendodelaconfiguracindelabasededatos,quehayaquemodificarelusuarioy
contraseadelfichero.

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/jakarta
taglibsstandardcurrent.zip

Paso4
CopiareneldirectoriodedespliegueelficheroProjectTasksApplication.ear.

Paso5
ArrancarJBossyaccederahttp://localhost:8080/ProjectTasksWeb/

34de34

Vous aimerez peut-être aussi