[webbeans-commits] Webbeans SVN: r3577 - in ri/trunk: impl and 22 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Fri Aug 21 07:59:26 EDT 2009


Author: pete.muir at jboss.org
Date: 2009-08-21 07:59:26 -0400 (Fri, 21 Aug 2009)
New Revision: 3577

Added:
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/JsfHelper.java
Removed:
   ri/trunk/impl/src/main/java/org/jboss/webbeans/el/WebBeansELResolver.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/PhaseHelper.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Animal.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Cow.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserverWhichUsesApplicationContext.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserverWhichUsesRequestContext.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Tuna.java
Modified:
   ri/trunk/api/src/main/java/javax/enterprise/inject/spi/BeanManager.java
   ri/trunk/impl/pom.xml
   ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/CurrentManager.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/RIBean.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/builtin/AbstractBuiltInBean.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/AfterBeanDiscoveryImpl.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeforeBeanDiscoveryImpl.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/context/ContextLifecycle.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/ConversationAwareViewHandler.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/FacesUrlTransformer.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansApplication.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansApplicationFactory.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansPhaseListener.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsp/JspInitialization.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/resources/ManagerObjectFactory.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ConversationPropagationFilter.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/WebBeansListener.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/util/serviceProvider/ServiceLoader.java
   ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/ELImpl.java
   ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/ManagersImpl.java
   ri/trunk/spi/pom.xml
   ri/trunk/spi/src/main/java/org/jboss/webbeans/bootstrap/api/Environments.java
   ri/trunk/spi/src/main/java/org/jboss/webbeans/bootstrap/spi/Deployment.java
   ri/trunk/spi/src/test/java/org/jboss/webbeans/bootstrap/api/test/BootstrapTest.java
   ri/trunk/tests/pom.xml
   ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockEELifecycle.java
   ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockServletLifecycle.java
   ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/el/EL.java
   ri/trunk/tests/src/main/java/org/jboss/webbeans/test/AbstractWebBeansTest.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/BootstrapTest.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserver.java
   ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/definition/ELResolverTest.java
Log:
switch to using deployment structure, still some hacks outside JBoss AS

Modified: ri/trunk/api/src/main/java/javax/enterprise/inject/spi/BeanManager.java
===================================================================
--- ri/trunk/api/src/main/java/javax/enterprise/inject/spi/BeanManager.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/api/src/main/java/javax/enterprise/inject/spi/BeanManager.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -300,14 +300,4 @@
    @Deprecated
    public void addBean(Bean<?> bean);
 
-   /**
-    * Associate a custom Context with a scope.
-    * 
-    * This method may be called at any time in the applications lifecycle.
-    * 
-    * @param context the context to register
-    */
-   @Deprecated
-   public void addContext(Context context);
-
 }

Modified: ri/trunk/impl/pom.xml
===================================================================
--- ri/trunk/impl/pom.xml	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/pom.xml	2009-08-21 11:59:26 UTC (rev 3577)
@@ -76,6 +76,12 @@
       </dependency>
       
       <dependency>
+         <groupId>javax.validation</groupId>
+         <artifactId>validation-api</artifactId>
+         <optional>true</optional>
+      </dependency>
+      
+      <dependency>
          <groupId>javax.persistence</groupId>
          <artifactId>persistence-api</artifactId>
          <optional>true</optional>

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -294,6 +294,32 @@
             new ArrayList<Class<?>>(),
             new AtomicInteger());
    }
+   
+   /**
+    * Create a new, root, manager
+    * 
+    * @param serviceRegistry
+    * @return
+    */
+   public static BeanManagerImpl newManager(BeanManagerImpl rootManager)
+   {  
+      return new BeanManagerImpl(
+            rootManager.getServices(), 
+            new CopyOnWriteArrayList<Bean<?>>(),
+            new CopyOnWriteArrayList<DecoratorBean<?>>(),
+            new CopyOnWriteArrayList<ObserverMethod<?,?>>(),
+            new CopyOnWriteArrayList<String>(),
+            rootManager.getNewEnterpriseBeanMap(),
+            new ConcurrentHashMap<String, RIBean<?>>(),
+            rootManager.getClientProxyProvider(),
+            rootManager.getContexts(), 
+            new CopyOnWriteArraySet<CurrentActivity>(), 
+            new HashMap<Contextual<?>, Contextual<?>>(), 
+            new ArrayList<Class<?>>(),
+            new ArrayList<Class<? extends Annotation>>(),
+            new ArrayList<Class<?>>(),
+            rootManager.getIds());
+   }
 
    /**
     * Create a new child manager
@@ -301,7 +327,7 @@
     * @param parentManager
     * @return
     */
