Search in sources :

Example 1 with LockedBean

use of org.jboss.weld.contexts.beanstore.LockedBean in project core by weld.

the class AbstractContext method get.

/**
 * Get the bean if it exists in the contexts.
 *
 * @return An instance of the bean
 * @throws ContextNotActiveException if the context is not active
 * @see javax.enterprise.context.spi.Context#get(BaseBean, boolean)
 */
@Override
@SuppressFBWarnings(value = "UL_UNRELEASED_LOCK", justification = "False positive from FindBugs")
public <T> T get(Contextual<T> contextual, CreationalContext<T> creationalContext) {
    if (!isActive()) {
        throw new ContextNotActiveException();
    }
    checkContextInitialized();
    final BeanStore beanStore = getBeanStore();
    if (beanStore == null) {
        return null;
    }
    if (contextual == null) {
        throw ContextLogger.LOG.contextualIsNull();
    }
    BeanIdentifier id = getId(contextual);
    ContextualInstance<T> beanInstance = beanStore.get(id);
    if (beanInstance != null) {
        return beanInstance.getInstance();
    } else if (creationalContext != null) {
        LockedBean lock = null;
        try {
            if (multithreaded) {
                lock = beanStore.lock(id);
                beanInstance = beanStore.get(id);
                if (beanInstance != null) {
                    return beanInstance.getInstance();
                }
            }
            T instance = contextual.create(creationalContext);
            if (instance != null) {
                beanInstance = new SerializableContextualInstanceImpl<Contextual<T>, T>(contextual, instance, creationalContext, serviceRegistry.get(ContextualStore.class));
                beanStore.put(id, beanInstance);
            }
            return instance;
        } finally {
            if (lock != null) {
                lock.unlock();
            }
        }
    } else {
        return null;
    }
}
Also used : BeanStore(org.jboss.weld.contexts.beanstore.BeanStore) ContextualStore(org.jboss.weld.serialization.spi.ContextualStore) ContextNotActiveException(javax.enterprise.context.ContextNotActiveException) BeanIdentifier(org.jboss.weld.serialization.spi.BeanIdentifier) LockedBean(org.jboss.weld.contexts.beanstore.LockedBean) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Aggregations

SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)1 ContextNotActiveException (javax.enterprise.context.ContextNotActiveException)1 BeanStore (org.jboss.weld.contexts.beanstore.BeanStore)1 LockedBean (org.jboss.weld.contexts.beanstore.LockedBean)1 BeanIdentifier (org.jboss.weld.serialization.spi.BeanIdentifier)1 ContextualStore (org.jboss.weld.serialization.spi.ContextualStore)1