When you restart a J2EE container, it will try to serialize the sessions
on disk to restore them when reloading. This can only works if
everything in the session is serializable, including the session toolbox
itself.
Since the RenderTool keeps references on a VelocityEngine, it cannot be
serialized. Even if we make the engine as being a transcient field, the
configure method won't be called upon reload.
One possible workaround would be to mark it transcient, and have a
ServletContextListener call session tools configure method, but it could
induce other side effects. I prefer to mark the RenderTool as invalid in
the session, as it does not seems a very obvious use case to do so.
That's also why ValueParser cannot be in the session: a
Map<String,Object> is not serializable, as Object is not.
I marked NumberTool, DateTool, ConversionTool and ResourceTool as
serializable, since they relay on formats or locales which could
potentially be session-specific.
Does it make more sense?
Claude
Date: Thu Nov 10 08:01:41 2016
New Revision: 1769055
URL: http://svn.apache.org/viewvc?rev=1769055&view=rev
Log:
[tools] a tool should either be Serializable or forbid Session scope
Modified:
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/RenderTool.java
URL:
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/RenderTool.java?rev=1769055&r1=1769054&r2=1769055&view=diff
==============================================================================
---
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/RenderTool.java
(original)
+++
velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/RenderTool.java
Thu Nov 10 08:01:41 2016
@@ -31,6 +31,7 @@ import org.apache.velocity.context.Conte
import org.apache.velocity.tools.Scope;
import org.apache.velocity.tools.ToolContext;
import org.apache.velocity.tools.config.DefaultKey;
+import org.apache.velocity.tools.config.InvalidScope;
/**
* This tool exposes methods to evaluate the given
@@ -103,7 +104,9 @@ import org.apache.velocity.tools.config.
* @author Nathan Bubna
* @version $Revision$ $Date$
*/
+
@DefaultKey("render")
+@InvalidScope(Scope.SESSION)
Is it intended to have an IN-valid scope? What prevents it to be used in
a session?
public class RenderTool extends SafeConfig
{
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org