⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reloadingjavaactionfactory.java

📁 webwork source
💻 JAVA
字号:
package webwork.action.factory;import java.net.URL;import java.net.MalformedURLException;import java.util.StringTokenizer;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import webwork.util.classloader.WebworkClassLoader;import webwork.util.ClassLoaderUtils;import webwork.action.Action;import webwork.config.Configuration;public class ReloadingJavaActionFactory extends JavaActionFactory{  private static final Log log = LogFactory.getLog(ReloadingJavaActionFactory.class);  //we store this here as well as the parent field to avoid having to cast to call methods on the classloader  private WebworkClassLoader reloadingClassLoader;  private URL source;  public ReloadingJavaActionFactory()  {    URL url = getClass().getResource("/webwork.properties");    System.out.println(this + " " + url);    if (url == null)    {      log.warn("Cannot find CodeSource for webwork, unable to creare reloading action factory");    }    else    {      try      {        String urlVal = url.toString();        source = new URL(urlVal.substring(0, urlVal.lastIndexOf("webwork.properties")));        log.debug("Creating classloader for url "  + source);        WebworkClassLoader actionLoader = WebworkClassLoader.getInstance(source, Thread.currentThread().getContextClassLoader());        StringTokenizer tok = new StringTokenizer(Configuration.getString("webwork.action.packages").trim(), ", ");        String[] packages = new String[tok.countTokens()];        int counter = 0;        while(tok.hasMoreTokens())        {          packages[counter++] = tok.nextToken();        }        actionLoader.setPackages(packages);        this.actionLoader = actionLoader;        this.reloadingClassLoader = actionLoader;      }      catch(MalformedURLException ex)      {        log.error("Grr", ex);      }    }  }  /**   * Returns a loaded and instantiated action class instance using a fully   * qualified classname.   *   * @param name classname of the action to be created   * @return the action corresponding to the given Java class name   */  public Action getActionImpl(String name) throws Exception  {    if(reloadingClassLoader!=null && reloadingClassLoader.isStale())    {      synchronized(this)      {        log.debug("Classes modified, reloading...");        reloadingClassLoader = (WebworkClassLoader)reloadingClassLoader.clone();        actionLoader = reloadingClassLoader;      }    }    Class actionClass = null;    try    {      actionClass = reloadingClassLoader.loadClass(name);    }    catch (Exception e)    {      try      {        actionClass = ClassLoaderUtils.loadClass(name, getClass());      }      catch (Exception e2)      {        // Not found        throw new IllegalArgumentException("Action '" + name + "' not found");      }    }    try    {      Action action = (Action)actionClass.newInstance();      return action;    }    catch (Exception e)    {      throw new IllegalArgumentException("Action '" + name + "' could not be instantiated:" + e);    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -