Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jboss.weld.context.beanstore.http;
  
  import static java.util.Collections.emptyList;
  import static org.jboss.weld.util.reflection.Reflections.cast;
  
  
  import  javax.servlet.http.HttpSession;
 
Base class providing an HttpSession backed, bound bean store.

Author(s):
Pete Muir
David Allen
Nicklas Karlsson
See also:
LazySessionBeanStore
EagerSessionBeanStore
 
 public abstract class AbstractSessionBeanStore extends AttributeBeanStore {
 
     private static final String SESSION_KEY = "org.jboss.weld.context.beanstore.http.LockStore";
 
     private transient volatile LockStore lockStore;
 
     private static final ThreadLocal<LockStoreCURRENT_LOCK_STORE = new ThreadLocal<LockStore>();
 
     protected abstract HttpSession getSession(boolean create);
 
     public AbstractSessionBeanStore(NamingScheme namingScheme) {
         super(namingScheme);
     }
 
     protected Collection<StringgetAttributeNames() {
         HttpSession session = getSession(false);
         if (session == null) {
             return emptyList();
         } else {
             return new EnumerationList<String>(Reflections.<Enumeration<String>>cast(session.getAttributeNames()));
         }
     }
 
     @Override
     protected void removeAttribute(String key) {
         HttpSession session = getSession(false);
         if (session != null) {
             session.removeAttribute(key);
             ..removedKeyFromSession(keythis.getSession(false).getId());
         } else {
             ..unableToRemoveKeyFromSession(key);
         }
     }
 
     @Override
     protected void setAttribute(String keyObject instance) {
         HttpSession session = getSession(true);
         if (session != null) {
             session.setAttribute(keyinstance);
             ..addedKeyToSession(keythis.getSession(false).getId());
         } else {
             ..unableToAddKeyToSession(key);
         }
     }
 
     @Override
     public <T> ContextualInstance<T> get(BeanIdentifier id) {
         ContextualInstance<T> instance = super.get(id);
         if (instance == null && isAttached()) {
             String prefixedId = getNamingScheme().prefix(id);
             instance = cast(getAttribute(prefixedId));
         }
         return instance;
     }
 
     @Override
     protected Object getAttribute(String prefixedId) {
         HttpSession session = getSession(false);
         if (session != null) {
             return session.getAttribute(prefixedId);
         }
         return null;
     }
 
     @Override
     protected LockStore getLockStore() {
         LockStore lockStore = this.;
         if (lockStore == null) {
             //needed to prevent some edge cases
             //where we would otherwise enter an infinite loop
             lockStore = .get();
            if(lockStore != null) {
                return lockStore;
            }
            HttpSession session = getSession(false);
            if(session == null) {
                lockStore = new LockStore();
                .set(lockStore);
                try {
                session = getSession(true);
                } finally {
                    .remove();
                }
            }
            lockStore = (LockStoresession.getAttribute();
            if (lockStore == null) {
                //we don't really have anything we can lock on
                //so we just acquire a big global lock
                //this should only be taken on session creation though
                //so should not be a problem
                synchronized (AbstractSessionBeanStore.class) {
                    lockStore = (LockStoresession.getAttribute();
                    if (lockStore == null) {
                        lockStore = new LockStore();
                        session.setAttribute(lockStore);
                    }
                }
            }
            this. = lockStore;
        }
        return lockStore;
    }
New to GrepCode? Check out our FAQ X