diff --git a/src/main/java/org/olat/core/_spring/mainCorecontext.xml b/src/main/java/org/olat/core/_spring/mainCorecontext.xml index 527c4b40fcef8fdecff08462e61dd9866c8e5f35..02243fec114c0c0138381fba1f234762b4bf9fed 100644 --- a/src/main/java/org/olat/core/_spring/mainCorecontext.xml +++ b/src/main/java/org/olat/core/_spring/mainCorecontext.xml @@ -40,7 +40,9 @@ <import resource="classpath:/org/olat/core/commons/services/thumbnail/_spring/thumbnailserviceContext.xml"/> <import resource="classpath:/org/olat/core/commons/services/webdav/_spring/webdavContext.xml"/> - <bean class="org.olat.core.gui.render.velocity.VelocityModule" depends-on="org.olat.core.helpers.Settings" init-method="init"/> + <bean class="org.olat.core.gui.render.velocity.VelocityModule" depends-on="org.olat.core.helpers.Settings" init-method="init"> + <property name="parserPoolSize" value="${velocity.parser.pool.size}" /> + </bean> <bean id="mapperSlayerTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="mapperSlayerJob" /> diff --git a/src/main/java/org/olat/core/extensions/ExtManager.java b/src/main/java/org/olat/core/extensions/ExtManager.java index 3a1ad3e15d6182e835b764f23ab9007ffd5bc537..cd0a4e2ddb2f0d5eb7b499a46aead84df9fdc946 100644 --- a/src/main/java/org/olat/core/extensions/ExtManager.java +++ b/src/main/java/org/olat/core/extensions/ExtManager.java @@ -127,7 +127,7 @@ public class ExtManager extends LogDelegator { if (extensions == null) { synchronized(lockObject) { if (extensions == null) { - initExtentions(); + extensions = initExtentions(); } } } @@ -141,13 +141,13 @@ public class ExtManager extends LogDelegator { return timeOfExtensionStartup; } - private void initExtentions() { + private ArrayList<Extension> initExtentions() { logInfo("****** start loading extensions *********"); Map<Integer, Extension> orderKeys = new HashMap<Integer, Extension>(); idExtensionlookup = new HashMap<Long, Extension>(); navKeyGAExtensionlookup = new HashMap<ExtensionPointKeyPair, GenericActionExtension>(); - extensions = new ArrayList<Extension>(); + ArrayList<Extension> extensionsList = new ArrayList<Extension>(); Map<String, Extension> extensionMap = CoreSpringFactory.getBeansOfType(Extension.class); Collection<Extension> extensionValues = extensionMap.values(); @@ -182,7 +182,7 @@ public class ExtManager extends LogDelegator { count_duplid++; logWarn("Devel-Info :: duplicate unique id generated for extensions :: "+uid+" [ ["+idExtensionlookup.get(uid)+"] and ["+extension+"] ]",null); }else{ - extensions.add(extension); + extensionsList.add(extension); idExtensionlookup.put(uid, extension); if (extension instanceof GenericActionExtension) { GenericActionExtension gAE = (GenericActionExtension) extension; @@ -205,7 +205,8 @@ public class ExtManager extends LogDelegator { logDebug("Created unique-id "+uid+" for extension:: "+extension); } logInfo("Devel-Info :: initExtensions done. :: "+count_disabled+" disabled Extensions, "+count_duplid+" extensions with duplicate ids, "+count_duplnavkey+ " extensions with duplicate navigationKeys"); - Collections.sort(extensions); + Collections.sort(extensionsList); + return extensionsList; } private class ExtensionPointKeyPair { diff --git a/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java b/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java index b5a16900ffba3e1d084e179905b6d0596036bab1..fd607784c5ba8e8b5a301ca5e5704ed265c5385b 100644 --- a/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java +++ b/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java @@ -478,7 +478,7 @@ public abstract class GenericMainController extends MainLayoutBasicController im contentCtr1Tmp = handleOwnMenuTreeEvent(uobject, ureq); } if (contentCtr1Tmp == null) { throw new AssertException( - "Node must either be an ActionExtension or implementation must handle this MenuTreeEvent: " + uobject.toString()); } + "Node must either be an ActionExtension or implementation must handle this MenuTreeEvent: " + (uobject == null ? "NULL" : uobject.toString())); } return contentCtr1Tmp; } diff --git a/src/main/java/org/olat/core/gui/render/velocity/VelocityHelper.java b/src/main/java/org/olat/core/gui/render/velocity/VelocityHelper.java index fca06202bf2078dfe6a39f31aec4260816bc4f15..7408c929a27906c30e96b16ccbb58453e6ea6402 100644 --- a/src/main/java/org/olat/core/gui/render/velocity/VelocityHelper.java +++ b/src/main/java/org/olat/core/gui/render/velocity/VelocityHelper.java @@ -81,7 +81,8 @@ public class VelocityHelper extends LogDelegator { p.setProperty(RuntimeConstants.RUNTIME_LOG_INFO_STACKTRACE, "true"); p.setProperty(RuntimeConstants.INPUT_ENCODING, VelocityModule.getInputEncoding()); - p.setProperty(RuntimeConstants.OUTPUT_ENCODING, VelocityModule.getOutputEncoding()); + p.setProperty(RuntimeConstants.OUTPUT_ENCODING, VelocityModule.getOutputEncoding()); + p.setProperty(RuntimeConstants.PARSER_POOL_SIZE, VelocityModule.getParsterPoolSize()); if (Settings.isDebuging()) { diff --git a/src/main/java/org/olat/core/gui/render/velocity/VelocityModule.java b/src/main/java/org/olat/core/gui/render/velocity/VelocityModule.java index ef7444891ffb0ee89ace156baaa446a510765dac..366ff99534376756a653c9168f86cb65d87016a9 100644 --- a/src/main/java/org/olat/core/gui/render/velocity/VelocityModule.java +++ b/src/main/java/org/olat/core/gui/render/velocity/VelocityModule.java @@ -38,6 +38,7 @@ public class VelocityModule implements Initializable { private static String inputEncoding = DEFAULT_ENCODING; private static String outputEncoding = DEFAULT_ENCODING; + private static String parserPoolSize = "20"; /** * [spring] @@ -64,4 +65,21 @@ public class VelocityModule implements Initializable { VelocityHelper.getInstance(); } + /** + * @return the parser pool size for the velocity parser pool configuration + */ + public static String getParsterPoolSize() { + return parserPoolSize; + } + + /** + * [SPRING] + * @param newParserPoolSize Set the new parser pool size + */ + public void setParserPoolSize(String newParserPoolSize) { + parserPoolSize = newParserPoolSize; + } + + + } \ No newline at end of file diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index dabbf9f9d0f834d16dafeec463c51ae8a3681f86..5a792c399119adec5af6e36a79eb9b6fde7240f3 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -532,6 +532,12 @@ db.hibernate.c3p0.unreturnedConnectionTimeout=120 infinispan.jndi= infinispan.jndi.values=,java:jboss/infinispan/openolatha +######################################################################## +# Velocity Templating Engine +######################################################################## +velocity.parser.pool.size=20 +infinispan.jndi.comment=20 is Velocity default value, use more when you get errors in the logfile. Only necessary on high load configurations. + ######################################################################## # Instant Messaging / chat ########################################################################