package de.dhbw.humbuch.guice;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.persist.PersistService;
import com.google.inject.persist.UnitOfWork;
/**
* Overrides Guice implementation to handle when the persistence service is
* already started
*
* @author davherrmann
*/
@Singleton
public final class PersistFilter implements Filter {
private final UnitOfWork unitOfWork;
private final PersistService persistService;
private final static Logger log = LoggerFactory
.getLogger(PersistFilter.class);
@Inject
public PersistFilter(UnitOfWork unitOfWork, PersistService persistService) {
this.unitOfWork = unitOfWork;
this.persistService = persistService;
}
public void init(FilterConfig filterConfig) throws ServletException {
try {
persistService.start();
} catch (IllegalStateException e) {
log.error("persistService already started...");
}
}
public void destroy() {
persistService.stop();
}
public void doFilter(final ServletRequest servletRequest,
final ServletResponse servletResponse, final FilterChain filterChain)
throws IOException, ServletException {
unitOfWork.begin();
try {
filterChain.doFilter(servletRequest, servletResponse);
} finally {
unitOfWork.end();
}
}
}