package org.jboss.weld.module.web.context.beanstore.http;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import org.jboss.weld.contexts.beanstore.AttributeBeanStore;
import org.jboss.weld.contexts.beanstore.LockStore;
import org.jboss.weld.contexts.beanstore.NamingScheme;
import org.jboss.weld.module.web.servlet.HttpContextLifecycle;
import org.jboss.weld.util.collections.EnumerationIterator;
/**
* <p>
* A BeanStore that uses a HTTP request as backing storage.
* </p>
* <p/>
* <p>
* This class is not threadsafe
* </p>
*
* @author Nicklas Karlsson
* @author David Allen
* @author Pete Muir
*/
public class RequestBeanStore extends AttributeBeanStore {
private final HttpServletRequest request;
public RequestBeanStore(HttpServletRequest request, NamingScheme namingScheme) {
super(namingScheme, false);
this.request = request;
}
@Override
protected Object getAttribute(String key) {
return request.getAttribute(key);
}
@Override
protected void removeAttribute(String key) {
request.removeAttribute(key);
}
@Override
protected Iterator<String> getAttributeNames() {
return new EnumerationIterator<String>(request.getAttributeNames());
}
@Override
protected void setAttribute(String key, Object instance) {
request.setAttribute(key, instance);
}
public HttpServletRequest getRequest() {
return request;
}
public LockStore getLockStore() {
return null;
}
@Override
protected boolean isLocalBeanStoreSyncNeeded() {
// The synchronization is not needed unless the request has been switched to async mode
return Boolean.TRUE.equals(request.getAttribute(HttpContextLifecycle.ASYNC_STARTED_ATTR_NAME));
}
}