You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2010/11/05 01:52:45 UTC

svn commit: r1031378 - in /myfaces/extensions/cdi/trunk: core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/ core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/ core/impl/src/m...

Author: gpetracek
Date: Fri Nov  5 00:52:44 2010
New Revision: 1031378

URL: http://svn.apache.org/viewvc?rev=1031378&view=rev
Log:
EXTCDI-1, EXTCDI-2 and EXTCDI-3 first draft of BeanEntryFactory and cleanup

Added:
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/BeanEntryFactory.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/ConversationBeanEntry.java
      - copied, changed from r1030384, myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/ConversationBeanEntry.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultBeanEntryFactory.java
Removed:
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/ConversationBeanEntry.java
Modified:
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractGroupedConversationContext.java
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/ClassDeactivation.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/GroupedConversationContext.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestCache.java

Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractGroupedConversationContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractGroupedConversationContext.java?rev=1031378&r1=1031377&r2=1031378&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractGroupedConversationContext.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractGroupedConversationContext.java Fri Nov  5 00:52:44 2010
@@ -21,6 +21,7 @@ package org.apache.myfaces.extensions.cd
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationConfig;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntryFactory;
 
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
@@ -81,8 +82,11 @@ public abstract class AbstractGroupedCon
 
         WindowContextManager windowContextManager = resolveWindowContextManager();
 
-        BeanEntry<T> beanEntry = new ConversationBeanEntry<T>(creationalContext, bean, this.beanManager,
-                this.scopeBeanEventEnable, this.accessBeanEventEnable, this.unscopeBeanEventEnable);
+        BeanEntry<T> beanEntry = resolveBeanEntryFactory().createBeanEntry(bean,
+                                                                           creationalContext,
+                                                                           this.scopeBeanEventEnable,
+                                                                           this.accessBeanEventEnable,
+                                                                           this.unscopeBeanEventEnable);
 
         scopeBeanEntry(windowContextManager, beanEntry);
 
