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.ejb;
 
 import java.util.Map;
 import java.util.Set;
 
Implementation for non-stateful beans, a new view instance is looked up each time

Author(s):
Stuart Douglas
 
 public class SessionObjectReferenceImpl implements SessionObjectReference {
 
     private final Map<StringServiceNameviewServices;
     private final String ejbName;
 
     public SessionObjectReferenceImpl(EjbDescriptorImpl<?> descriptor) {
          = descriptor.getEjbName();
         final Map<StringServiceNameviewServices = new HashMap<StringServiceName>();
         for (Map.Entry<Class<?>, ServiceNameentry : descriptor.getViewServices().entrySet()) {
             final Class<?> viewClass = entry.getKey();
             if (viewClass != null) {
                 //see WELD-921
                 //this is horrible, but until it is fixed there is not much that can be done
 
                 final Set<Class<?>> seen = new HashSet<Class<?>>();
                 final Set<Class<?>> toProcess = new HashSet<Class<?>>();
 
                 toProcess.add(viewClass);
 
                 while (!toProcess.isEmpty()) {
                     Iterator<Class<?>> it = toProcess.iterator();
                     final Class<?> clazz = it.next();
                     it.remove();
                     seen.add(clazz);
                     viewServices.put(clazz.getName(), entry.getValue());
                     final Class<?> superclass = clazz.getSuperclass();
                     if (superclass != Object.class && superclass != null && !seen.contains(superclass)) {
                         toProcess.add(superclass);
                     }
                     for (Class<?> iface : clazz.getInterfaces()) {
                         if (!seen.contains(iface)) {
                             toProcess.add(iface);
                         }
                     }
                 }
             }
         }
 
         this. = viewServices;
 
     }
 
 
     @Override
     @SuppressWarnings({"unchecked"})
     public synchronized <S> S getBusinessObject(Class<S> businessInterfaceType) {
         //TODO: this should be cached
         if (.containsKey(businessInterfaceType.getName())) {
             final ServiceController<?> serviceController = currentServiceContainer().getRequiredService(.get(businessInterfaceType.getName()));
             final ComponentView view = (ComponentViewserviceController.getValue();
             try {
                 return(S) view.createInstance().getInstance();
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
        } else {
            throw ..viewNotFoundOnEJB(businessInterfaceType.getName(), );
        }
    }
    @Override
    public void remove() {
        //nop
    }
    @Override
    public boolean isRemoved() {
        return false;
    }
    private static ServiceContainer currentServiceContainer() {
        return AccessController.doPrivileged(new PrivilegedAction<ServiceContainer>() {
            @Override
            public ServiceContainer run() {
                return CurrentServiceContainer.getServiceContainer();
            }
        });
    }
New to GrepCode? Check out our FAQ X