You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2009/12/09 22:28:57 UTC

svn commit: r888984 - /myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java

Author: werpu
Date: Wed Dec  9 21:28:56 2009
New Revision: 888984

URL: http://svn.apache.org/viewvc?rev=888984&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-28
added a todo for the pending work, we still have a concurrency issue
in the bean reloading

Modified:
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java?rev=888984&r1=888983&r2=888984&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java Wed Dec  9 21:28:56 2009
@@ -253,53 +253,56 @@
 
 
     protected void refreshAllManagedBeans() {
+        //TODO set a mutex and a double check here to avoid
+        //double dropping the entire managed beans
+        //in case of multiuser access
 
-            if (FacesContext.getCurrentInstance() == null) {
-                return;//no npe allowed
+        if (FacesContext.getCurrentInstance() == null) {
+            return;//no npe allowed
+        }
+        Set<String> tainted = new HashSet<String>();
+        for (Map.Entry<String, ReloadingMetadata> it : WeavingContext.getFileChangedDaemon().getClassMap().entrySet()) {
+            if (it.getValue().getScriptingEngine() == getScriptingEngine() && it.getValue().isTainted()) {
+                tainted.add(it.getKey());
             }
-            Set<String> tainted = new HashSet<String>();
-            for (Map.Entry<String, ReloadingMetadata> it : WeavingContext.getFileChangedDaemon().getClassMap().entrySet()) {
-                if (it.getValue().getScriptingEngine() == getScriptingEngine() && it.getValue().isTainted()) {
-                    tainted.add(it.getKey());
-                }
+        }
+        if (tainted.size() > 0) {
+            boolean managedBeanTainted = false;
+            //We now have to check if the tainted classes belong to the managed beans
+            Set<String> managedBeanClasses = new HashSet<String>();
+            Map<String, ManagedBean> mbeans = RuntimeConfig.getCurrentInstance(FacesContext.getCurrentInstance().getExternalContext()).getManagedBeans();
+            for (Map.Entry<String, ManagedBean> entry : mbeans.entrySet()) {
+                managedBeanClasses.add(entry.getValue().getManagedBeanClassName());
             }
-            if (tainted.size() > 0) {
-                boolean managedBeanTainted = false;
-                //We now have to check if the tainted classes belong to the managed beans
-                Set<String> managedBeanClasses = new HashSet<String>();
-                Map<String, ManagedBean> mbeans = RuntimeConfig.getCurrentInstance(FacesContext.getCurrentInstance().getExternalContext()).getManagedBeans();
-                for (Map.Entry<String, ManagedBean> entry : mbeans.entrySet()) {
-                    managedBeanClasses.add(entry.getValue().getManagedBeanClassName());
-                }
-                for (String taintedClass : tainted) {
-                    if (managedBeanClasses.contains(taintedClass)) {
-                        managedBeanTainted = true;
-                        break;
-                    }
+            for (String taintedClass : tainted) {
+                if (managedBeanClasses.contains(taintedClass)) {
+                    managedBeanTainted = true;
+                    break;
                 }
+            }
 
-                markSessionBeanRefreshRecommended();
+            markSessionBeanRefreshRecommended();
 
-                getLog().info("[EXT-SCRIPTING] Tainting all beans to avoid classcast exceptions");
-                if (managedBeanTainted) {
-                    for (Map.Entry<String, ManagedBean> entry : mbeans.entrySet()) {
-                        Class managedBeanClass = entry.getValue().getManagedBeanClass();
-                        if (WeavingContext.isDynamic(managedBeanClass)) {
-                            //managed bean class found we drop the class from our session
-                            removeBeanReferences(entry.getValue());
-                        }
-                        //one bean tainted we have to taint all dynamic beans otherwise we will get classcast
-                        //exceptions
-                        getLog().info("[EXT-SCRIPTING] Tainting ");
-                        ReloadingMetadata metaData = WeavingContext.getFileChangedDaemon().getClassMap().get(managedBeanClass.getName());
-                        if (metaData != null) {
-                            metaData.setTainted(true);
-                        }
+            getLog().info("[EXT-SCRIPTING] Tainting all beans to avoid classcast exceptions");
+            if (managedBeanTainted) {
+                for (Map.Entry<String, ManagedBean> entry : mbeans.entrySet()) {
+                    Class managedBeanClass = entry.getValue().getManagedBeanClass();
+                    if (WeavingContext.isDynamic(managedBeanClass)) {
+                        //managed bean class found we drop the class from our session
+                        removeBeanReferences(entry.getValue());
+                    }
+                    //one bean tainted we have to taint all dynamic beans otherwise we will get classcast
+                    //exceptions
+                    getLog().info("[EXT-SCRIPTING] Tainting ");
+                    ReloadingMetadata metaData = WeavingContext.getFileChangedDaemon().getClassMap().get(managedBeanClass.getName());
+                    if (metaData != null) {
+                        metaData.setTainted(true);
                     }
-
                 }
+
             }
-        
+        }
+
     }
 
     private void updateBeanRefreshTime() {
@@ -324,26 +327,26 @@
 
         Map<String, ManagedBean> mbeans = RuntimeConfig.getCurrentInstance(FacesContext.getCurrentInstance().getExternalContext()).getManagedBeans();
 
-            for (Map.Entry<String, ManagedBean> entry : mbeans.entrySet()) {
+        for (Map.Entry<String, ManagedBean> entry : mbeans.entrySet()) {
 
-                Class managedBeanClass = entry.getValue().getManagedBeanClass();
-                if (WeavingContext.isDynamic(managedBeanClass)) {
-                    String scope = entry.getValue().getManagedBeanScope();
-
-                    if (scope != null && !scope.equalsIgnoreCase(SCOPE_APPLICATION)) {
-                        if (scope.equalsIgnoreCase(SCOPE_REQUEST)) {
-                            //request, nothing has to be done here
-                            return;
-                        }
-                        if (scope.equalsIgnoreCase(SCOPE_SESSION)) {
-                            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(entry.getValue().getManagedBeanName());
-                        } else {
-                            removeCustomScopedBean(entry.getValue());
-                        }
+            Class managedBeanClass = entry.getValue().getManagedBeanClass();
+            if (WeavingContext.isDynamic(managedBeanClass)) {
+                String scope = entry.getValue().getManagedBeanScope();
+
+                if (scope != null && !scope.equalsIgnoreCase(SCOPE_APPLICATION)) {
+                    if (scope.equalsIgnoreCase(SCOPE_REQUEST)) {
+                        //request, nothing has to be done here
+                        return;
+                    }
+                    if (scope.equalsIgnoreCase(SCOPE_SESSION)) {
+                        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(entry.getValue().getManagedBeanName());
+                    } else {
+                        removeCustomScopedBean(entry.getValue());
                     }
-
                 }
+
             }
+        }
 
         updateBeanRefreshTime();
     }