@@ -100,12 +104,18 @@ public abstract class AbstractGroupedCon
     }
 
     /**
-     * @return an instance of a custom (the default)
+     * @return an instance of a custom or the default
      * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager}
      */
     protected abstract WindowContextManager resolveWindowContextManager();
 
     /**
+     * @return an instance of a custom or the default
+     * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntryFactory}
+     */
+    protected abstract BeanEntryFactory resolveBeanEntryFactory();
+
+    /**
      * @param windowContextManager the current
      * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager}
      * @param beanDescriptor      descriptor of the requested bean

Added: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/BeanEntryFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/BeanEntryFactory.java?rev=1031378&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/BeanEntryFactory.java (added)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/BeanEntryFactory.java Fri Nov  5 00:52:44 2010
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.context.spi.CreationalContext;
+
+/**
+ * @author Gerhard Petracek
+ */
+public interface BeanEntryFactory
+{
+    <T> BeanEntry<T> createBeanEntry(Bean<T> bean,
+                                     CreationalContext<T> creationalContext,
+                                     boolean scopeBeanEventEnabled,
+                                     boolean accessBeanEventEnabled,
+                                     boolean unscopeBeanEventEnabled);
+}

Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/ClassDeactivation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/ClassDeactivation.java?rev=1031378&r1=1031377&r2=1031378&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/ClassDeactivation.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/utils/ClassDeactivation.java Fri Nov  5 00:52:44 2010
@@ -57,7 +57,7 @@ public class ClassDeactivation
 
     private static ClassDeactivator getClassDeactivator()
     {
-        ClassDeactivator classDeactivator = null;
+        ClassDeactivator classDeactivator;
 
         // check system property
         classDeactivator = getClassDeactivatorFromEnvironment();

Copied: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/ConversationBeanEntry.java (from r1030384, myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/ConversationBeanEntry.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/ConversationBeanEntry.java?p2=myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/ConversationBeanEntry.java&p1=myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/ConversationBeanEntry.java&r1=1030384&r2=1031378&rev=1031378&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/ConversationBeanEntry.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/ConversationBeanEntry.java Fri Nov  5 00:52:44 2010
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.extensions.cdi.core.impl.scope.conversation;
+package org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation;
 
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.event.AccessBeanEvent;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.event.ScopeBeanEvent;

Added: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultBeanEntryFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultBeanEntryFactory.java?rev=1031378&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultBeanEntryFactory.java (added)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/DefaultBeanEntryFactory.java Fri Nov  5 00:52:44 2010
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation;
+
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntryFactory;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+/**
+ * @author Gerhard Petracek
+ */
+@ApplicationScoped
+class DefaultBeanEntryFactory implements BeanEntryFactory
+{
+    @Inject
+    private BeanManager beanManager;
+    
+    public <T> BeanEntry<T> createBeanEntry(Bean<T> bean,
+                                            CreationalContext<T> creationalContext,
+                                            boolean scopeBeanEventEnabled,
+                                            boolean accessBeanEventEnabled,
+                                            boolean unscopeBeanEventEnabled)
+    {
+        return new ConversationBeanEntry<T>(creationalContext,
+                                            bean,
+                                            this.beanManager,
+                                            scopeBeanEventEnabled,
+                                            accessBeanEventEnabled,
+                                            unscopeBeanEventEnabled);
+    }
+}

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/GroupedConversationContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/GroupedConversationContext.java?rev=1031378&r1=1031377&r2=1031378&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/GroupedConversationContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/GroupedConversationContext.java Fri Nov  5 00:52:44 2010
@@ -18,13 +18,13 @@
  */
 package org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation;
 
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationConfig;
 import org.apache.myfaces.extensions.cdi.core.api.resolver.ConfigResolver;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.AbstractGroupedConversationContext;
 import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntryFactory;
 import static org.apache.myfaces.extensions.cdi.core.impl.utils.CodiUtils.getOrCreateScopedInstanceOfBeanByClass;
 import org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils;
 import org.apache.myfaces.extensions.cdi.jsf.impl.util.RequestCache;
@@ -67,6 +67,11 @@ class GroupedConversationContext extends
         return RequestCache.getWindowContextManager();
     }
 
+    protected BeanEntryFactory resolveBeanEntryFactory()
+    {
+        return RequestCache.getBeanEntryFactory();
+    }
+
     /**
      * @param windowContextManager the current
      * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager}
@@ -98,9 +103,10 @@ class GroupedConversationContext extends
         }
 
         Bean<?> bean = beanEntry.getBean();
-        Conversation foundConversation = getConversation((EditableWindowContextManager)windowContextManager, bean);
+        EditableConversation foundConversation =
+                getConversation((EditableWindowContextManager)windowContextManager, bean);
 
-        ((EditableConversation) foundConversation).addBean(beanEntry);
+        foundConversation.addBean(beanEntry);
     }
 
     protected ConversationConfig getConversationConfig()
@@ -121,4 +127,4 @@ class GroupedConversationContext extends
         return editableWindowContext
                 .getConversation(conversationGroup, qualifiers.toArray(new Annotation[qualifiers.size()]));
     }
-}
\ No newline at end of file
+}

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java?rev=1031378&r1=1031377&r2=1031378&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java Fri Nov  5 00:52:44 2010
@@ -27,6 +27,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationScoped;
 import org.apache.myfaces.extensions.cdi.core.api.tools.DefaultAnnotation;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntryFactory;
 import org.apache.myfaces.extensions.cdi.core.impl.utils.CodiUtils;
 import org.apache.myfaces.extensions.cdi.jsf.api.Jsf;
 import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.WindowContextIdHolderComponent;
@@ -95,6 +96,25 @@ public class ConversationUtils
         return (Bean<WindowContextManager>) conversationManagerBeans.iterator().next();
     }
 
+    public static Bean<BeanEntryFactory> resolveBeanEntryFactoryBean()
+    {
+        BeanManager beanManager = BeanManagerProvider.getInstance().getBeanManager();
+
+        Set<?> beanEntryFactoryBeans = beanManager.getBeans(BeanEntryFactory.class, JSF_QUALIFIER);
+
+        if (beanEntryFactoryBeans.isEmpty())
+        {
+            beanEntryFactoryBeans = getDefaultBeanEntryFactory(beanManager);
+        }
+
+        if (beanEntryFactoryBeans.size() != 1)
+        {
+            throw new IllegalStateException(beanEntryFactoryBeans.size() + " BeanEntry-Factories were found");
+        }
+        //noinspection unchecked
+        return (Bean<BeanEntryFactory>) beanEntryFactoryBeans.iterator().next();
+    }
+
     public static Class getConversationGroup(Bean<?> bean)
     {
         Class<? extends Annotation> scopeType = bean.getScope();
@@ -139,6 +159,16 @@ public class ConversationUtils
         return beanManager.getBeans(WindowContextManager.class);
     }
 
+    /**
+     * @param beanManager current {@link javax.enterprise.inject.spi.BeanManager}
+     * @return the descriptor of the default
+     * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntryFactory}
+     */
+    private static Set<Bean<?>> getDefaultBeanEntryFactory(BeanManager beanManager)
+    {
+        return beanManager.getBeans(BeanEntryFactory.class);
+    }
+
     //TODO
     public static String resolveWindowContextId(WindowHandler windowHandler,
                                                 boolean requestParameterSupported,

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestCache.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestCache.java?rev=1031378&r1=1031377&r2=1031378&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestCache.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/RequestCache.java Fri Nov  5 00:52:44 2010
@@ -19,10 +19,12 @@
 package org.apache.myfaces.extensions.cdi.jsf.impl.util;
 
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntryFactory;
 import org.apache.myfaces.extensions.cdi.core.impl.utils.CodiUtils;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
 import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.ConversationKey;
 import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.EditableConversation;
+import static org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils.*;
 
 import javax.enterprise.inject.spi.Bean;
 import java.util.Map;
@@ -38,8 +40,8 @@ public class RequestCache
     private static ThreadLocal<WindowContextManager> windowContextManagerCache
             = new ThreadLocal<WindowContextManager>();
 
-    private static ThreadLocal<Bean<WindowContextManager>> windowContextManagerBeanCache
-            = new ThreadLocal<Bean<WindowContextManager>>();
+    private static ThreadLocal<BeanEntryFactory> beanEntryFactoryCache
+            = new ThreadLocal<BeanEntryFactory>();
 
     private static ThreadLocal<Map<ConversationKey, EditableConversation>> conversationCache
             = new ThreadLocal<Map<ConversationKey, EditableConversation>>();
@@ -49,8 +51,8 @@ public class RequestCache
         windowContextManagerCache.set(null);
         windowContextManagerCache.remove();
 
-        windowContextManagerBeanCache.set(null);
-        windowContextManagerBeanCache.remove();
+        beanEntryFactoryCache.set(null);
+        beanEntryFactoryCache.remove();
 
         windowContextCache.set(null);
         windowContextCache.remove();
@@ -70,19 +72,9 @@ public class RequestCache
 
         if(windowContextManager == null)
         {
-            return resolveWindowContextManager(resolveWindowContextManagerBean());
+            return resolveWindowContextManager(resolveConversationManagerBean());
         }
 
-        /* TODO remove it after tests
-        if(windowContextManager == null)
-        {
-            windowContextManager = CodiUtils.getOrCreateScopedInstanceOfBeanByName(
-                WindowContextManager.WINDOW_CONTEXT_MANAGER_BEAN_NAME, WindowContextManager.class);
-
-            windowContextManagerCache.set(windowContextManager);
-        }
-        */
-
         return windowContextManager;
     }
 
@@ -99,17 +91,29 @@ public class RequestCache
         return windowContextManager;
     }
 
