Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Desarrollo Web 2
Desarrollo Web 2
Desarrollo Web 2
DAO’s
Services
Distribución Física
Servidor
Internet Web
DB
(MySQL)
Software Utilizando
Eclipse 3.3.1
Web Tools Platform 2.0.1
Spring 2.0
JSF RI 1.2
Hibernate 3.2
Tomcat 6.0
Junit 3.8
Contenidos
Descripción
Configuración
Descripción del DAO
VariableResolver
Application y ApplicationFactory
Complementando con Hibernate
Después de…
Creación de Proyecto
Tomamos un proyecto Web Dinámico
regular con el siguiente Facet:
JSF 1.2
Dynamic Web Module 2.5
Java 5.0
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
Explicación
El servlet registrado permite atender las
peticiones.
El filtro nos permite tomar todas las
peticiones al subdirectorio virtual /faces/
Las peticiones se reenvían al JSF mismo.
Registros en web.xml (Spring)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<display-name>Spring Decorator</display-name>
<listener-class>
com.jlpp.sample.utils.SpringDecorator
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
Explicación
El componente context-param nos indica
donde buscar la configuración Spring.
El primer listener nos dice que carguemos
Spring en el entorno.
El segundo listener se utiliza para permitir
acceder al App de Spring desde el
contexto del servidor.
Clase SpringDecorator
Esta clase envia los errores de arranque
de Spring a consola.
Se usa para depuración.
Guarda una referencia al contexto Spring
para referenciarlo desde otras partes del
programa.
//Implementación del decorador
//Los métodos omitidos deben sobreescribirse con llamadas a ccl
public class SpringDecorator extends ContextLoaderListener {
//Variable encapsulada del entorno
private ContextLoaderListener cll;
//App Web de Spring
private static WebApplicationContext wac;
public SpringDecorator() {
cll = new ContextLoaderListener();
}
Capa de
App DAO
Acceso a Datos
Implementación Básica
public interface BasicDao {
public boolean agregar(Object o);
public boolean editar(Object o);
public boolean borrar(Object o);
//Buscar duplicados antes de agregar
public boolean hayRepetido(Object o);
//Buscar dependientes antes de borrar
public boolean hayDependiente(Object o);
public List cargar();
public List cargarUno(Serializable id);
public List cargarCondicion(String prop, Object val);
}
Ejercicio
Generalmente la implementación del
BasicDao:
Toma como constructor el nombre base de la
clase que maneja.
Implementa las operaciones ABC+M de
manera general.
Como ejercicio desarrolle la clase
BasicDAO
Extendiendo los DAO’s
Podemos extender los DAO’s en caso de
ser necesario.
Operaciones Triviales BasicDao
colocadas aquí
GenericDao SpecialDao
Métodos extra y
operaciones
especializadas, como
SpecificDao1 SpecificDao2
cargarLibrosDeAutor o
un eliminar diferente
podrían estar aqui
Contenidos
Descripción
Configuración
Descripción del DAO
VariableResolver
Application y ApplicationFactory
Complementando con Hibernate
Después de…
VariableResolver
Componente de JSF utilizado desde la
versión 1.1
Se encarga de crear las variables
necesarias por el EL.
Actualmente se encapsula dentro de un
ELResolver.
Descripción del VR
Sobreescribes el método de resolución:
Primeramente creamos una clase
SpringVariableResolver que extienda
VariableResolverImpl.
Y sobrescribiremos el método
resolveVariable(FacesContext fc, String
var)…
Sobreescritura del Método
Recuperaremos el contexto WAC
WebApplicationContext ac =
SpringDecorator.getSpringContext();
Si Spring no sabe manejar el bean,
delegamos al VR original
If(!wac.containsBean(var))
return super.resolveVariable(fc, var);
Sobreescritura del Método
Posteriormente creamos una sesión
fc.getExternalContext().getSession(true);
Buscamos el Scope apropiado
Map<String, Object> scope = null;
if(ac.isPrototype(var))
scope = fc.getExternalContext().getRequestMap();
else {
if(ac.isSingleton(var))
scope = fc.getExternalContext().getApplicationMap();
else
scope = fc.getExternalContext().getSessionMap();
}
Sobreescritura del Método
Si el scope no es valido terminamos
if(scope == null) return null;
Si el scope ya tiene la variable la usamos
if(scope.containsKey(var))
return scope.get(var);
En caso contrario lo creamos y regresamos
Object o = wac.getBean(var);
scope.put(var, o);
Return o;
Implicaciones de la Implementación
public SpringApplicationFactory() { ; }
public SpringApplicationFactory(ApplicationFactory af) {
super();
setApplicationFactory(af);
}
Contenidos
Descripción
Configuración
Descripción del DAO
VariableResolver
Application y ApplicationFactory
Complementando con Hibernate
Después de…
Pegándole Hibernate
El hecho de complementar Hibernate es
trivial.
La configuración de los beans
determinados se hace mediante Spring.
El material puede encontrarse en
anteriores presentaciones.
Contenidos
Descripción
Configuración
Descripción del DAO
VariableResolver
Application y ApplicationFactory
Complementando con Hibernate
Después de…
Después de
Intentenlo, y si tienes dudas o sugerencias
pues contactenme: