====== Infraestructura de clases para el Maestro ====== --- //[[pedrody@um.es|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: {{ :fdw2.0:fundeweb2.0:gt:das.png |}} A continuación mostramos el diagrama de clases: {{ :fdw2.0:fundeweb2.0:gt:md1.png |}} * **DataAccessService**: 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. public interface DataAccessService { 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**: 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// 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. @Local(AnuncioDataAccessService.class) @Stateless public class AnuncioDataAccessServiceImpl extends DataAccessServiceImpl 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 obtenerAnuncios(Map 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.