-   public static BeanManagerImpl newChildManager(BeanManagerImpl parentManager)
+   public static BeanManagerImpl newChildActivityManager(BeanManagerImpl parentManager)
    {
       List<Bean<?>> beans = new CopyOnWriteArrayList<Bean<?>>();
       beans.addAll(parentManager.getBeans());
@@ -942,6 +968,7 @@
     * @return An instance of the bean
     * 
     */
+   @Deprecated
    public <T> T getInstanceByType(Class<T> beanType, Annotation... bindings)
    {
       Set<Bean<?>> beans = getBeans(beanType, bindings);
@@ -1053,7 +1080,7 @@
 
    public BeanManagerImpl createActivity()
    {
-      BeanManagerImpl childActivity = newChildManager(this);
+      BeanManagerImpl childActivity = newChildActivityManager(this);
       childActivities.add(childActivity);
       CurrentManager.add(childActivity);
       return childActivity;
@@ -1081,7 +1108,7 @@
       }
       if (activeCurrentActivities.size() == 0)
       {
-         return CurrentManager.rootManager();
+         return this;
       }
       else if (activeCurrentActivities.size() == 1)
       {

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/CurrentManager.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/CurrentManager.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/CurrentManager.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -23,12 +23,15 @@
 package org.jboss.webbeans;
 
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.enterprise.inject.TypeLiteral;
 
+import org.jboss.webbeans.bootstrap.BeanDeployment;
 import org.jboss.webbeans.bootstrap.api.Singleton;
 import org.jboss.webbeans.bootstrap.api.SingletonProvider;
+import org.jboss.webbeans.bootstrap.spi.BeanDeploymentArchive;
 
 
 /**
@@ -43,18 +46,28 @@
 
    private static class IntegerMangerImplMap extends TypeLiteral<Map<Integer, BeanManagerImpl>> {}
    
+   private static class BeanDeploymentArchiveManagerImplMap extends TypeLiteral<Map<BeanDeploymentArchive, BeanManagerImpl>> {}
+   
    // The root manager instance
    private static Singleton<BeanManagerImpl> rootManager = SingletonProvider.instance().create(BeanManagerImpl.class);
+   // A map of managers keyed by ID, used for activities
+   private final static Singleton<Map<Integer, BeanManagerImpl>> keyedManagers = SingletonProvider.instance().create(new IntegerMangerImplMap().getRawType());
    
-   private final static Singleton<Map<Integer, BeanManagerImpl>> managers = SingletonProvider.instance().create(new IntegerMangerImplMap().getRawType());
+   private final static Singleton<Map<BeanDeploymentArchive, BeanManagerImpl>> beanDeploymentArchives = SingletonProvider.instance().create(new BeanDeploymentArchiveManagerImplMap().getRawType());
 
    public static void clear()
    {
-      managers.get().clear();
+      keyedManagers.get().clear();
       rootManager.clear();
-      managers.clear();
+      keyedManagers.clear();
+      beanDeploymentArchives.clear();
    }
    
+   public static boolean isAvailable()
+   {
+      return rootManager.isSet();
+   }
+   
    /**
     * Gets the root manager
     * 
@@ -73,22 +86,37 @@
    public static void setRootManager(BeanManagerImpl managerImpl) 
    {
       rootManager.set(managerImpl);
-      if (!managers.isSet()) 
+      if (!keyedManagers.isSet()) 
       {
-          managers.set(new ConcurrentHashMap<Integer, BeanManagerImpl>());
+          keyedManagers.set(new ConcurrentHashMap<Integer, BeanManagerImpl>());
       }
-      managers.get().put(managerImpl.getId(), managerImpl);
+      keyedManagers.get().put(managerImpl.getId(), managerImpl);
    }
    
+   public static void setBeanDeploymentArchives(Map<BeanDeploymentArchive, BeanDeployment> beanDeployments)
+   {
+      beanDeploymentArchives.set(new ConcurrentHashMap<BeanDeploymentArchive, BeanManagerImpl>());
+      for (Entry<BeanDeploymentArchive, BeanDeployment> entry : beanDeployments.entrySet())   
+      {
+         beanDeploymentArchives.get().put(entry.getKey(), entry.getValue().getBeanManager());
+         add(entry.getValue().getBeanManager());
+      }
+   }
+   
+   public static Map<BeanDeploymentArchive, BeanManagerImpl> getBeanDeploymentArchives()
+   {
+      return beanDeploymentArchives.get();
+   }
+   
    public static BeanManagerImpl get(Integer key)
    {
-      return managers.get().get(key);
+      return keyedManagers.get().get(key);
    }
    
    public static Integer add(BeanManagerImpl manager)
    {
       Integer id = manager.getId();
-      managers.get().put(id, manager);
+      keyedManagers.get().put(id, manager);
       return id;
    }
    

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/RIBean.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/RIBean.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/RIBean.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -49,7 +49,8 @@
    
    protected static String createId(String prefix)
    {
-      AtomicInteger i = ids.putIfAbsent(prefix, new AtomicInteger());
+      ids.putIfAbsent(prefix, new AtomicInteger());
+      int i = ids.get(prefix).getAndIncrement();
       return prefix + "-" + i;
    }
 

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/builtin/AbstractBuiltInBean.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/builtin/AbstractBuiltInBean.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bean/builtin/AbstractBuiltInBean.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -42,7 +42,7 @@
    protected AbstractBuiltInBean(BeanManagerImpl manager)
    {
       super(manager);
-      this.id = getClass().getSimpleName();
+      this.id = createId(getClass().getSimpleName());
    }
    
    @Override

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/AfterBeanDiscoveryImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/AfterBeanDiscoveryImpl.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/AfterBeanDiscoveryImpl.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import javax.enterprise.context.spi.Context;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
@@ -26,16 +27,22 @@
 import javax.enterprise.inject.spi.ObserverMethod;
 
 import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.webbeans.bootstrap.spi.Deployment;
 
 public class AfterBeanDiscoveryImpl implements AfterBeanDiscovery
 {
    
    private final List<Throwable> definitionErrors = new ArrayList<Throwable>();
-   private final BeanManagerImpl beanManager;
+   private final Map<BeanDeploymentArchive, BeanDeployment> beanDeployments;
+   private final BeanManagerImpl deploymentManager;
+   private final Deployment deployment;
    
-   public AfterBeanDiscoveryImpl(BeanManagerImpl beanManager)
+   public AfterBeanDiscoveryImpl(BeanManagerImpl deploymentManager, Map<BeanDeploymentArchive, BeanDeployment> beanDeployments)
    {
-      this.beanManager = beanManager;
+      this.beanDeployments = beanDeployments;
+      this.deploymentManager = deploymentManager;
+      this.deployment = deploymentManager.getServices().get(Deployment.class);
    }
 
    public void addDefinitionError(Throwable t)
@@ -50,17 +57,40 @@
    
    public void addBean(Bean<?> bean)
    {
-      beanManager.addBean(bean);
+      getOrCreateBeanDeployment(bean.getBeanClass()).getBeanManager().addBean(bean);
    }
 
    public void addContext(Context context)
    {
-      beanManager.addContext(context);
+      deploymentManager.addContext(context);
    }
 
    public void addObserverMethod(ObserverMethod<?, ?> observerMethod)
    {
-      beanManager.addObserver(observerMethod);
+      getOrCreateBeanDeployment(observerMethod.getBean().getBeanClass()).getBeanManager().addObserver(observerMethod);
    }
+   
+   private BeanDeployment getOrCreateBeanDeployment(Class<?> clazz)
+   {
+      BeanDeploymentArchive beanDeploymentArchive = deployment.loadBeanDeploymentArchive(clazz);
+      if (beanDeploymentArchive == null)
+      {
+         throw new IllegalStateException("Unable to find Bean Deployment Archive for " + clazz);
+      }
+      else
+      {
+         if (beanDeployments.containsKey(beanDeploymentArchive))
+         {
+            return beanDeployments.get(beanDeploymentArchive);
+         }
+         else
+         {
+            BeanDeployment beanDeployment = new BeanDeployment(beanDeploymentArchive, deploymentManager);
+            beanDeployments.put(beanDeploymentArchive, beanDeployment);
+            return beanDeployment;
+         }
+      }
+      
+   }
 
 }

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -34,6 +34,8 @@
  */
 public class BeanDeployer extends AbstractBeanDeployer
 {
+   
+   private final BeanManagerImpl deploymentManager;
 
    private final Set<WBClass<?>> classes;
 
@@ -41,10 +43,11 @@
     * @param manager
     * @param ejbDescriptors
     */
-   public BeanDeployer(BeanManagerImpl manager, EjbDescriptorCache ejbDescriptors)
+   public BeanDeployer(BeanManagerImpl manager, BeanManagerImpl deploymentManager, EjbDescriptorCache ejbDescriptors)
    {
       super(manager, new BeanDeployerEnvironment(ejbDescriptors, manager));
       this.classes = new HashSet<WBClass<?>>();
+      this.deploymentManager = deploymentManager;
    }
 
    public AbstractBeanDeployer addClass(Class<?> clazz)
@@ -53,7 +56,7 @@
       if (!clazz.isAnnotation() && !clazz.isEnum())
       {
          ProcessAnnotatedTypeImpl<?> event = createProcessAnnotatedTypeEvent(clazz, classTransformer);
-         getManager().fireEvent(event);
+         deploymentManager.fireEvent(event);
          if (!event.isVeto())
          {
             if (event.getAnnotatedType() instanceof WBClass<?>)

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeforeBeanDiscoveryImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeforeBeanDiscoveryImpl.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/BeforeBeanDiscoveryImpl.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -17,11 +17,14 @@
 package org.jboss.webbeans.bootstrap;
 
 import java.lang.annotation.Annotation;
+import java.util.Map;
 
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 
 import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.webbeans.bootstrap.spi.Deployment;
 import org.jboss.webbeans.literal.BindingTypeLiteral;
 import org.jboss.webbeans.literal.InterceptorBindingTypeLiteral;
 import org.jboss.webbeans.literal.ScopeTypeLiteral;
@@ -31,12 +34,16 @@
 {
    
    private final TypeStore typeStore;
-   private final BeanDeployer beanDeployer;
+   private final Map<BeanDeploymentArchive, BeanDeployment> beanDeployments;
+   private final BeanManagerImpl deploymentManager;
+   private final Deployment deployment;
    
-   public BeforeBeanDiscoveryImpl(BeanManagerImpl manager, BeanDeployer beanDeployer)
+   public BeforeBeanDiscoveryImpl(BeanManagerImpl deploymentManager, Map<BeanDeploymentArchive, BeanDeployment> beanDeployments)
    {
-      this.typeStore = manager.getServices().get(TypeStore.class);
-      this.beanDeployer = beanDeployer;
+      this.typeStore = deploymentManager.getServices().get(TypeStore.class);
+      this.beanDeployments = beanDeployments;
+      this.deployment = deploymentManager.getServices().get(Deployment.class);
+      this.deploymentManager = deploymentManager;
    }
 
    public void addBindingType(Class<? extends Annotation> bindingType)
@@ -63,7 +70,25 @@
    
    public void addAnnotatedType(AnnotatedType<?> type)
    {
-      beanDeployer.addClass(type);
+      BeanDeploymentArchive beanDeploymentArchive = deployment.loadBeanDeploymentArchive(type.getJavaClass());
+      if (beanDeploymentArchive == null)
+      {
+         throw new IllegalStateException("Unable to find Bean Deployment Archive for " + type);
+      }
+      else
+      {
+         if (beanDeployments.containsKey(beanDeploymentArchive))
+         {
+            beanDeployments.get(beanDeploymentArchive).getBeanDeployer().addClass(type);
+         }
+         else
+         {
+            BeanDeployment beanDeployment = new BeanDeployment(beanDeploymentArchive, deploymentManager);
+            beanDeployments.put(beanDeploymentArchive, beanDeployment);
+         }
+      }
    }
+   
+   
 
 }

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/bootstrap/WebBeansBootstrap.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -16,10 +16,13 @@
  */
 package org.jboss.webbeans.bootstrap;
 
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
 
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.BeforeShutdown;
 import javax.enterprise.inject.spi.Extension;
 
@@ -29,16 +32,8 @@
 import org.jboss.webbeans.DefinitionException;
 import org.jboss.webbeans.DeploymentException;
 import org.jboss.webbeans.Validator;
-import org.jboss.webbeans.bean.builtin.DefaultValidatorBean;
-import org.jboss.webbeans.bean.builtin.DefaultValidatorFactoryBean;
-import org.jboss.webbeans.bean.builtin.InjectionPointBean;
 import org.jboss.webbeans.bean.builtin.ManagerBean;
-import org.jboss.webbeans.bean.builtin.PrincipalBean;
-import org.jboss.webbeans.bean.builtin.UserTransactionBean;
-import org.jboss.webbeans.bean.builtin.facade.EventBean;
-import org.jboss.webbeans.bean.builtin.facade.InstanceBean;
 import org.jboss.webbeans.bootstrap.api.Bootstrap;
-import org.jboss.webbeans.bootstrap.api.Environments;
 import org.jboss.webbeans.bootstrap.api.helpers.AbstractBootstrap;
 import org.jboss.webbeans.bootstrap.api.helpers.ServiceRegistries;
 import org.jboss.webbeans.bootstrap.spi.BeanDeploymentArchive;
@@ -51,15 +46,8 @@
 import org.jboss.webbeans.context.SessionContext;
 import org.jboss.webbeans.context.api.BeanStore;
 import org.jboss.webbeans.context.api.helpers.ConcurrentHashMapBeanStore;
-import org.jboss.webbeans.conversation.ConversationImpl;
-import org.jboss.webbeans.conversation.JavaSEConversationTerminator;
-import org.jboss.webbeans.conversation.NumericConversationIdGenerator;
-import org.jboss.webbeans.conversation.ServletConversationManager;
 import org.jboss.webbeans.ejb.EJBApiAbstraction;
-import org.jboss.webbeans.ejb.EjbDescriptorCache;
-import org.jboss.webbeans.ejb.spi.EjbDescriptor;
 import org.jboss.webbeans.ejb.spi.EjbServices;
-import org.jboss.webbeans.introspector.WBClass;
 import org.jboss.webbeans.jsf.JsfApiAbstraction;
 import org.jboss.webbeans.log.Log;
 import org.jboss.webbeans.log.Logging;
@@ -71,13 +59,9 @@
 import org.jboss.webbeans.resources.DefaultResourceLoader;
 import org.jboss.webbeans.resources.spi.ResourceLoader;
 import org.jboss.webbeans.resources.spi.ResourceServices;
-import org.jboss.webbeans.security.spi.SecurityServices;
-import org.jboss.webbeans.servlet.HttpSessionManager;
 import org.jboss.webbeans.servlet.ServletApiAbstraction;
 import org.jboss.webbeans.transaction.spi.TransactionServices;
 import org.jboss.webbeans.util.serviceProvider.ServiceLoader;
-import org.jboss.webbeans.validation.spi.ValidationServices;
-import org.jboss.webbeans.xml.BeansXmlParser;
 
 /**
  * Common bootstrapping functionality that is run at application startup and
@@ -88,67 +72,52 @@
 public class WebBeansBootstrap extends AbstractBootstrap implements Bootstrap
 {
    
-   // Temporary workaround for reading from a Deployment
+   /**
+    * 
+    * A Deployment visitor which can find the transitive closure of Bean 
+    * Deployment Archives
+    * 
+    * @author pmuir
+    *
+    */
    private static class DeploymentVisitor
    {
       
-      private final Collection<Class<?>> beanClasses;
-      private final Collection<URL> beansXmlUrls;
-      private final Collection<EjbDescriptor<?>> ejbDescriptors;
-      private final Deployment deployment;
+      private final BeanManagerImpl deploymentManager;
       
-      public DeploymentVisitor(Deployment deployment)
+      public DeploymentVisitor(BeanManagerImpl deploymentManager)
       {
-         this.deployment = deployment;
-         this.beanClasses = new ArrayList<Class<?>>();
-         this.beansXmlUrls = new ArrayList<URL>();
-         this.ejbDescriptors = new ArrayList<EjbDescriptor<?>>();
+         this.deploymentManager = deploymentManager;
       }
       
-      public DeploymentVisitor visit()
+      public Map<BeanDeploymentArchive, BeanDeployment> visit()
       {
-         for (BeanDeploymentArchive archvive : deployment.getBeanDeploymentArchives())
+         Set<BeanDeploymentArchive> seenBeanDeploymentArchives = new HashSet<BeanDeploymentArchive>();
+         Map<BeanDeploymentArchive, BeanDeployment> managerAwareBeanDeploymentArchives = new HashMap<BeanDeploymentArchive, BeanDeployment>();
+         for (BeanDeploymentArchive archvive : deploymentManager.getServices().get(Deployment.class).getBeanDeploymentArchives())
          {
-            visit(archvive);
+            visit(archvive, managerAwareBeanDeploymentArchives, seenBeanDeploymentArchives);
          }
-         return this;
+         return managerAwareBeanDeploymentArchives;
       }
       
-      private void visit(BeanDeploymentArchive beanDeploymentArchive)
+      private BeanDeployment visit(BeanDeploymentArchive beanDeploymentArchive, Map<BeanDeploymentArchive, BeanDeployment> managerAwareBeanDeploymentArchives, Set<BeanDeploymentArchive> seenBeanDeploymentArchives)
       {
-         for (Class<?> clazz : beanDeploymentArchive.getBeanClasses())
-         {
-            beanClasses.add(clazz);
-         }
-         for (URL url : beanDeploymentArchive.getBeansXml())
-         {
-            beansXmlUrls.add(url);
-         }
-         for (EjbDescriptor<?> ejbDescriptor : beanDeploymentArchive.getEjbs())
-         {
-            ejbDescriptors.add(ejbDescriptor);
-         }
+         BeanDeployment parent = new BeanDeployment(beanDeploymentArchive, deploymentManager);
+         managerAwareBeanDeploymentArchives.put(beanDeploymentArchive, parent);
+         seenBeanDeploymentArchives.add(beanDeploymentArchive);
          for (BeanDeploymentArchive archive : beanDeploymentArchive.getBeanDeploymentArchives())
          {
-            visit(archive);
+            // Cut any circularties
+            if (!seenBeanDeploymentArchives.contains(archive))
+            {
+               BeanDeployment child = visit(archive, managerAwareBeanDeploymentArchives, seenBeanDeploymentArchives);
+               parent.getBeanManager().addAccessibleBeanManager(child.getBeanManager());
+            }
          }
+         return parent;
       }
       
-      public Iterable<Class<?>> getBeanClasses()
-      {
-         return beanClasses;
-      }
-      
-      public Iterable<URL> getBeansXmlUrls()
-      {
-         return beansXmlUrls;
-      }
-      
-      public Iterable<EjbDescriptor<?>> getEjbDescriptors()
-      {
-         return ejbDescriptors;
-      }
-      
    }
   
    // The log provider
@@ -160,8 +129,8 @@
    }
 
    // The Web Beans manager
-   private BeanManagerImpl manager;
-   private BeanDeployer beanDeployer;
+   private BeanManagerImpl deploymentManager;
+   private Map<BeanDeploymentArchive, BeanDeployment> beanDeployments;
    private DeploymentVisitor deploymentVisitor;
    private BeanStore requestBeanStore;
    
@@ -194,10 +163,10 @@
          }
          addImplementationServices();
          createContexts();
-         this.manager = BeanManagerImpl.newRootManager(ServiceRegistries.unmodifiableServiceRegistry(getServices()));
-         CurrentManager.setRootManager(manager);
+         this.deploymentManager = BeanManagerImpl.newRootManager(ServiceRegistries.unmodifiableServiceRegistry(getServices()));
+         CurrentManager.setRootManager(deploymentManager);
          initializeContexts();
-         this.deploymentVisitor = new DeploymentVisitor(getServices().get(Deployment.class));
+         this.deploymentVisitor = new DeploymentVisitor(deploymentManager);
          return this;
       }
    }
@@ -220,14 +189,14 @@
    
    public BeanManagerImpl getManager()
    {
-      return manager;
+      return deploymentManager;
    }
    
    public Bootstrap startInitialization()
    {
       synchronized (this)
       {
-         if (manager == null)
+         if (deploymentManager == null)
          {
             throw new IllegalStateException("Manager has not been initialized");
          }
@@ -236,31 +205,21 @@
             throw new IllegalStateException("No application context BeanStore set");
          }
          
-         deploymentVisitor.visit();
-         
+         // Set up the contexts before we start creating bean deployers
+         // This allows us to throw errors in the parser
          beginApplication(getApplicationContext());
          requestBeanStore = new ConcurrentHashMapBeanStore();
-         beginDeploy(requestBeanStore);
          
-         EjbDescriptorCache ejbDescriptors = new EjbDescriptorCache();
-         if (getServices().contains(EjbServices.class))
-         {
-            // Must populate EJB cache first, as we need it to detect whether a
-            // bean is an EJB!
-            ejbDescriptors.addAll(deploymentVisitor.getEjbDescriptors());
-         }
+         beanDeployments = deploymentVisitor.visit();
          
-         // TODO Should use a separate event manager for sending bootstrap events
-         ExtensionBeanDeployer extensionBeanDeployer = new ExtensionBeanDeployer(manager);
+         ExtensionBeanDeployer extensionBeanDeployer = new ExtensionBeanDeployer(deploymentManager);
          extensionBeanDeployer.addExtensions(ServiceLoader.load(Extension.class));
          extensionBeanDeployer.createBeans().deploy();
          
-         // Parse beans.xml before main bean deployment
-         parseBeansXml(deploymentVisitor.getBeansXmlUrls());
+         // Add the Deployment BeanManager Bean to the Deployment BeanManager
+         deploymentManager.addBean(new ManagerBean(deploymentManager));
          
-         beanDeployer = new BeanDeployer(manager, ejbDescriptors);
-         
-         fireBeforeBeanDiscoveryEvent(beanDeployer);
+         fireBeforeBeanDiscoveryEvent();
       }
       return this;
    }
@@ -269,33 +228,10 @@
    {
       synchronized (this)
       {
-         beanDeployer.addClasses(deploymentVisitor.getBeanClasses());
-         beanDeployer.getEnvironment().addBean(new ManagerBean(manager));
-         beanDeployer.getEnvironment().addBean(new InjectionPointBean(manager));
-         beanDeployer.getEnvironment().addBean(new EventBean(manager));
-         beanDeployer.getEnvironment().addBean(new InstanceBean(manager));
-         if (!getEnvironment().equals(Environments.SE))
+         for (Entry<BeanDeploymentArchive, BeanDeployment> entry : beanDeployments.entrySet())
          {
-            beanDeployer.addClass(ConversationImpl.class);
-            beanDeployer.addClass(ServletConversationManager.class);
-            beanDeployer.addClass(JavaSEConversationTerminator.class);
-            beanDeployer.addClass(NumericConversationIdGenerator.class);
-            beanDeployer.addClass(HttpSessionManager.class);
+            entry.getValue().deployBeans(getEnvironment());
          }
-         if (getServices().contains(TransactionServices.class))
-         {
-            beanDeployer.getEnvironment().addBean(new UserTransactionBean(manager));
-         }
-         if (getServices().contains(SecurityServices.class))
-         {
-            beanDeployer.getEnvironment().addBean(new PrincipalBean(manager));
-         }
-         if (getServices().contains(ValidationServices.class))
-         {
-            beanDeployer.getEnvironment().addBean(new DefaultValidatorBean(manager));
-            beanDeployer.getEnvironment().addBean(new DefaultValidatorFactoryBean(manager));
-         }
-         beanDeployer.createBeans().deploy();
          fireAfterBeanDiscoveryEvent();
          log.debug("Web Beans initialized. Validating beans.");
       }
@@ -306,7 +242,10 @@
    {
       synchronized (this)
       {
-         getServices().get(Validator.class).validateDeployment(manager, beanDeployer.getEnvironment());
+         for (Entry<BeanDeploymentArchive, BeanDeployment> entry : beanDeployments.entrySet())
+         {
+            getServices().get(Validator.class).validateDeployment(entry.getValue().getBeanManager(), entry.getValue().getBeanDeployer().getEnvironment());
+         }
          fireAfterDeploymentValidationEvent();
       }
       return this;
@@ -316,40 +255,15 @@
    {
       synchronized (this)
       {
-         endDeploy(requestBeanStore);
+         // Register the managers so external requests can handle them
+         CurrentManager.setBeanDeploymentArchives(beanDeployments);
       }
       return this;
    }
-   
-   private void parseBeansXml(Iterable<URL> urls)
-   {
-      BeansXmlParser parser = new BeansXmlParser(getServices().get(ResourceLoader.class), urls);
-      parser.parse();
-      
-      if (parser.getEnabledPolicyClasses() != null)
-      {
-         manager.setEnabledPolicyClasses(parser.getEnabledPolicyClasses());
-      }
-      if (parser.getEnabledPolicyStereotypes() != null)
-      {
-         manager.setEnabledPolicyStereotypes(parser.getEnabledPolicyStereotypes());
-      }
-      if (parser.getEnabledDecoratorClasses() != null)
-      {
-         manager.setEnabledDecoratorClasses(parser.getEnabledDecoratorClasses());
-      }
-      if (parser.getEnabledInterceptorClasses() != null)
-      {
-         manager.setEnabledInterceptorClasses(parser.getEnabledInterceptorClasses());
-      }
-      log.debug("Enabled policies: " + manager.getEnabledPolicyClasses() + " " + manager.getEnabledPolicyStereotypes());
-      log.debug("Enabled decorator types: " + manager.getEnabledDecoratorClasses());
-      log.debug("Enabled interceptor types: " + manager.getEnabledInterceptorClasses());
-   }
 
-   private void fireBeforeBeanDiscoveryEvent(BeanDeployer beanDeployer)
+   private void fireBeforeBeanDiscoveryEvent()
    {
-      BeforeBeanDiscoveryImpl event = new BeforeBeanDiscoveryImpl(getManager(), beanDeployer);
+      BeforeBeanDiscovery event = new BeforeBeanDiscoveryImpl(deploymentManager, beanDeployments);
       try
       {
          getManager().fireEvent(event);
@@ -375,10 +289,10 @@
    
    private void fireAfterBeanDiscoveryEvent()
    {
-      AfterBeanDiscoveryImpl event = new AfterBeanDiscoveryImpl(getManager());
+      AfterBeanDiscoveryImpl event = new AfterBeanDiscoveryImpl(deploymentManager, beanDeployments);
       try
       {
-         manager.fireEvent(event);
+         deploymentManager.fireEvent(event);
       }
       catch (Exception e)
       {
@@ -398,7 +312,7 @@
       
       try
       {
-         manager.fireEvent(event);
+         deploymentManager.fireEvent(event);
       }
       catch (Exception e)
       {
@@ -425,11 +339,11 @@
    
    protected void initializeContexts()
    {
-      manager.addContext(getServices().get(DependentContext.class));
-      manager.addContext(getServices().get(RequestContext.class));
-      manager.addContext(getServices().get(ConversationContext.class));
-      manager.addContext(getServices().get(SessionContext.class));
-      manager.addContext(getServices().get(ApplicationContext.class));
+      deploymentManager.addContext(getServices().get(DependentContext.class));
+      deploymentManager.addContext(getServices().get(RequestContext.class));
+      deploymentManager.addContext(getServices().get(ConversationContext.class));
+      deploymentManager.addContext(getServices().get(SessionContext.class));
+      deploymentManager.addContext(getServices().get(ApplicationContext.class));
    }
    
    protected void createContexts()
@@ -445,25 +359,11 @@
    protected void beginApplication(BeanStore applicationBeanStore)
    {
       log.trace("Starting application");
-      ApplicationContext applicationContext = manager.getServices().get(ApplicationContext.class);
+      ApplicationContext applicationContext = deploymentManager.getServices().get(ApplicationContext.class);
       applicationContext.setBeanStore(applicationBeanStore);
       applicationContext.setActive(true);
 
    }
-
-   protected void beginDeploy(BeanStore requestBeanStore)
-   {
-      RequestContext requestContext = CurrentManager.rootManager().getServices().get(RequestContext.class);
-      requestContext.setBeanStore(requestBeanStore);
-      requestContext.setActive(true);
-   }
-
-   protected void endDeploy(BeanStore requestBeanStore)
-   {
-      RequestContext requestContext = CurrentManager.rootManager().getServices().get(RequestContext.class);
-      requestContext.setBeanStore(null);
-      requestContext.setActive(false);
-   }
    
    public void shutdown()
    {
@@ -473,7 +373,7 @@
       }
       finally
       {
-         manager.shutdown();
+         deploymentManager.shutdown();
       }
    }
 

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/context/ContextLifecycle.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/context/ContextLifecycle.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/context/ContextLifecycle.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -49,12 +49,11 @@
       sessionContext.setActive(true);
    }
 
-   public void endSession(String id, BeanStore sessionBeanStore)
+   public void endSession(String id, BeanStore sessionBeanStore, ConversationManager conversationManager)
    {
       log.trace("Ending session " + id);
       SessionContext sessionContext = CurrentManager.rootManager().getServices().get(SessionContext.class);
       sessionContext.setActive(true);
-      ConversationManager conversationManager = CurrentManager.rootManager().getInstanceByType(ConversationManager.class);
       conversationManager.destroyAllConversations();
       sessionContext.destroy();
       sessionContext.setBeanStore(null);

Deleted: ri/trunk/impl/src/main/java/org/jboss/webbeans/el/WebBeansELResolver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/el/WebBeansELResolver.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/el/WebBeansELResolver.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -1,34 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,  
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.webbeans.el;
-
-import javax.el.ELResolver;
-
-import org.jboss.webbeans.CurrentManager;
-import org.jboss.webbeans.util.el.ForwardingELResolver;
-
-public class WebBeansELResolver extends ForwardingELResolver
-{
-
-   @Override
-   protected ELResolver delegate()
-   {
-      // TODO look in the correct manager
-      return CurrentManager.rootManager().getCurrent().getELResolver();
-   }
-
-}

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/ConversationAwareViewHandler.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/ConversationAwareViewHandler.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/ConversationAwareViewHandler.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -16,11 +16,12 @@
  */
 package org.jboss.webbeans.jsf;
 
+import static org.jboss.webbeans.jsf.JsfHelper.getModuleBeanManager;
+
 import javax.faces.application.ViewHandler;
 import javax.faces.application.ViewHandlerWrapper;
 import javax.faces.context.FacesContext;
 
-import org.jboss.webbeans.CurrentManager;
 import org.jboss.webbeans.conversation.ConversationImpl;
 
 /**
@@ -66,10 +67,10 @@
    public String getActionURL(FacesContext context, String viewId)
    {
       String actionUrl = super.getActionURL(context, viewId);
-      ConversationImpl conversation = CurrentManager.rootManager().getInstanceByType(ConversationImpl.class);  
+      ConversationImpl conversation = getModuleBeanManager(context).getInstanceByType(ConversationImpl.class);  
       if (conversation.isLongRunning())
       {
-         return new FacesUrlTransformer(actionUrl).appendConversationIdIfNecessary(conversation.getUnderlyingId()).getUrl();
+         return new FacesUrlTransformer(actionUrl, context).appendConversationIdIfNecessary(conversation.getUnderlyingId()).getUrl();
       }
       else
       {

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/FacesUrlTransformer.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/FacesUrlTransformer.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/FacesUrlTransformer.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -16,10 +16,11 @@
  */
 package org.jboss.webbeans.jsf;
 
+import static org.jboss.webbeans.jsf.JsfHelper.getModuleBeanManager;
+
 import javax.enterprise.inject.AnnotationLiteral;
 import javax.faces.context.FacesContext;
 
-import org.jboss.webbeans.CurrentManager;
 import org.jboss.webbeans.conversation.ConversationIdName;
 
 /**
@@ -39,16 +40,17 @@
    private static final String PARAMETER_ASSIGNMENT_OPERATOR = "=";
    
    private String url;
-   private FacesContext context;
+   private final FacesContext context;
    
-   public FacesUrlTransformer(String url)
+   public FacesUrlTransformer(String url, FacesContext facesContext)
    {
       this.url = url;
+      this.context = facesContext;
    }
 
    public FacesUrlTransformer appendConversationIdIfNecessary(String cid)
    {
-      String cidParamName = CurrentManager.rootManager().getInstanceByType(String.class, new AnnotationLiteral<ConversationIdName>(){});
+      String cidParamName = getModuleBeanManager(context).getInstanceByType(String.class, new AnnotationLiteral<ConversationIdName>(){});
       int queryStringIndex = url.indexOf(QUERY_STRING_DELIMITER);
       // if there is no query string or there is a query string but the cid param is absent, then append it
       if (queryStringIndex < 0 || url.indexOf(cidParamName + PARAMETER_ASSIGNMENT_OPERATOR, queryStringIndex) < 0)
@@ -68,7 +70,7 @@
    {
       if (isUrlAbsolute())
       {
-         String requestPath = context().getExternalContext().getRequestContextPath();
+         String requestPath = context.getExternalContext().getRequestContextPath();
          url = url.substring(url.indexOf(requestPath) + requestPath.length());
       } 
       else 
@@ -84,25 +86,15 @@
 
    public FacesUrlTransformer toActionUrl()
    {
-      url = context().getApplication().getViewHandler().getActionURL(context(), url);
+      url = context.getApplication().getViewHandler().getActionURL(context, url);
       return this;
    }
 
    public String encode()
    {
-      return context().getExternalContext().encodeActionURL(url);
+      return context.getExternalContext().encodeActionURL(url);
    }
    
-   private FacesContext context()
-   {
-      if (context == null)
-      {
-         context = FacesContext.getCurrentInstance();
-      }
-      
-      return context;
-   }
-   
    private boolean isUrlAbsolute()
    {
       // TODO: any API call to do this?

Copied: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/JsfHelper.java (from rev 3567, ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/PhaseHelper.java)
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/JsfHelper.java	                        (rev 0)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/JsfHelper.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -0,0 +1,123 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.webbeans.jsf;
+
+import javax.enterprise.inject.AnnotationLiteral;
+import javax.faces.application.Application;
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpSession;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.webbeans.conversation.ConversationIdName;
+import org.jboss.webbeans.log.LogProvider;
+import org.jboss.webbeans.log.Logging;
+import org.jboss.webbeans.persistence.spi.helpers.JSFServices;
+import org.jboss.webbeans.util.Reflections;
+
+/**
+ * Helper class for JSF related operations
+ * 
+ * @author Nicklas Karlsson
+ * @author Dan Allen
+ */
+public class JsfHelper
+{
+   private static LogProvider log = Logging.getLogProvider(JsfHelper.class);
+   
+   /**
+    * Checks if the current request is a JSF postback. The JsfApiAbstraction is
+    * consulted to determine if the JSF version is compatible with JSF 2.0. If
+    * so, the {@link FacesContext#isPostback()} convenience method is used
+    * (which is technically an optimized and safer implementation). Otherwise,
+    * the ResponseStateManager is consulted directly.
+    * 
+    * @return true if this request is a JSF postback, false otherwise
+    */
+   public static boolean isPostback(FacesContext facesContext)
+   {
+      if (CurrentManager.rootManager().getServices().get(JsfApiAbstraction.class).isApiVersionCompatibleWith(2.0))
+      {
+         return (Boolean) Reflections.invokeAndWrap("isPostback", facesContext);
+      }
+      else
+      {
+         return facesContext.getRenderKit().getResponseStateManager().isPostback(facesContext);
+      }
+   }
+
+   /**
+    * Gets the propagated conversation id parameter from the request
+    * 
+    * @return The conversation id (or null if not found)
+    */
+   public static String getConversationIdFromRequest(FacesContext facesContext)
+   {
+      BeanManagerImpl moduleBeanManager = JsfHelper.getModuleBeanManager(facesContext);
+      String cidName = moduleBeanManager.getInstanceByType(String.class, new AnnotationLiteral<ConversationIdName>(){});
+      String cid = facesContext.getExternalContext().getRequestParameterMap().get(cidName);
+      log.trace("Found conversation id " + cid + " in request parameter");
+      return cid;
+   }
+
+   /**
+    * Gets the propagated conversation id.
+    * 
+    * @return The conversation id (or null if not found)
+    */
+   public static String getConversationId(FacesContext facesContext)
+   {
+      String cid = getConversationIdFromRequest(facesContext);
+      log.debug("Resuming conversation with id " + cid);
+      return cid;
+   }
+   
+   /**
+    * Gets the HTTP session
+    * 
+    * @return The session
+    */
+   public static HttpSession getHttpSession(FacesContext facesContext)
+   {
+      Object session = facesContext.getExternalContext().getSession(true);
+      if (session instanceof HttpSession)
+      {
+         return (HttpSession) session;
+      }
+      else
+      {
+         return null;
+      }
+   }
+   
+   public static BeanManagerImpl getModuleBeanManager(FacesContext facesContext)
+   {
+      return getModuleBeanManager(facesContext.getApplication());
+   }
+   
+   public static BeanManagerImpl getModuleBeanManager(Application application)
+   {
+      if (application == null)
+      {
+         throw new IllegalArgumentException("Must provide the JSF Application");
+      }
+      BeanDeploymentArchive beanDeploymentArchive = CurrentManager.rootManager().getServices().get(JSFServices.class).getBeanDeploymentArchive(application);
+      return CurrentManager.getBeanDeploymentArchives().get(beanDeploymentArchive).getCurrent();
+   }
+
+}


Property changes on: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/JsfHelper.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Deleted: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/PhaseHelper.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/PhaseHelper.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/PhaseHelper.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -1,105 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,  
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jboss.webbeans.jsf;
-
-import javax.enterprise.inject.AnnotationLiteral;
-import javax.faces.context.FacesContext;
-import javax.servlet.http.HttpSession;
-
-import org.jboss.webbeans.CurrentManager;
-import org.jboss.webbeans.conversation.ConversationIdName;
-import org.jboss.webbeans.log.LogProvider;
-import org.jboss.webbeans.log.Logging;
-import org.jboss.webbeans.util.Reflections;
-
-/**
- * Helper class for JSF related operations
- * 
- * @author Nicklas Karlsson
- * @author Dan Allen
- */
-public class PhaseHelper
-{
-   private static LogProvider log = Logging.getLogProvider(PhaseHelper.class);
-
-   /**
-    * Gets a FacesContext instance
-    * 
-    * @return The current instance
-    */
-   private static FacesContext context()
-   {
-      return FacesContext.getCurrentInstance();
-   }
-
-   /**
-    * Checks if the current request is a JSF postback. The JsfApiAbstraction is
-    * consulted to determine if the JSF version is compatible with JSF 2.0. If
-    * so, the {@link FacesContext#isPostback()} convenience method is used
-    * (which is technically an optimized and safer implementation). Otherwise,
-    * the ResponseStateManager is consulted directly.
-    * 
-    * @return true if this request is a JSF postback, false otherwise
-    */
-   public static boolean isPostback()
-   {
-      if (CurrentManager.rootManager().getServices().get(JsfApiAbstraction.class).isApiVersionCompatibleWith(2.0))
-      {
-         return (Boolean) Reflections.invokeAndWrap("isPostback", context());
-      }
-      else
-      {
-         return context().getRenderKit().getResponseStateManager().isPostback(context());
-      }
-   }
-
-   /**
-    * Gets the propagated conversation id parameter from the request
-    * 
-    * @return The conversation id (or null if not found)
-    */
-   public static String getConversationIdFromRequest()
-   {
-      String cidName = CurrentManager.rootManager().getInstanceByType(String.class, new AnnotationLiteral<ConversationIdName>(){});
-      String cid = context().getExternalContext().getRequestParameterMap().get(cidName);
-      log.trace("Found conversation id " + cid + " in request parameter");
-      return cid;
-   }
-
-   /**
-    * Gets the propagated conversation id.
-    * 
-    * @return The conversation id (or null if not found)
-    */
-   public static String getConversationId()
-   {
-      String cid = getConversationIdFromRequest();
-      log.debug("Resuming conversation with id " + cid);
-      return cid;
-   }
-   
-   /**
-    * Gets the HTTP session
-    * 
-    * @return The session
-    */
-   public static HttpSession getHttpSession()
-   {
-      return (HttpSession) context().getExternalContext().getSession(true);
-   }
-
-}

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansApplication.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansApplication.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansApplication.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -23,8 +23,12 @@
 import javax.el.ExpressionFactory;
 import javax.faces.application.Application;
 
+import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.bootstrap.spi.BeanDeploymentArchive;
 import org.jboss.webbeans.el.WebBeansELContextListener;
+import org.jboss.webbeans.el.WebBeansELResolverImpl;
 import org.jboss.webbeans.el.WebBeansExpressionFactory;
+import org.jboss.webbeans.persistence.spi.helpers.JSFServices;
 
 /**
  * @author pmuir
@@ -43,6 +47,8 @@
       this.application = application;
       this.elContextListeners = new ArrayList<ELContextListener>();
       this.elContextListeners.add(new WebBeansELContextListener());
+      BeanDeploymentArchive beanDeploymentArchive = CurrentManager.rootManager().getServices().get(JSFServices.class).getBeanDeploymentArchive(application);
+      application.addELResolver(new WebBeansELResolverImpl(CurrentManager.getBeanDeploymentArchives().get(beanDeploymentArchive).getCurrent()));
    }
 
    @Override

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansApplicationFactory.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansApplicationFactory.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansApplicationFactory.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -29,6 +29,8 @@
 
    private final ApplicationFactory applicationFactory;
    
+   private Application application;
+   
    public WebBeansApplicationFactory(ApplicationFactory applicationFactory)
    {
       this.applicationFactory = applicationFactory;
@@ -43,7 +45,11 @@
    @Override
    public Application getApplication()
    {
-      return new WebBeansApplication(delegate().getApplication());
+      if (application == null)
+      {
+         application = new WebBeansApplication(delegate().getApplication());
+      }
+      return application;
    }
 
 }

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansPhaseListener.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansPhaseListener.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansPhaseListener.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -22,12 +22,17 @@
  */
 package org.jboss.webbeans.jsf;
 
+import static org.jboss.webbeans.jsf.JsfHelper.getConversationId;
+import static org.jboss.webbeans.jsf.JsfHelper.getModuleBeanManager;
+import static org.jboss.webbeans.jsf.JsfHelper.getHttpSession;
+
+import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseEvent;
 import javax.faces.event.PhaseId;
 import javax.faces.event.PhaseListener;
 import javax.servlet.http.HttpSession;
 
-import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.BeanManagerImpl;
 import org.jboss.webbeans.context.ConversationContext;
 import org.jboss.webbeans.context.SessionContext;
 import org.jboss.webbeans.conversation.ConversationImpl;
@@ -73,7 +78,7 @@
    {
       if (phaseEvent.getPhaseId().equals(PhaseId.RESTORE_VIEW))
       {
-         beforeRestoreView();
+         beforeRestoreView(phaseEvent.getFacesContext());
       }
    }
 
@@ -89,35 +94,36 @@
    {
       if (phaseEvent.getPhaseId().equals(PhaseId.RENDER_RESPONSE))
       {
-         afterRenderResponse();
+         afterRenderResponse(phaseEvent.getFacesContext());
       }
       // be careful with this else as it assumes only one if condition right now
       else if (phaseEvent.getFacesContext().getResponseComplete())
       {
-         afterResponseComplete(phaseEvent.getPhaseId());
+         afterResponseComplete(phaseEvent.getFacesContext(), phaseEvent.getPhaseId());
       }
    }
 
    /**
     * Execute before the Restore View phase.
     */
-   private void beforeRestoreView()
+   private void beforeRestoreView(FacesContext facesContext)
    {
       log.trace("Initiating the session and conversation before the Restore View phase");
-      initiateSessionAndConversation();
+      initiateSessionAndConversation(facesContext);
    }
    
    /**
     * Execute after the Render Response phase.
     */
-   private void afterRenderResponse()
+   private void afterRenderResponse(FacesContext facesContext)
    {
-      SessionContext sessionContext = CurrentManager.rootManager().getServices().get(SessionContext.class);
-      ConversationContext conversationContext = CurrentManager.rootManager().getServices().get(ConversationContext.class);
+      BeanManagerImpl moduleBeanManager = getModuleBeanManager(facesContext);
+      SessionContext sessionContext = moduleBeanManager.getServices().get(SessionContext.class);
+      ConversationContext conversationContext = moduleBeanManager.getServices().get(ConversationContext.class);
       if (sessionContext.isActive())
       {
          log.trace("Cleaning up the conversation after the Render Response phase");
-         CurrentManager.rootManager().getInstanceByType(ConversationManager.class).cleanupConversation();
+         moduleBeanManager.getInstanceByType(ConversationManager.class).cleanupConversation();
          conversationContext.setActive(false);
       }
       else
@@ -129,13 +135,14 @@
    /**
     * Execute after any phase that marks the response as complete.
     */
-   private void afterResponseComplete(PhaseId phaseId)
+   private void afterResponseComplete(FacesContext facesContext, PhaseId phaseId)
    {
-      SessionContext sessionContext = CurrentManager.rootManager().getServices().get(SessionContext.class);
+      BeanManagerImpl moduleBeanManager = getModuleBeanManager(facesContext);
+      SessionContext sessionContext = moduleBeanManager.getServices().get(SessionContext.class);
       if (sessionContext.isActive())
       {
          log.trace("Cleaning up the conversation after the " + phaseId + " phase as the response has been marked complete");
-         CurrentManager.rootManager().getInstanceByType(ConversationManager.class).cleanupConversation();
+         moduleBeanManager.getInstanceByType(ConversationManager.class).cleanupConversation();
       }
       else
       {
@@ -149,14 +156,15 @@
     * conversation id token is present in the request and, in either case,
     * activate the conversation context (long-running or transient).
     */
-   private void initiateSessionAndConversation()
+   private void initiateSessionAndConversation(FacesContext facesContext)
    {
-      HttpSession session = PhaseHelper.getHttpSession();
-      CurrentManager.rootManager().getInstanceByType(HttpSessionManager.class).setSession(session);
-      CurrentManager.rootManager().getInstanceByType(ConversationManager.class).beginOrRestoreConversation(PhaseHelper.getConversationId());
-      String cid = CurrentManager.rootManager().getInstanceByType(ConversationImpl.class).getUnderlyingId();
+      HttpSession session = getHttpSession(facesContext);
+      BeanManagerImpl moduleBeanManager = getModuleBeanManager(facesContext);
+      moduleBeanManager.getInstanceByType(HttpSessionManager.class).setSession(session);
+      moduleBeanManager.getInstanceByType(ConversationManager.class).beginOrRestoreConversation(getConversationId(facesContext));
+      String cid = moduleBeanManager.getInstanceByType(ConversationImpl.class).getUnderlyingId();
       
-      ConversationContext conversationContext = CurrentManager.rootManager().getServices().get(ConversationContext.class);
+      ConversationContext conversationContext = moduleBeanManager.getServices().get(ConversationContext.class);
       conversationContext.setBeanStore(new ConversationBeanStore(session, cid));
       conversationContext.setActive(true);
    }

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsp/JspInitialization.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsp/JspInitialization.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsp/JspInitialization.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -20,7 +20,8 @@
 import javax.servlet.jsp.JspApplicationContext;
 import javax.servlet.jsp.JspFactory;
 
-import org.jboss.webbeans.el.WebBeansELResolver;
+import org.jboss.webbeans.el.WebBeansELResolverImpl;
+import org.jboss.webbeans.servlet.ServletHelper;
 
 /**
  * @author pmuir
@@ -41,7 +42,7 @@
       JspApplicationContext jspAppContext = JspFactory.getDefaultFactory().getJspApplicationContext(context);
 
       // register compositeELResolver with JSP
-      jspAppContext.addELResolver(new WebBeansELResolver());
+      jspAppContext.addELResolver(new WebBeansELResolverImpl(ServletHelper.getModuleBeanManager(context)));
 
       // DOesn't really achieve much :-(
       //jspAppContext.addELContextListener(new WebBeansELContextListener());

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/resources/ManagerObjectFactory.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/resources/ManagerObjectFactory.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/resources/ManagerObjectFactory.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -29,8 +29,15 @@
    
    public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception
    {
-      // TODO This should return the bean deployment archive manager
-      return CurrentManager.rootManager().getCurrent();
+      // Temp hack for JBoss Flat Deployment
+      if (CurrentManager.getBeanDeploymentArchives().size() == 1)
+      {
+         return CurrentManager.getBeanDeploymentArchives().entrySet().iterator().next().getValue().getCurrent();
+      }
+      else
+      {
+         throw new UnsupportedOperationException("Unable to determine which manager to return");
+      }
    }
    
 }

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ConversationPropagationFilter.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ConversationPropagationFilter.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ConversationPropagationFilter.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -16,18 +16,24 @@
  */
 package org.jboss.webbeans.servlet;
 
+import static org.jboss.webbeans.servlet.ServletHelper.getModuleBeanManager;
+
 import java.io.IOException;
 
+import javax.enterprise.inject.AnnotationLiteral;
+import javax.faces.context.FacesContext;
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponseWrapper;
 
-import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.conversation.ConversationIdName;
 import org.jboss.webbeans.conversation.ConversationImpl;
 import org.jboss.webbeans.conversation.ConversationManager;
 import org.jboss.webbeans.jsf.FacesUrlTransformer;
@@ -45,32 +51,40 @@
  */
 public class ConversationPropagationFilter implements Filter
 {
+   
+   private ServletContext ctx;
+   
    public void init(FilterConfig config) throws ServletException
    {
+      ctx = config.getServletContext();
    }
 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
-      
-      chain.doFilter(request, wrapResponse((HttpServletResponse) response));
+      if (request instanceof HttpServletRequest && response instanceof HttpServletResponse)
+      {
+         response = wrapResponse((HttpServletResponse) response, ((HttpServletRequest) request).getContextPath());
+      }
+      chain.doFilter(request, response);
    }
    
    public void destroy()
    {
    }
 
-   private ServletResponse wrapResponse(HttpServletResponse response)
+   private ServletResponse wrapResponse(HttpServletResponse response, final String requestPath)
    {
       return new HttpServletResponseWrapper(response)
       {
          @Override
          public void sendRedirect(String path) throws IOException
          {
-            ConversationImpl conversation = CurrentManager.rootManager().getInstanceByType(ConversationImpl.class);
+            ConversationImpl conversation = getModuleBeanManager(ctx) .getInstanceByType(ConversationImpl.class);
             if (conversation.isLongRunning())
             {
-               path = new FacesUrlTransformer(path).toRedirectViewId().toActionUrl().appendConversationIdIfNecessary(conversation.getUnderlyingId()).encode();
-               CurrentManager.rootManager().getInstanceByType(ConversationManager.class).cleanupConversation();
+               String cidParamName = getModuleBeanManager(ctx).getInstanceByType(String.class, new AnnotationLiteral<ConversationIdName>(){});
+               path = new FacesUrlTransformer(path, FacesContext.getCurrentInstance()).toRedirectViewId().toActionUrl().appendConversationIdIfNecessary(conversation.getUnderlyingId()).encode();
+               getModuleBeanManager(ctx).getInstanceByType(ConversationManager.class).cleanupConversation();
             }
             super.sendRedirect(path);
          }

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -22,6 +22,8 @@
  */
 package org.jboss.webbeans.servlet;
 
+import static org.jboss.webbeans.servlet.ServletHelper.getModuleBeanManager;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
@@ -31,6 +33,7 @@
 import org.jboss.webbeans.context.SessionContext;
 import org.jboss.webbeans.context.api.BeanStore;
 import org.jboss.webbeans.context.api.helpers.ConcurrentHashMapBeanStore;
+import org.jboss.webbeans.conversation.ConversationManager;
 import org.jboss.webbeans.log.LogProvider;
 import org.jboss.webbeans.log.Logging;
 
@@ -77,19 +80,20 @@
    {
       SessionContext sessionContext = CurrentManager.rootManager().getServices().get(SessionContext.class);
       RequestContext requestContext = CurrentManager.rootManager().getServices().get(RequestContext.class);
+      ConversationManager conversationManager = getModuleBeanManager(session.getServletContext()).getInstanceByType(ConversationManager.class);
       if (sessionContext.isActive())
       {
-         lifecycle.endSession(session.getId(), sessionContext.getBeanStore());
+         lifecycle.endSession(session.getId(), sessionContext.getBeanStore(), conversationManager);
       }
       else if (requestContext.isActive())
       {
-         lifecycle.endSession(session.getId(), restoreSessionContext(session));
+         lifecycle.endSession(session.getId(), restoreSessionContext(session), conversationManager);
       }
       else
       {
          BeanStore mockRequest = new ConcurrentHashMapBeanStore();
          lifecycle.beginRequest("endSession-" + session.getId(), mockRequest);
-         lifecycle.endSession(session.getId(), restoreSessionContext(session));
+         lifecycle.endSession(session.getId(), restoreSessionContext(session), conversationManager);
          lifecycle.endRequest("endSession-" + session.getId(), mockRequest);
       }
    }
@@ -108,7 +112,7 @@
       lifecycle.restoreSession(session == null ? "Inactive session" : session.getId(), sessionBeanStore);
       if (session != null)
       {
-         CurrentManager.rootManager().getInstanceByType(HttpSessionManager.class).setSession(session);
+         getModuleBeanManager(session.getServletContext()).getInstanceByType(HttpSessionManager.class).setSession(session);
       }
       return sessionBeanStore;
    }
@@ -117,7 +121,7 @@
    {
       BeanStore beanStore = new HttpSessionBeanStore(session);
       lifecycle.restoreSession(session.getId(), beanStore);
-      CurrentManager.rootManager().getInstanceByType(HttpSessionManager.class).setSession(session);
+      getModuleBeanManager(session.getServletContext()).getInstanceByType(HttpSessionManager.class).setSession(session);
       return beanStore;
    }
 

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/WebBeansListener.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/WebBeansListener.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/WebBeansListener.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -59,7 +59,11 @@
    @Override
    public void contextInitialized(ServletContextEvent sce)
    {
-      new JspInitialization().init(sce.getServletContext());
+      // JBoss AS will still start the deployment even if WB fails
+      if (CurrentManager.isAvailable())
+      {
+         new JspInitialization().init(sce.getServletContext());
+      }
    }  
 
    /**
@@ -70,7 +74,11 @@
    @Override
    public void sessionCreated(HttpSessionEvent event) 
    {
-      getLifecycle().beginSession(event.getSession());
+      // JBoss AS will still start the deployment even if WB fails
+      if (CurrentManager.isAvailable())
+      {
+         getLifecycle().beginSession(event.getSession());
+      }
    }
 
    /**
@@ -81,7 +89,11 @@
    @Override
    public void sessionDestroyed(HttpSessionEvent event) 
    {
-      getLifecycle().endSession(event.getSession());
+      // JBoss AS will still start the deployment even if WB fails
+      if (CurrentManager.isAvailable())
+      {
+         getLifecycle().endSession(event.getSession());
+      }
    }
 
    /**
@@ -92,14 +104,18 @@
    @Override
    public void requestDestroyed(ServletRequestEvent event)
    {
-      if (event.getServletRequest() instanceof HttpServletRequest)
+      // JBoss AS will still start the deployment even if WB fails
+      if (CurrentManager.isAvailable())
       {
-         getLifecycle().endRequest((HttpServletRequest) event.getServletRequest());
+         if (event.getServletRequest() instanceof HttpServletRequest)
+         {
+            getLifecycle().endRequest((HttpServletRequest) event.getServletRequest());
+         }
+         else
+         {
+            throw new IllegalStateException("Non HTTP-Servlet lifecycle not defined");
+         }
       }
-      else
-      {
-         throw new IllegalStateException("Non HTTP-Servlet lifecycle not defined");
-      }
    }
 
    /**
@@ -110,14 +126,18 @@
    @Override
    public void requestInitialized(ServletRequestEvent event)
    {
-      if (event.getServletRequest() instanceof HttpServletRequest)
+      // JBoss AS will still start the deployment even if WB fails
+      if (CurrentManager.isAvailable())
       {
-         getLifecycle().beginRequest((HttpServletRequest) event.getServletRequest());
+         if (event.getServletRequest() instanceof HttpServletRequest)
+         {
+            getLifecycle().beginRequest((HttpServletRequest) event.getServletRequest());
+         }
+         else
+         {
+            throw new IllegalStateException("Non HTTP-Servlet lifecycle not defined");
+         }
       }
-      else
-      {
-         throw new IllegalStateException("Non HTTP-Servlet lifecycle not defined");
-      }
    }
 
 }

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/util/serviceProvider/ServiceLoader.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/util/serviceProvider/ServiceLoader.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/util/serviceProvider/ServiceLoader.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.lang.reflect.Constructor;
 import java.net.URL;
 import java.util.Enumeration;
 import java.util.HashSet;
@@ -28,6 +29,7 @@
 
 import org.jboss.webbeans.log.Log;
 import org.jboss.webbeans.log.Logging;
+import org.jboss.webbeans.util.Reflections;
 
 /**
  * This class handles looking up service providers on the class path. It
@@ -118,6 +120,7 @@
    }
    
    private final String serviceFile;
+   private Class<S> expectedType;
    private final ClassLoader loader;
    
    private Set<S> providers;
@@ -126,6 +129,7 @@
    {
       this.loader = loader;
       this.serviceFile = SERVICES + service.getName();
+      this.expectedType = service;
    }
    
    /**
@@ -181,9 +185,18 @@
                      {
                         try
                         {
-                           @SuppressWarnings("unchecked")
-                           Class<? extends S> clazz = (Class<? extends S>) loader.loadClass(line);
-                           S instance = clazz.newInstance();
+                           Class<?> clazz = loader.loadClass(line);
+                           Class<? extends S> serviceClass;
+                           try
+                           {
+                              serviceClass = clazz.asSubclass(expectedType);
+                           }
+                           catch (ClassCastException e)
+                           {
+                              throw new IllegalStateException("Extension " + line + " does not implement Extension");
+                           }
+                           Constructor<? extends S> constructor = Reflections.ensureAccessible(serviceClass.getConstructor());
+                           S instance = constructor.newInstance();
                            providers.add(instance);
                         }
                         catch (NoClassDefFoundError e)

Modified: ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/ELImpl.java
===================================================================
--- ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/ELImpl.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/ELImpl.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -2,12 +2,18 @@
 
 import javax.el.ELContext;
 
+import org.jboss.jsr299.tck.api.JSR299Configuration;
+import org.jboss.testharness.api.Configurable;
+import org.jboss.testharness.api.Configuration;
+import org.jboss.webbeans.BeanManagerImpl;
 import org.jboss.webbeans.mock.el.EL;
 
-public class ELImpl implements org.jboss.jsr299.tck.spi.EL
+public class ELImpl implements org.jboss.jsr299.tck.spi.EL, Configurable
 {
    
+   private JSR299Configuration configuration;
    
+   
    @SuppressWarnings("unchecked")
    public <T> T evaluateValueExpression(String expression, Class<T> expectedType)
    {
@@ -24,6 +30,26 @@
    
    public ELContext createELContext()
    {
-      return EL.createELContext();
+      if (configuration.getManagers().getManager() instanceof BeanManagerImpl)
+      {
+         return EL.createELContext((BeanManagerImpl) configuration.getManagers().getManager());
+      }
+      else
+      {
+         throw new IllegalStateException("Wrong manager");
+      }
    }
+
+   public void setConfiguration(Configuration configuration)
+   {
+      if (configuration instanceof JSR299Configuration)
+      {
+         this.configuration = (JSR299Configuration) configuration; 
+      }
+      else
+      {
+         throw new IllegalArgumentException("Can only use ELImpl in the CDI TCK");
+      }
+   }
+   
 }

Modified: ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/ManagersImpl.java
===================================================================
--- ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/ManagersImpl.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/porting-package/src/main/java/org/jboss/webbeans/tck/ManagersImpl.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -2,18 +2,22 @@
 
 import javax.enterprise.inject.UnproxyableResolutionException;
 import javax.enterprise.inject.spi.BeanManager;
+import javax.servlet.ServletContext;
 
 import org.jboss.jsr299.tck.spi.Managers;
-import org.jboss.webbeans.CurrentManager;
 import org.jboss.webbeans.DefinitionException;
 import org.jboss.webbeans.DeploymentException;
+import org.jboss.webbeans.mock.MockServletContext;
+import org.jboss.webbeans.servlet.ServletHelper;
 
 public class ManagersImpl implements Managers
 {
+   
+   public static ServletContext SERVLET_CONTEXT = new MockServletContext("");
 
    public BeanManager getManager()
    {
-      return CurrentManager.rootManager();
+      return ServletHelper.getModuleBeanManager(SERVLET_CONTEXT);
    }
 
    public boolean isDefinitionError(org.jboss.testharness.api.DeploymentException deploymentException)

Modified: ri/trunk/spi/pom.xml
===================================================================
--- ri/trunk/spi/pom.xml	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/spi/pom.xml	2009-08-21 11:59:26 UTC (rev 3577)
@@ -54,14 +54,16 @@
       </dependency>
       
       <dependency>
-      	<groupId>javax.jms</groupId>
-      	<artifactId>jms</artifactId>
-    	</dependency>
-      
-      <dependency>
          <groupId>javax.validation</groupId>
          <artifactId>validation-api</artifactId>
+         <optional>true</optional>
       </dependency>
+      
+      <dependency>
+         <groupId>javax.faces</groupId>
+         <artifactId>jsf-api</artifactId>
+         <optional>true</optional>
+      </dependency>
 
    </dependencies>
 

Modified: ri/trunk/spi/src/main/java/org/jboss/webbeans/bootstrap/api/Environments.java
===================================================================
--- ri/trunk/spi/src/main/java/org/jboss/webbeans/bootstrap/api/Environments.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/spi/src/main/java/org/jboss/webbeans/bootstrap/api/Environments.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -23,9 +23,11 @@
 import org.jboss.webbeans.bootstrap.spi.Deployment;
 import org.jboss.webbeans.ejb.spi.EjbServices;
 import org.jboss.webbeans.persistence.spi.JpaServices;
+import org.jboss.webbeans.persistence.spi.helpers.JSFServices;
 import org.jboss.webbeans.resources.spi.ResourceLoader;
 import org.jboss.webbeans.resources.spi.ResourceServices;
 import org.jboss.webbeans.security.spi.SecurityServices;
+import org.jboss.webbeans.servlet.api.ServletServices;
 import org.jboss.webbeans.transaction.spi.TransactionServices;
 import org.jboss.webbeans.validation.spi.ValidationServices;
 
@@ -41,17 +43,17 @@
    /**
     * Java EE5 or Java EE6
     */
-   EE(Deployment.class, EjbServices.class, JpaServices.class, ResourceServices.class, TransactionServices.class, ResourceLoader.class, SecurityServices.class, ValidationServices.class),
+   EE(Deployment.class, EjbServices.class, JpaServices.class, ResourceServices.class, TransactionServices.class, ResourceLoader.class, SecurityServices.class, ValidationServices.class, ServletServices.class, JSFServices.class),
    
    /**
     * Java EE6 Web Profile
     */
-   EE_WEB_PROFILE(Deployment.class, EjbServices.class, JpaServices.class, ResourceServices.class, TransactionServices.class, ResourceLoader.class, SecurityServices.class, ValidationServices.class),
+   EE_WEB_PROFILE(Deployment.class, EjbServices.class, JpaServices.class, ResourceServices.class, TransactionServices.class, ResourceLoader.class, SecurityServices.class, ValidationServices.class, ServletServices.class, JSFServices.class),
    
    /**
     * Servlet container such as Tomcat
     */
-   SERVLET(Deployment.class, ResourceLoader.class),
+   SERVLET(Deployment.class, ResourceLoader.class, ServletServices.class),
    
    /**
     * Java SE

Modified: ri/trunk/spi/src/main/java/org/jboss/webbeans/bootstrap/spi/Deployment.java
===================================================================
--- ri/trunk/spi/src/main/java/org/jboss/webbeans/bootstrap/spi/Deployment.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/spi/src/main/java/org/jboss/webbeans/bootstrap/spi/Deployment.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -116,8 +116,9 @@
 {
 
    /**
-    * Get the bean deployment archives which are accessible by this deployment
-    * and adjacent to it in the deployment archive graph.
+    * Get the bean deployment archives which are part of this deployment
+    * and adjacent to it in the deployment archive graph. This should include
+    * all Java EE modules such as WARs, EJB jars and RARs.
     * 
     * Cycles in the accessible BeanDeploymentArchive graph are allowed. If a 
     * cycle is detected by Web Beans, it will be automatically removed by Web

Modified: ri/trunk/spi/src/test/java/org/jboss/webbeans/bootstrap/api/test/BootstrapTest.java
===================================================================
--- ri/trunk/spi/src/test/java/org/jboss/webbeans/bootstrap/api/test/BootstrapTest.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/spi/src/test/java/org/jboss/webbeans/bootstrap/api/test/BootstrapTest.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -6,9 +6,11 @@
 import org.jboss.webbeans.context.api.helpers.ConcurrentHashMapBeanStore;
 import org.jboss.webbeans.ejb.spi.EjbServices;
 import org.jboss.webbeans.persistence.spi.JpaServices;
+import org.jboss.webbeans.persistence.spi.helpers.JSFServices;
 import org.jboss.webbeans.resources.spi.ResourceLoader;
 import org.jboss.webbeans.resources.spi.ResourceServices;
 import org.jboss.webbeans.security.spi.SecurityServices;
+import org.jboss.webbeans.servlet.api.ServletServices;
 import org.jboss.webbeans.transaction.spi.TransactionServices;
 import org.jboss.webbeans.validation.spi.ValidationServices;
 import org.testng.annotations.Test;
@@ -39,6 +41,8 @@
       bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
       bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
       bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
       bootstrap.startContainer();
    }
    
@@ -55,6 +59,8 @@
       bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
       bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
       bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
       bootstrap.startContainer();
    }
    
@@ -71,6 +77,8 @@
       bootstrap.getServices().add(JpaServices.class, new MockJpaServices());
       bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
       bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
       bootstrap.startContainer();
    }
    
@@ -87,6 +95,8 @@
       bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
       bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
       bootstrap.getServices().add(JpaServices.class, new MockJpaServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
       bootstrap.startContainer();
    }
    
@@ -104,6 +114,8 @@
       bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
       bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
       bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
       bootstrap.startContainer();
    }
    
@@ -121,6 +133,8 @@
       bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
       bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
       bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
       bootstrap.startContainer();
    }
    
@@ -137,6 +151,8 @@
       bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
       bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
       bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
       bootstrap.startContainer();
    }
    
@@ -153,9 +169,47 @@
       bootstrap.getServices().add(TransactionServices.class, new MockTransactionServices());
       bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
       bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
       bootstrap.startContainer();
    }
    
+   @Test(expectedExceptions=IllegalStateException.class)
+   public void testMissingJSFServices()
+   {
+      AbstractBootstrap bootstrap = new MockBootstrap();
+      bootstrap.setEnvironment(Environments.EE);
+      bootstrap.getServices().add(ResourceLoader.class, new MockResourceLoader());
+      bootstrap.setApplicationContext(new ConcurrentHashMapBeanStore());
+      bootstrap.getServices().add(EjbServices.class, new MockEjbServices()); 
+      bootstrap.getServices().add(Deployment.class, new MockDeployment());
+      bootstrap.getServices().add(JpaServices.class, new MockJpaServices());
+      bootstrap.getServices().add(TransactionServices.class, new MockTransactionServices());
+      bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
+      bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
+      bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
+      bootstrap.startContainer();
+   }
+   
+   @Test(expectedExceptions=IllegalStateException.class)
+   public void testMissingServletServices()
+   {
+      AbstractBootstrap bootstrap = new MockBootstrap();
+      bootstrap.setEnvironment(Environments.EE);
+      bootstrap.getServices().add(ResourceLoader.class, new MockResourceLoader());
+      bootstrap.setApplicationContext(new ConcurrentHashMapBeanStore());
+      bootstrap.getServices().add(EjbServices.class, new MockEjbServices()); 
+      bootstrap.getServices().add(Deployment.class, new MockDeployment());
+      bootstrap.getServices().add(JpaServices.class, new MockJpaServices());
+      bootstrap.getServices().add(TransactionServices.class, new MockTransactionServices());
+      bootstrap.getServices().add(SecurityServices.class, new MockSecurityServices());
+      bootstrap.getServices().add(ValidationServices.class, new MockValidationServices());
+      bootstrap.getServices().add(ResourceServices.class, new MockResourceServices());
+      bootstrap.getServices().add(JSFServices.class, new MockJSFServices());
+      bootstrap.startContainer();
+   }
+   
    @Test
    public void testSEEnv()
    {
@@ -174,7 +228,8 @@
       bootstrap.setEnvironment(Environments.SERVLET);
       bootstrap.getServices().add(ResourceLoader.class, new MockResourceLoader());
       bootstrap.setApplicationContext(new ConcurrentHashMapBeanStore());
-      bootstrap.getServices().add(Deployment.class, new MockDeployment());      
+      bootstrap.getServices().add(Deployment.class, new MockDeployment());
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices());
       bootstrap.startContainer();
    }
    

Modified: ri/trunk/tests/pom.xml
===================================================================
--- ri/trunk/tests/pom.xml	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/pom.xml	2009-08-21 11:59:26 UTC (rev 3577)
@@ -95,6 +95,16 @@
          <artifactId>persistence-api</artifactId>
       </dependency>
       
+      <dependency>
+         <groupId>javax.validation</groupId>
+         <artifactId>validation-api</artifactId>
+      </dependency>
+      
+      <dependency>
+         <groupId>javax.faces</groupId>
+         <artifactId>jsf-api</artifactId>
+      </dependency>
+      
    </dependencies>
 
    <build>

Modified: ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockEELifecycle.java
===================================================================
--- ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockEELifecycle.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockEELifecycle.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -19,6 +19,7 @@
 import org.jboss.webbeans.bootstrap.api.Environments;
 import org.jboss.webbeans.ejb.spi.EjbServices;
 import org.jboss.webbeans.persistence.spi.JpaServices;
+import org.jboss.webbeans.persistence.spi.helpers.JSFServices;
 import org.jboss.webbeans.resources.spi.ResourceServices;
 import org.jboss.webbeans.security.spi.SecurityServices;
 import org.jboss.webbeans.transaction.spi.TransactionServices;
@@ -38,6 +39,7 @@
       getBootstrap().getServices().add(ResourceServices.class, new MockResourceServices());
       getBootstrap().getServices().add(SecurityServices.class, new MockSecurityServices());
       getBootstrap().getServices().add(ValidationServices.class, new MockValidationServices());
+      getBootstrap().getServices().add(JSFServices.class, new MockJSFServices());
       getBootstrap().setEnvironment(Environments.EE);
    }
    

Modified: ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockServletLifecycle.java
===================================================================
--- ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockServletLifecycle.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockServletLifecycle.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -7,6 +7,7 @@
 import org.jboss.webbeans.context.api.BeanStore;
 import org.jboss.webbeans.context.api.helpers.ConcurrentHashMapBeanStore;
 import org.jboss.webbeans.resources.spi.ResourceLoader;
+import org.jboss.webbeans.servlet.api.ServletServices;
 
 public class MockServletLifecycle extends ContextLifecycle
 {
@@ -29,6 +30,7 @@
       bootstrap.setEnvironment(Environments.SERVLET);
       bootstrap.getServices().add(ResourceLoader.class, MOCK_RESOURCE_LOADER);
       bootstrap.getServices().add(Deployment.class, deployment);
+      bootstrap.getServices().add(ServletServices.class, new MockServletServices(deployment.getArchive()));
       bootstrap.setApplicationContext(applicationBeanStore);
    }
    

Modified: ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/el/EL.java
===================================================================
--- ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/el/EL.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/el/EL.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -30,8 +30,8 @@
 import javax.el.ResourceBundleELResolver;
 import javax.el.VariableMapper;
 
+import org.jboss.webbeans.BeanManagerImpl;
 import org.jboss.webbeans.el.WebBeansELContextListener;
-import org.jboss.webbeans.el.WebBeansELResolver;
 import org.jboss.webbeans.el.WebBeansExpressionFactory;
 
 import com.sun.el.ExpressionFactoryImpl;
@@ -46,16 +46,15 @@
  */
 public class EL
 {
-   public static final ELResolver EL_RESOLVER = createELResolver();
    
    public static final ExpressionFactory EXPRESSION_FACTORY = new WebBeansExpressionFactory(new ExpressionFactoryImpl());
    
    public static final ELContextListener[] EL_CONTEXT_LISTENERS = { new WebBeansELContextListener() };
    
-   private static ELResolver createELResolver()
+   private static ELResolver createELResolver(BeanManagerImpl beanManagerImpl)
    {
       CompositeELResolver resolver = new CompositeELResolver();
-      resolver.add( new WebBeansELResolver() );
+      resolver.add( beanManagerImpl.getELResolver() );
       resolver.add( new MapELResolver() );
       resolver.add( new ListELResolver() );
       resolver.add( new ArrayELResolver() );
@@ -64,8 +63,8 @@
       return resolver;
    }
 
-   public static ELContext createELContext() {
-       return createELContext( EL_RESOLVER, new FunctionMapperImpl() );
+   public static ELContext createELContext(BeanManagerImpl beanManagerImpl) {
+       return createELContext(createELResolver(beanManagerImpl), new FunctionMapperImpl() );
    }
    
    public static ELContext createELContext(final ELResolver resolver, final FunctionMapper functionMapper)

Modified: ri/trunk/tests/src/main/java/org/jboss/webbeans/test/AbstractWebBeansTest.java
===================================================================
--- ri/trunk/tests/src/main/java/org/jboss/webbeans/test/AbstractWebBeansTest.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/main/java/org/jboss/webbeans/test/AbstractWebBeansTest.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -16,11 +16,13 @@
 import javax.el.ELContext;
 import javax.enterprise.inject.TypeLiteral;
 import javax.enterprise.inject.spi.Bean;
+import javax.servlet.ServletContext;
 
 import org.jboss.testharness.AbstractTest;
 import org.jboss.webbeans.BeanManagerImpl;
-import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.mock.MockServletContext;
 import org.jboss.webbeans.mock.el.EL;
+import org.jboss.webbeans.servlet.ServletHelper;
 import org.jboss.webbeans.util.collections.EnumerationList;
 import org.testng.ITestContext;
 import org.testng.annotations.BeforeSuite;
@@ -28,6 +30,8 @@
 public abstract class AbstractWebBeansTest extends AbstractTest
 {
 
+   public static ServletContext SERVLET_CONTEXT = new MockServletContext("");
+   
    protected static final int BUILT_IN_BEANS = 3;
 
    public static boolean visited = false;
@@ -40,6 +44,7 @@
       {
          getCurrentConfiguration().getExtraPackages().add(AbstractWebBeansTest.class.getPackage().getName());
          getCurrentConfiguration().getExtraPackages().add(EL.class.getPackage().getName());
+         getCurrentConfiguration().getExtraPackages().add(MockServletContext.class.getPackage().getName());
       }
       super.beforeSuite(context);
    }
@@ -105,7 +110,7 @@
 
    protected BeanManagerImpl getCurrentManager()
    {
-      return CurrentManager.rootManager();
+      return ServletHelper.getModuleBeanManager(SERVLET_CONTEXT);
    }
 
    public boolean isExceptionInHierarchy(Throwable exception, Class<? extends Throwable> expectedException )
@@ -164,7 +169,7 @@
    @SuppressWarnings("unchecked")
    public <T> T evaluateValueExpression(String expression, Class<T> expectedType)
    {
-      ELContext elContext = EL.createELContext();
+      ELContext elContext = EL.createELContext(getCurrentManager().getCurrent());
       return (T) EL.EXPRESSION_FACTORY.createValueExpression(elContext, expression, expectedType).getValue(elContext);
    }
 

Deleted: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Animal.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Animal.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Animal.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -1,6 +0,0 @@
-package org.jboss.webbeans.test.unit.bootstrap;
-
-interface Animal
-{
-
-}

Modified: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/BootstrapTest.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/BootstrapTest.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/BootstrapTest.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -1,13 +1,20 @@
 package org.jboss.webbeans.test.unit.bootstrap;
 
 import org.jboss.testharness.impl.packaging.Artifact;
+import org.jboss.testharness.impl.packaging.IntegrationTest;
 import org.jboss.testharness.impl.packaging.Packaging;
 import org.jboss.testharness.impl.packaging.PackagingType;
+import org.jboss.testharness.impl.packaging.Resource;
+import org.jboss.testharness.impl.packaging.Resources;
 import org.jboss.webbeans.test.AbstractWebBeansTest;
 import org.testng.annotations.Test;
 
 @Artifact
 @Packaging(PackagingType.EAR)
+ at IntegrationTest
+ at Resources({
+   @Resource(source="javax.enterprise.inject.spi.Extension", destination="META-INF/services/javax.enterprise.inject.spi.Extension")
+})
 public class BootstrapTest extends AbstractWebBeansTest
 {
    
@@ -17,16 +24,4 @@
       assert InitializedObserver.observered;
    }
    
-   @Test(groups="bootstrap")
-   public void testRequestContextActiveDuringInitializtionEvent()
-   {
-      assert InitializedObserverWhichUsesRequestContext.name == new Tuna().getName();
-   }
-   
-   @Test(groups={"bootstrap"})
-   public void testApplicationContextActiveDuringInitializtionEvent()
-   {
-      assert Cow.mooed;
-   }
-   
 }

Deleted: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Cow.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Cow.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Cow.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -1,16 +0,0 @@
-package org.jboss.webbeans.test.unit.bootstrap;
-
-import javax.enterprise.context.ApplicationScoped;
-
- at ApplicationScoped
-class Cow implements Animal
-{
-
-   public static boolean mooed = false;
-   
-   public void moo()
-   {
-      mooed = true;
-   }
-   
-}

Modified: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserver.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserver.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserver.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -2,9 +2,10 @@
 
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
 
 
-class InitializedObserver
+public class InitializedObserver implements Extension
 {
    
    public static boolean observered;

Deleted: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserverWhichUsesApplicationContext.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserverWhichUsesApplicationContext.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserverWhichUsesApplicationContext.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -1,17 +0,0 @@
-package org.jboss.webbeans.test.unit.bootstrap;
-
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Current;
-import javax.enterprise.inject.spi.AfterBeanDiscovery;
-
-class InitializedObserverWhichUsesApplicationContext
-{
-   
-   @Current Cow cow;
-   
-   public void observeInitialized(@Observes AfterBeanDiscovery event)
-   {
-      cow.moo();
-   }
-   
-}

Deleted: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserverWhichUsesRequestContext.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserverWhichUsesRequestContext.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InitializedObserverWhichUsesRequestContext.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -1,19 +0,0 @@
-package org.jboss.webbeans.test.unit.bootstrap;
-
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Current;
-import javax.enterprise.inject.spi.AfterBeanDiscovery;
-
-class InitializedObserverWhichUsesRequestContext
-{
-   
-   public static String name;
-   
-   @Current Tuna tuna;
-   
-   public void observeInitialized(@Observes AfterBeanDiscovery event)
-   {
-      name = tuna.getName();
-   }
-   
-}

Deleted: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Tuna.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Tuna.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/Tuna.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -1,14 +0,0 @@
-package org.jboss.webbeans.test.unit.bootstrap;
-
-import javax.enterprise.context.RequestScoped;
-
- at RequestScoped
-class Tuna
-{
-   
-   public String getName()
-   {
-      return "Ophir";
-   }
-
-}

Modified: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/definition/ELResolverTest.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/definition/ELResolverTest.java	2009-08-21 11:58:40 UTC (rev 3576)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/definition/ELResolverTest.java	2009-08-21 11:59:26 UTC (rev 3577)
@@ -31,7 +31,7 @@
    @Test
    public void testResolveBeanPropertyOfNamedBean()
    {
-      ELContext elContext = EL.createELContext();
+      ELContext elContext = EL.createELContext(getCurrentManager());
       ExpressionFactory exprFactory = EL.EXPRESSION_FACTORY;
       
       assertEquals(exprFactory.createValueExpression(elContext, "#{beer.style}", String.class).getValue(elContext), "Belgium Strong Dark Ale");
@@ -48,7 +48,7 @@
    @Test
    public void testResolveBeanPropertyOfProducerBean()
    {
-      ELContext elContext = EL.createELContext();
+      ELContext elContext = EL.createELContext(getCurrentManager());
       ExpressionFactory exprFactory = EL.EXPRESSION_FACTORY;
       
       assertEquals(exprFactory.createValueExpression(elContext, "#{beerOnTap.style}", String.class).getValue(elContext), "IPA");




More information about the weld-commits mailing list