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

Reply via email to