You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2006/11/13 21:29:41 UTC
svn commit: r474497 -
/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
Author: mrdon
Date: Mon Nov 13 12:29:41 2006
New Revision: 474497
URL: http://svn.apache.org/viewvc?view=rev&rev=474497
Log:
Changed template engines to be lazily loaded
WW-1498
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java?view=diff&rev=474497&r1=474496&r2=474497
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/template/TemplateEngineManager.java Mon Nov 13 12:29:41 2006
@@ -25,13 +25,10 @@
import org.apache.struts2.StrutsConstants;
import org.apache.struts2.dispatcher.Dispatcher;
-
+import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.Inject;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
/**
* The TemplateEngineManager will return a template engine for the template
*/
@@ -41,9 +38,8 @@
/** The default template extenstion is <code>ftl</code>. */
public static final String DEFAULT_TEMPLATE_TYPE = "ftl";
- private static final Log LOG = LogFactory.getLog(TemplateEngineManager.class);
- Map templateEngines = new HashMap();
+ Map<String,EngineFactory> templateEngines = new HashMap<String,EngineFactory>();
Container container;
String defaultTemplateType;
@@ -63,17 +59,7 @@
TemplateEngine eng = null;
String[] list = engines.split(",");
for (String name : list) {
- try {
- eng = container.getInstance(TemplateEngine.class, name);
- } catch (Throwable t) {
- LOG.info("Unable to load engine ("+name+") due to "+t.getMessage());
- continue;
- }
- if (eng != null) {
- templateEngines.put(name, eng);
- } else {
- throw new IllegalArgumentException("Invalid template engine name: "+name);
- }
+ templateEngines.put(name, new LazyEngineFactory(name));
}
}
}
@@ -85,8 +71,12 @@
* @param templateExtension filename extension (eg. .jsp, .ftl, .vm).
* @param templateEngine the engine.
*/
- public void registerTemplateEngine(String templateExtension, TemplateEngine templateEngine) {
- templateEngines.put(templateExtension, templateEngine);
+ public void registerTemplateEngine(String templateExtension, final TemplateEngine templateEngine) {
+ templateEngines.put(templateExtension, new EngineFactory() {
+ public TemplateEngine create() {
+ return templateEngine;
+ }
+ });
}
/**
@@ -112,8 +102,29 @@
templateType = type;
}
}
- return (TemplateEngine) templateEngines.get(templateType);
+ return templateEngines.get(templateType).create();
}
-
+ /** Abstracts loading of the template engine */
+ interface EngineFactory {
+ public TemplateEngine create();
+ }
+
+ /**
+ * Allows the template engine to be loaded at request time, so that engines that are missing
+ * dependencies aren't accessed if never used.
+ */
+ class LazyEngineFactory implements EngineFactory {
+ private String name;
+ public LazyEngineFactory(String name) {
+ this.name = name;
+ }
+ public TemplateEngine create() {
+ TemplateEngine engine = container.getInstance(TemplateEngine.class, name);
+ if (engine == null) {
+ throw new ConfigurationException("Unable to locate template engine: "+name);
+ }
+ return engine;
+ }
+ }
}