Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2010, Red Hat Inc., and individual contributors as indicated
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.jboss.as.weld.injection;
 
 import static org.jboss.weld.util.reflection.Reflections.cast;
 
 import java.util.Map;
 import java.util.Set;
 
 
 import  org.jboss.weld.bean.ManagedBean;
 import  org.jboss.weld.bean.SessionBean;
 import  org.jboss.weld.injection.producer.InjectionTargetService;
 import  org.jboss.weld.literal.AnyLiteral;
 import  org.jboss.weld.manager.BeanManagerImpl;

Managed reference factory that can be used to create and inject components.

Author(s):
Stuart Douglas
 
 
     private final Class<?> componentClass;
     private final String ejbName;
     private final Set<Class<?>> interceptorClasses;
     private final Map<Class<?>, InjectionTargetinterceptorInjections = new HashMap<Class<?>, InjectionTarget>();
     private final ClassLoader classLoader;
     private final String beanDeploymentArchiveId;
     private final ComponentDescription componentDescription;
 
     private InjectionTarget injectionTarget;
     private Bean<?> bean;
     private BeanManagerImpl beanManager;
 
     public WeldManagedReferenceFactory(Class<?> componentClassString ejbNamefinal Set<Class<?>> interceptorClassesfinal ClassLoader classLoaderfinal String beanDeploymentArchiveIdComponentDescription componentDescription) {
         this. = componentClass;
         this. = ejbName;
         this. = beanDeploymentArchiveId;
         this. = new InjectedValue<WeldBootstrapService>();
         this. = interceptorClasses;
         this. = classLoader;
         this. = componentDescription;
     }
 
     @Override
     public ManagedReference getReference() {
         final CreationalContext<?> ctx;
         if ( == null) {
             ctx = .createCreationalContext(null);
         } else {
             ctx = .createCreationalContext();
         }
         final Object instance = .produce(ctx);
         return new WeldManagedReference(ctxinstance);
     }
 
     public ManagedReference injectExistingReference(final ManagedReference existing) {
         final CreationalContext<?> ctx;
         if ( == null) {
            ctx = .createCreationalContext(null);
        } else {
            ctx = .createCreationalContext();
        }
        final Object instance = existing.getInstance();
        .inject(instancectx);
        return new ManagedReference() {
            @Override
            public void release() {
                try {
                    existing.release();
                } finally {
                    ctx.release();
                }
            }
            @Override
            public Object getInstance() {
                return instance;
            }
        };
    }
    @Override
    public synchronized void start(final StartContext contextthrows StartException {
        final ClassLoader cl = SecurityActions.getContextClassLoader();
        try {
            SecurityActions.setContextClassLoader();
            for (final Class<?> interceptor : ) {
                .put(interceptornew NonContextualComponentInjectionTarget(interceptornull));
            }
            if ( != null) {
                EjbDescriptor<Objectdescriptor = .getEjbDescriptor();
                //may happen if the EJB was vetoed
                if (descriptor != null) {
                     = .getBean(descriptor);
                }
            }
            if ( instanceof SessionBean<?>) {
                SessionBean<?> sessionBean = (SessionBean<?>) ;
                this. = sessionBean.getInjectionTarget();
                return;
            }
            if ( instanceof WSComponentDescription) {
                ManagedBean<?> bean = findManagedBeanForWSComponent();
                if (bean != null) {
                     = bean.getInjectionTarget();
                    return;
                }
            }
            if ( instanceof MessageDrivenComponentDescription ||  instanceof WebComponentDescription) {
                // fire ProcessInjectionTarget for non-contextual components
                this. = .fireProcessInjectionTarget(injectionTarget.getAnnotated(), injectionTarget);
            } else {
                this. = injectionTarget;
            }
            .getServices().get(InjectionTargetService.class).validateProducer(injectionTarget);
        } finally {
            SecurityActions.setContextClassLoader(cl);
        }
    }
    private <T> ManagedBean<T> findManagedBeanForWSComponent(Class<T> definingClass) {
        Set<Bean<?>> beans = .getBeans(definingClass, AnyLiteral.INSTANCE);
        for (Iterator<Bean<?>> i = beans.iterator(); i.hasNext();) {
            Bean<?> bean = i.next();
            if (bean instanceof ManagedBean<?> && bean.getBeanClass().equals(definingClass)) {
                continue;
            }
            i.remove();
        }
        if (beans.isEmpty()) {
            ..debugf("Could not find bean for %s, interception and decoration will be unavailable");
            return null;
        }
        if (beans.size() > 1) {
            ..debugf("Multiple beans for %s : %s "beans);
        }
        return cast(beans.iterator().next());
    }
    @Override
    public synchronized void stop(final StopContext context) {
         = null;
        .clear();
         = null;
    }
    @Override
        return this;
    }
        return ;
    }
New to GrepCode? Check out our FAQ X