Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

Fundeweb 2.x utiliza el patrón MVC (Modelo, Vista, Controlador) separando el código en tres capas:

  • Controladores: Mayoritariamente Beans de respaldo, pero también pueden ser endpoints REST o SOAP. Esta capa sólo tiene como responsabilidad recibir la información que viene del exterior de la aplicación, validarla y ejecutar la lógica de negocio pertinente para elaborar una respuesta a la acción requerida.
  • Servicios: En esta capa está toda la lógica de negocio. Los controladores llamarán a los servicios según requieran lanzar una acción u otra. Los servicios se coordinarán para realizar el trabajo y devolver una respuesta a los controladores.
  • DataAccesService (DAS): Es la capa de acceso a datos, se encarga de acceder a la información para leerla, editarla, crearla o borrarla. Los servicios invocarán a los DAS que requieran, según las acciones a realizar, para interactuar con los datos. Esta capa, aunque mayoritariamente accede a base de datos, realmente es una capa de acceso a datos que pueden estar en otro formato: ficheros, servicios externos, PL/SQL; por lo tanto tenemos que tener claro que en esta capa no sólo están los accesos a base de datos, sino a cualquier fuente de datos.

Image Added


Fundeweb 2.x incluye una clase genérica para el acceso a base de datos que ya provee muchos métodos útiles aparte de los típicos de un servicio CRUD (Create, Read, Update, Delete), como pueden ser consultas paginadas, consultas a partir de entidades Java, filtrado dinámico, etc. Todos los métodos implementados proveen su propio Javadoc para que sepamos cómo invocarlos fácilmente.

 PEDRO DELGADO YARZA 2014/03/11 13:01

En Fundeweb 2.0, los acceso a objetos de memoria se harán mediante un servicio genérico de acceso conocido como DAS (Data Access Service). Esta infraestructura permitirá el acceso homogéneo a la información siguiendo los estándares de programación establecidos al respecto.

Los elementos de los que se compone serán: POJO, DataAccesService y AccessService, cumpliendo el siguiente esquema:

Image RemovedA continuación mostramos el diagrama de clases:

...

  • DataAccessService<T>: Es la interfaz padre de la que han de heredar todas interfaces que deseen implementar este mecanismo de persistencia. Provee los métodos básicos de creación, actualización, búsqueda y persistencia.


Bloque de código
languagejava
public interface 

...

DataAccessService<T> {
 
	T newInstance();
 
	void persist(T entity);
 
	void persist(T entity, boolean flush);
 
	T persist(T entity, boolean flush, boolean refresh);
 
	void refresh(T entity);
 
	T find(Object id);
 
	void deleteById(Object id);
 
	void deleteById(Object id, boolean flush);
 
	void delete(T entity);
 
	void delete(T entity, boolean flush);
 
	void deleteEntities(T[] entities);
 
	void deleteEntities(T[] entities, boolean flush);
 
	T update(T entity);
 
	T update(T entity, boolean flush);
 
	boolean isManagedEntity(T entity);
 
	T merge(T entity);
 
	T merge(T entity, boolean flush);
 
	void flush();
 
}


  • DataAccessServiceBean<T>: Clase abstracta que implementa la interfaz anteriormente descrita, también contiene métodos para poder realizar consultas JPQL, nativas y con filtros dinámicos.
  • AnuncioDataAccessService: Interfaz que implementa la interface DataAccessService<Anuncio> y concreta el objeto parametrizado. También permite definir métodos nuevos a los declarados en dicha interfaz padre.

  • AnuncioDataAccessServiceImpl: Declarado como EJB extiende e implementa la clase e interfaz anteriormente mencionada. Permite añadir métodos adicionales que sean de utilidad en el soporte a la persistencia de la aplicación. En esta clase es donde se crearan todos los métodos necesarios para las consultas y otras operaciones relacionadas con la entidad Anuncio.


Bloque de código
languagejava
@Local(AnuncioDataAccessService.class)
@Stateless
public class AnuncioDataAccessServiceImpl extends 

...

DataAccessServiceImpl<Anuncio>
		implements AnuncioDataAccessService {
 
  private static final String[] RESTRICTIONS_ANUNCIO = {	 
    UtilString.cmpNumberTextFilterEjbql("entity.id", ":anuncioId"),
    UtilString.cmpTextFilterEjbql("entity.nombre", ":anuncioNombre"),
    UtilString.cmpTextFilterEjbql("entity.descripcion", ":anuncioDescripcion"),
    UtilString.cmpDateTextFilterEjbql("entity.fechaPublicacion", ":anuncioFechaPublicacion"),
  };
 
  public 

...

ResultQuery<Anuncio> obtenerAnuncios(

...

Map<String, 

...

Object> parameters, int firstResult, int resultLimit, String sortField, String sortOrder) {
    return super.resultsByEntityQueryWithDinamicFilter(Arrays.asList(RESTRICTIONS_ANUNCIO), parameters,
                                                       firstResult, resultLimit, sortField, sortOrder, null, null);
   }	
}
  • ServicioAnuncios: Clase que contiene la lógica de negocio y puede acceder a otros servicios definidos en la aplicación. Accede a la capa de persistencia de para gestionar los Anuncios mediante el DAS AnuncioDataAccessServiceImpl definido en la aplicación.

 

...

  • .

...

...

 

...