You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by hu...@apache.org on 2004/06/25 01:38:16 UTC

cvs commit: jakarta-struts/src/share/org/apache/struts/actions RedeployableActionServlet.java

husted      2004/06/24 16:38:16

  Added:       src/share/org/apache/struts/actions
                        RedeployableActionServlet.java
  Log:
  Apply #26322 - WebLogic hot-deploy breaks Tiles; TilesRequestProcessor is not serializable - Renaud Waldura,  Justin Ashworth, YuJeong Kim, et al.
  
  Revision  Changes    Path
  1.1                  jakarta-struts/src/share/org/apache/struts/actions/RedeployableActionServlet.java
  
  Index: RedeployableActionServlet.java
  ===================================================================
  package org.apache.struts.actions;
  
  import javax.servlet.ServletException;
  
  import org.apache.struts.Globals;
  import org.apache.struts.action.ActionServlet;
  import org.apache.struts.config.ModuleConfig;
  import org.apache.struts.tiles.DefinitionsFactory;
  import org.apache.struts.tiles.DefinitionsFactoryException;
  import org.apache.struts.tiles.TilesRequestProcessor;
  
  
  /**
   * <p>
   * WebLogic (at least v6 and v7) attempts to serialize the TilesRequestProcessor
   * when re-deploying the Webapp in development mode. The TilesRequestProcessor
   * is not serializable, and loses the Tiles definitions. This results in
   * NullPointerException and/or NotSerializableException when using the app after
   * automatic redeploy.
   * </p>
   * <p>
   * This bug report proposes a workaround for this problem, in the hope it will
   * help others and maybe motivate an actual fix.
   * </p>
   * <p>
   * The attached class extends the Struts Action servlet and fixes the problem by
   * reloading the Tiles definitions when they have disappeared.
   * </p>
   * <p>
   * For background discussion see
   * http://issues.apache.org/bugzilla/show_bug.cgi?id=26322
   * </p>
   * @version $Revision: 1.1 $ $Date: 2004/06/24 23:38:16 $
   * @since 1.2.1
   */
  public class RedeployableActionServlet extends ActionServlet {
      private TilesRequestProcessor tileProcessor;
  
      protected synchronized org.apache.struts.action.RequestProcessor
              getRequestProcessor(ModuleConfig config) throws ServletException {
  
          if (tileProcessor != null) {
              TilesRequestProcessor processor = (TilesRequestProcessor) super.getRequestProcessor(config);
              return processor;
          }
  
          // reset the request processor
          String requestProcessorKey = Globals.REQUEST_PROCESSOR_KEY +
                  config.getPrefix();
          getServletContext().removeAttribute(requestProcessorKey);
  
          // create a new request processor instance
          TilesRequestProcessor processor = (TilesRequestProcessor) super.getRequestProcessor(config);
  
          tileProcessor = processor;
  
          try {
              // reload Tiles defs
              DefinitionsFactory factory = processor.getDefinitionsFactory();
              factory.init(factory.getConfig(), getServletContext());
              // System.out.println("reloaded tiles-definitions");
          } catch (DefinitionsFactoryException e) {
              e.printStackTrace();
          }
  
          return processor;
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org