You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2010/02/03 21:41:51 UTC

svn commit: r906232 - in /geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces: ApplicationIndexedLifecycleProviderFactory.java LifecycleProviderFactoryGBean.java LifecycleProviderGBean.java

Author: gawor
Date: Wed Feb  3 20:41:51 2010
New Revision: 906232

URL: http://svn.apache.org/viewvc?rev=906232&view=rev
Log:
GERONIMO-4996: Lookup LifecycleProvider based on Bundle instead of ClassLoader. ClassLoaders even for the same Bundle might be different objects.

Modified:
    geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/ApplicationIndexedLifecycleProviderFactory.java
    geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderFactoryGBean.java
    geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderGBean.java

Modified: geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/ApplicationIndexedLifecycleProviderFactory.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/ApplicationIndexedLifecycleProviderFactory.java?rev=906232&r1=906231&r2=906232&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/ApplicationIndexedLifecycleProviderFactory.java (original)
+++ geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/ApplicationIndexedLifecycleProviderFactory.java Wed Feb  3 20:41:51 2010
@@ -17,7 +17,6 @@
  * under the License.
  */
 
-
 package org.apache.geronimo.myfaces;
 
 import java.util.Map;
@@ -25,25 +24,35 @@
 
 import javax.faces.context.ExternalContext;
 
+import org.apache.geronimo.kernel.osgi.BundleUtils;
 import org.apache.myfaces.config.annotation.LifecycleProvider;
 import org.apache.myfaces.config.annotation.LifecycleProviderFactory;
+import org.osgi.framework.Bundle;
 
 /**
  * @version $Rev$ $Date$
  */
 public class ApplicationIndexedLifecycleProviderFactory extends LifecycleProviderFactory {
 
-    private final Map<ClassLoader, LifecycleProvider> providers = new ConcurrentHashMap<ClassLoader, LifecycleProvider>();
+    private final Map<Bundle, LifecycleProvider> providers = new ConcurrentHashMap<Bundle, LifecycleProvider>();
 
     public LifecycleProvider getLifecycleProvider(ExternalContext externalContext) {
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        LifecycleProvider provider = providers.get(cl);
+        Bundle bundle = getBundle();
+        LifecycleProvider provider = providers.get(bundle);
         if (provider == null) {
-            throw new IllegalStateException("No LifecycleProvider registered for application classloader: " + cl);
+            throw new IllegalStateException("No LifecycleProvider registered for application bundle: " + bundle);
         }
         return provider;
     }
 
+    private Bundle getBundle() {
+        Bundle bundle = BundleUtils.getContextBundle();
+        if (bundle == null) {
+            throw new IllegalStateException("Unable to get Bundle object associated with the context classloader");
+        }
+        return bundle;
+    }
+    
     /**
      * Register a lifecycle provider for an application classloader.  This method is intended to be called
      * by the container in which MyFaces is running, once for each application, during application startup before
@@ -52,12 +61,12 @@
      * @param cl       application classloader, used to index LifecycleProviders
      * @param provider LifecycleProvider for the application.
      */
-    public void registerLifecycleProvider(ClassLoader cl, LifecycleProvider provider) {
-        providers.put(cl, provider);
+    public void registerLifecycleProvider(Bundle bundle, LifecycleProvider provider) {
+        providers.put(bundle, provider);
     }
 
-    public void unregisterLifecycleProvider(ClassLoader cl) {
-        providers.remove(cl);
+    public void unregisterLifecycleProvider(Bundle bundle) {
+        providers.remove(bundle);
     }
 
     public void release() {

Modified: geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderFactoryGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderFactoryGBean.java?rev=906232&r1=906231&r2=906232&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderFactoryGBean.java (original)
+++ geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderFactoryGBean.java Wed Feb  3 20:41:51 2010
@@ -17,13 +17,11 @@
  * under the License.
  */
 
-
 package org.apache.geronimo.myfaces;
 
 import org.apache.myfaces.config.annotation.LifecycleProviderFactory;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 
 /**
  * @version $Rev$ $Date$

Modified: geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderGBean.java?rev=906232&r1=906231&r2=906232&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderGBean.java (original)
+++ geronimo/server/trunk/plugins/myfaces/geronimo-myfaces/src/main/java/org/apache/geronimo/myfaces/LifecycleProviderGBean.java Wed Feb  3 20:41:51 2010
@@ -17,25 +17,26 @@
  * under the License.
  */
 
-
 package org.apache.geronimo.myfaces;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.Map;
 
-import javax.naming.NamingException;
 import javax.naming.Context;
+import javax.naming.NamingException;
 
-import org.apache.geronimo.gbean.annotation.*;
-import org.apache.myfaces.config.annotation.LifecycleProvider;
+import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.gbean.annotation.GBean;
+import org.apache.geronimo.gbean.annotation.ParamAttribute;
+import org.apache.geronimo.gbean.annotation.ParamReference;
+import org.apache.geronimo.gbean.annotation.ParamSpecial;
+import org.apache.geronimo.gbean.annotation.SpecialAttributeType;
 import org.apache.geronimo.j2ee.annotation.Holder;
 import org.apache.geronimo.j2ee.annotation.LifecycleMethod;
 import org.apache.geronimo.j2ee.jndi.ContextSource;
-import org.apache.geronimo.gbean.GBeanLifecycle;
-import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.kernel.Kernel;
-import org.apache.geronimo.naming.enc.EnterpriseNamingContext;
+import org.apache.myfaces.config.annotation.LifecycleProvider;
+import org.osgi.framework.Bundle;
 
 /**
  * @version $Rev$ $Date$
@@ -47,17 +48,18 @@
     private final Context context;
     private final ApplicationIndexedLifecycleProviderFactory factory;
     private final ClassLoader classLoader;
-
-
+    private final Bundle bundle;
+    
     public LifecycleProviderGBean(@ParamAttribute(name="holder") Holder holder,
                                   @ParamReference(name="ContextSource", namingType = "Context") ContextSource contextSource,
                                   @ParamReference(name="LifecycleProviderFactory") LifecycleProviderFactorySource factory,
                                   @ParamSpecial(type = SpecialAttributeType.kernel)Kernel kernel,
+                                  @ParamSpecial(type = SpecialAttributeType.bundle)Bundle bundle,
                                   @ParamSpecial(type=SpecialAttributeType.classLoader)ClassLoader classLoader) throws NamingException {
         this.holder = holder;
-//        GeronimoUserTransaction userTransaction = new GeronimoUserTransaction(transactionManager);
         context = contextSource.getContext();
         this.factory = factory.getLifecycleProviderFactory();
+        this.bundle = bundle;
         this.classLoader = classLoader;
     }
 
@@ -79,11 +81,11 @@
     }
 
     public void doStart() {
-        factory.registerLifecycleProvider(classLoader, this);
+        factory.registerLifecycleProvider(bundle, this);
     }
 
     public void doStop() {
-        factory.unregisterLifecycleProvider(classLoader);
+        factory.unregisterLifecycleProvider(bundle);
     }
 
     public void doFail() {