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

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.
A 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.
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();
} |
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.
@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.