Author: jacopoc Date: Sun May 20 07:49:45 2012 New Revision: 1340631 URL: http://svn.apache.org/viewvc?rev=1340631&view=rev Log: Refactored code to use the default BeansWrapper defined by FreemarkerWorker; this is important according to comment from one of the Freemarker committers:
"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." Thanks to Adam Heath for the comment. Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/WfsEventHandler.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewHandler.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewRenderer.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/WfsViewHandler.java ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.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=1340631&r1=1340630&r2=1340631&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 Sun May 20 07:49:45 2012 @@ -76,7 +76,8 @@ 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 Configuration defaultOfbizConfig = makeConfiguration(new BeansWrapper()); + private static final BeansWrapper defaultOfbizWrapper = new BeansWrapper(); + private static final Configuration defaultOfbizConfig = makeConfiguration(defaultOfbizWrapper); public static Configuration makeConfiguration(BeansWrapper wrapper) { Configuration newConfig = new Configuration(); @@ -117,6 +118,10 @@ public class FreeMarkerWorker { return newConfig; } + public static BeansWrapper getDefaultOfbizWrapper() { + return defaultOfbizWrapper; + } + /** * Protected helper method. */ @@ -616,10 +621,9 @@ public class FreeMarkerWorker { } public static TemplateModel autoWrap(Object obj, Environment env) { - BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); TemplateModel templateModelObj = null; try { - templateModelObj = wrapper.wrap(obj); + templateModelObj = getDefaultOfbizWrapper().wrap(obj); } catch (TemplateModelException e) { throw new RuntimeException(e.getMessage()); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java?rev=1340631&r1=1340630&r2=1340631&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java Sun May 20 07:49:45 2012 @@ -42,6 +42,7 @@ import org.ofbiz.base.util.Base64; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilXml; +import org.ofbiz.base.util.template.FreeMarkerWorker; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericValue; @@ -345,15 +346,14 @@ public class EntitySaxReader implements StringWriter outWriter = new StringWriter(); Configuration config = new Configuration(); - config.setObjectWrapper(BeansWrapper.getDefaultInstance()); + config.setObjectWrapper(FreeMarkerWorker.getDefaultOfbizWrapper()); config.setSetting("datetime_format", "yyyy-MM-dd HH:mm:ss.SSS"); Template template = new Template("FMImportFilter", templateReader, config); NodeModel nodeModel = NodeModel.wrap(this.rootNodeForTemplate); Map<String, Object> context = FastMap.newInstance(); - BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); - TemplateHashModel staticModels = wrapper.getStaticModels(); + TemplateHashModel staticModels = FreeMarkerWorker.getDefaultOfbizWrapper().getStaticModels(); context.put("Static", staticModels); context.put("doc", nodeModel); Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java?rev=1340631&r1=1340630&r2=1340631&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ControlServlet.java Sun May 20 07:49:45 2012 @@ -38,6 +38,7 @@ import org.ofbiz.base.util.UtilHttp; import org.ofbiz.base.util.UtilJ2eeCompat; import org.ofbiz.base.util.UtilTimer; import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.template.FreeMarkerWorker; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.DelegatorFactory; import org.ofbiz.entity.GenericDelegator; @@ -197,7 +198,7 @@ public class ControlServlet extends Http request.setAttribute("_REQUEST_HANDLER_", requestHandler); - ServletContextHashModel ftlServletContext = new ServletContextHashModel(this, BeansWrapper.getDefaultInstance()); + ServletContextHashModel ftlServletContext = new ServletContextHashModel(this, FreeMarkerWorker.getDefaultOfbizWrapper()); request.setAttribute("ftlServletContext", ftlServletContext); // setup some things that should always be there Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/WfsEventHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/WfsEventHandler.java?rev=1340631&r1=1340630&r2=1340631&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/WfsEventHandler.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/WfsEventHandler.java Sun May 20 07:49:45 2012 @@ -42,6 +42,7 @@ import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilXml; +import org.ofbiz.base.util.template.FreeMarkerWorker; import org.ofbiz.entity.GenericValue; import org.ofbiz.minilang.MiniLangException; import org.ofbiz.minilang.SimpleMethod; @@ -183,7 +184,7 @@ public class WfsEventHandler implements public static Configuration makeDefaultOfbizConfig() throws TemplateException, IOException { Configuration config = new Configuration(); - config.setObjectWrapper(BeansWrapper.getDefaultInstance()); + config.setObjectWrapper(FreeMarkerWorker.getDefaultOfbizWrapper()); config.setSetting("datetime_format", "yyyy-MM-dd HH:mm:ss.SSS"); Configuration defaultOfbizConfig = config; return defaultOfbizConfig; Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewHandler.java?rev=1340631&r1=1340630&r2=1340631&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewHandler.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewHandler.java Sun May 20 07:49:45 2012 @@ -85,8 +85,6 @@ public class FreeMarkerViewHandler exten ServletContext servletContext = (ServletContext) request.getAttribute("servletContext"); HttpSession session = request.getSession(); - BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); - // add in the OFBiz objects root.put("delegator", request.getAttribute("delegator")); root.put("dispatcher", request.getAttribute("dispatcher")); @@ -101,19 +99,19 @@ public class FreeMarkerViewHandler exten root.put("application", servletContext); // add the servlet context -- this has been deprecated, and now requires servlet, do we really need it? - //root.put("applicationAttributes", new ServletContextHashModel(servletContext, BeansWrapper.getDefaultInstance())); + //root.put("applicationAttributes", new ServletContextHashModel(servletContext, FreeMarkerWorker.defaultOfbizWrapper)); // add the session object (for transforms) to the context as a BeanModel root.put("session", session); // add the session - root.put("sessionAttributes", new HttpSessionHashModel(session, wrapper)); + root.put("sessionAttributes", new HttpSessionHashModel(session, FreeMarkerWorker.getDefaultOfbizWrapper())); // add the request object (for transforms) to the context as a BeanModel root.put("request", request); // add the request - root.put("requestAttributes", new HttpRequestHashModel(request, wrapper)); + root.put("requestAttributes", new HttpRequestHashModel(request, FreeMarkerWorker.getDefaultOfbizWrapper())); // add the request parameters -- this now uses a Map from UtilHttp Map<String, Object> requestParameters = UtilHttp.getParameterMap(request); Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewRenderer.java?rev=1340631&r1=1340630&r2=1340631&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewRenderer.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/FreeMarkerViewRenderer.java Sun May 20 07:49:45 2012 @@ -39,6 +39,7 @@ import org.jpublish.Page; import org.jpublish.SiteContext; import org.jpublish.page.PageInstance; import org.jpublish.view.ViewRenderException; +import org.ofbiz.base.util.template.FreeMarkerWorker; /** * JPublish View Renderer For Freemarker Template Engine @@ -59,10 +60,9 @@ public class FreeMarkerViewRenderer exte HttpServletRequest request = context.getRequest(); HttpServletResponse response = context.getResponse(); - BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); - WrappingTemplateModel.setDefaultObjectWrapper(wrapper); + WrappingTemplateModel.setDefaultObjectWrapper(FreeMarkerWorker.getDefaultOfbizWrapper()); Map contextMap = new HashMap(); - SimpleHash root = new SimpleHash(wrapper); + SimpleHash root = new SimpleHash(FreeMarkerWorker.getDefaultOfbizWrapper()); try { Object[] keys = context.getKeys(); for (int i = 0; i < keys.length; i++) { @@ -71,13 +71,13 @@ public class FreeMarkerViewRenderer exte if (value != null) { contextMap.put(key, value); //no longer wrapping; let FM do it if needed, more efficient - //root.put(key, wrapper.wrap(value)); + //root.put(key, FreeMarkerWorker.getDefaultOfbizWrapper().wrap(value)); root.put(key, value); } } - root.put("context", wrapper.wrap(contextMap)); + root.put("context", FreeMarkerWorker.getDefaultOfbizWrapper().wrap(contextMap)); root.put("cachedInclude", new JpCacheIncludeTransform()); // only adding this in for JP! - //root.put("jpublishContext", wrapper.wrap(context)); + //root.put("jpublishContext", FreeMarkerWorker.getDefaultOfbizWrapper().wrap(context)); FreeMarkerViewHandler.prepOfbizRoot(root, request, response); } catch (Exception e) { throw new ViewRenderException(e); @@ -91,7 +91,7 @@ public class FreeMarkerViewRenderer exte Object viewContext = createViewContext(context, path); Template template = fmConfig.getTemplate(path, UtilHttp.getLocale(context.getRequest())); - template.setObjectWrapper(BeansWrapper.getDefaultInstance()); + template.setObjectWrapper(FreeMarkerWorker.getDefaultOfbizWrapper()); /* NEVER add content to the beginning of templates; this effects XML processing which requires the first line remain intact. Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/WfsViewHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/WfsViewHandler.java?rev=1340631&r1=1340630&r2=1340631&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/WfsViewHandler.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/WfsViewHandler.java Sun May 20 07:49:45 2012 @@ -39,6 +39,7 @@ import org.ofbiz.base.location.FlexibleL import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.template.FreeMarkerWorker; import org.ofbiz.entity.GenericValue; import freemarker.ext.beans.BeansWrapper; @@ -110,7 +111,7 @@ public class WfsViewHandler extends Abst public static Configuration makeDefaultOfbizConfig() throws TemplateException, IOException { Configuration config = new Configuration(); - config.setObjectWrapper(BeansWrapper.getDefaultInstance()); + config.setObjectWrapper(FreeMarkerWorker.getDefaultOfbizWrapper()); config.setSetting("datetime_format", "yyyy-MM-dd HH:mm:ss.SSS"); Configuration defaultOfbizConfig = config; return defaultOfbizConfig; Modified: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java?rev=1340631&r1=1340630&r2=1340631&view=diff ============================================================================== --- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java (original) +++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java Sun May 20 07:49:45 2012 @@ -59,6 +59,7 @@ import org.ofbiz.base.util.UtilPropertie import org.ofbiz.base.util.UtilURL; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilProperties.UtilResourceBundle; +import org.ofbiz.base.util.template.FreeMarkerWorker; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.DelegatorFactory; import org.ofbiz.entity.GenericEntityException; @@ -171,8 +172,7 @@ public class WebToolsServices { } } fmcontext.put("doc", nodeModel); - BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); - TemplateHashModel staticModels = wrapper.getStaticModels(); + TemplateHashModel staticModels = FreeMarkerWorker.getDefaultOfbizWrapper().getStaticModels(); fmcontext.put("Static", staticModels); template.process(fmcontext, outWriter); Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java?rev=1340631&r1=1340630&r2=1340631&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java Sun May 20 07:49:45 2012 @@ -44,6 +44,7 @@ import org.ofbiz.base.util.UtilHttp; import org.ofbiz.base.util.UtilMisc; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.collections.MapStack; +import org.ofbiz.base.util.template.FreeMarkerWorker; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntity; import org.ofbiz.entity.GenericValue; @@ -238,9 +239,8 @@ public class ScreenRenderer { context.put("javaScriptEnabled", Boolean.valueOf(UtilHttp.isJavaScriptEnabled(request))); // these ones are FreeMarker specific and will only work in FTL templates, mainly here for backward compatibility - BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); - context.put("sessionAttributes", new HttpSessionHashModel(session, wrapper)); - context.put("requestAttributes", new HttpRequestHashModel(request, wrapper)); + context.put("sessionAttributes", new HttpSessionHashModel(session, FreeMarkerWorker.getDefaultOfbizWrapper())); + context.put("requestAttributes", new HttpRequestHashModel(request, FreeMarkerWorker.getDefaultOfbizWrapper())); TaglibFactory JspTaglibs = new TaglibFactory(servletContext); context.put("JspTaglibs", JspTaglibs); context.put("requestParameters", UtilHttp.getParameterMap(request));