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();
}