-    private static Bean<WindowContextManager> resolveWindowContextManagerBean()
+    public static BeanEntryFactory getBeanEntryFactory()
+    {
+        BeanEntryFactory beanEntryFactory = beanEntryFactoryCache.get();
+
+        if(beanEntryFactory == null)
+        {
+            return resolveBeanEntryFactory(resolveBeanEntryFactoryBean());
+        }
+
+        return beanEntryFactory;
+    }
+
+    private static BeanEntryFactory resolveBeanEntryFactory(Bean<BeanEntryFactory> beanEntryFactoryBean)
     {
-        Bean<WindowContextManager> windowContextManagerBean = windowContextManagerBeanCache.get();
+        BeanEntryFactory beanEntryFactory = beanEntryFactoryCache.get();
 
-        if(windowContextManagerBean == null)
+        if(beanEntryFactory == null)
         {
-            windowContextManagerBean = ConversationUtils.resolveConversationManagerBean();
-            windowContextManagerBeanCache.set(windowContextManagerBean);
+            beanEntryFactory = CodiUtils.getOrCreateScopedInstanceOfBean(beanEntryFactoryBean);
+            beanEntryFactoryCache.set(beanEntryFactory);
         }
 
-        return windowContextManagerBean;
+        return beanEntryFactory;
     }
 
     public static WindowContext getCurrentWindowContext()