On 05/17/2012 02:25 AM, jaco...@apache.org wrote:
Author: jacopoc
Date: Thu May 17 07:25:13 2012
New Revision: 1339504

URL: http://svn.apache.org/viewvc?rev=1339504&view=rev
Log:
Based on suggestion from Daniel Dekany (committer/maintainer of the 
Freemarker's project):

"Since BeansWrapper.getDefaultInstance() returns an instance that is
  shared in the scope of the class-loader that defined the FreeMarker
  classes, and since possibly multiple independently developed
  components in your system use FreeMarker and thus getDefaultInstance
  (and you may don't even know about it), and since the returned
  BeanWrapper can be configured (not read-only), you never know how the
  returned BeanWrapper is configured. So you add a 3rd party component,
  and if you are unlucky, suddenly your other component is broken.
  As of creating new BeansWrapper, be sure you create it only once
  during the application life-cycle and then reuse the same instance, or
  else it will have to rebuild the class introspection cache again and
  again."

  I have replaced the usage of the static instance of the BeansWrapper with a 
newly created object.

You didn't go far enough. There are enough other getDefaultInstance() calls in our code that need to be fixed.

I'll correct those, because I also need to have a central location to properly configure the BeansWrapper, based on the ftl breakage.


Modified:
     
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java
     ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java

Modified: 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java?rev=1339504&r1=1339503&r2=1339504&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java
 (original)
+++ 
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java
 Thu May 17 07:25:13 2012
@@ -76,8 +76,7 @@ public class FreeMarkerWorker {

      // use soft references for this so that things from Content records don't 
kill all of our memory, or maybe not for performance reasons... hmmm, leave to 
config file...
      public static UtilCache<String, Template>  cachedTemplates = 
UtilCache.createUtilCache("template.ftl.general", 0, 0, false);
-    protected static BeansWrapper defaultOfbizWrapper = 
BeansWrapper.getDefaultInstance();
-    protected static Configuration defaultOfbizConfig = 
makeConfiguration(defaultOfbizWrapper);
+    protected static Configuration defaultOfbizConfig = makeConfiguration(new 
BeansWrapper());

      public static Configuration makeConfiguration(BeansWrapper wrapper) {
          Configuration newConfig = new Configuration();

Modified: 
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java?rev=1339504&r1=1339503&r2=1339504&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java 
(original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java 
Thu May 17 07:25:13 2012
@@ -58,8 +58,7 @@ public class HtmlWidget extends ModelScr
      public static final String module = HtmlWidget.class.getName();

      public static UtilCache<String, Template>  specialTemplateCache = 
UtilCache.createUtilCache("widget.screen.template.ftl.general", 0, 0, false);
-    protected static BeansWrapper specialBeansWrapper = new ExtendedWrapper();
-    protected static Configuration specialConfig = 
FreeMarkerWorker.makeConfiguration(specialBeansWrapper);
+    protected static Configuration specialConfig = 
FreeMarkerWorker.makeConfiguration((BeansWrapper)new ExtendedWrapper());

      // not sure if this is the best way to get FTL to use my fancy MapModel 
derivative, but should work at least...
      public static class ExtendedWrapper extends BeansWrapper {



Reply via email to