0

在 JBoss SOA 5.3.0.GA(JBoss AS 的一种风格)下,我有一个带有多个 WAR 的 EAR。当 EAR 取消部署时,每个 WAR 大约需要 5 秒才能取消部署。

这是由于CatalinaEventHandler.stopContext(Context),其中完成了五秒钟的睡眠:

273   public void stopContext(Context context)
274   {
275      this.checkInit();
276
277      if (!this.exclude(context))
278      {
279         log.debug(this.sm.getString("modcluster.context.stop", context.getPath(), context.getParent().getName()));
280
281         // Send STOP-APP
282         MCMPRequest request = this.requestFactory.createStopRequest(context);
283    
284         this.mcmpHandler.sendRequest(request);
285         Thread thr = Thread.currentThread();
286         try {
287            thr.sleep(5000); // Time for requests being processed.
288         } catch(Exception ex) {
289         }
290      }
291   }

有没有办法加快 Web 应用程序的卸载速度?

4

1 回答 1

0

根据CatalinaEventHandler.stopContext(Context)源代码,没有简单的方法可以加快 Web 应用程序的关闭速度。

但是,我使用了一种解决方法:我将5000常量值(第 287 行)替换为系统属性中的值,编译并重新打包jboss-as/server/myServer/deploy/mod-cluster.sar/mod-cluster-1.0.10.GA_CP02.jar(并从 JARMANIFEST.MF和其他.SF文件中删除了签名信息):

// get the timeout
long timeout = 5000; // the default timeout
String propName = "org.jboss.modcluster.CatalinaEventHandler.stopContext.timeout";
String timeoutStr = System.getProperty(propName);
if (timeoutStr!=null) {
    try {
        timeout = Long.parseLong(timeoutStr);
    } catch (NumberFormatException e) {
        log.warn("could not parse "+propName+" : "+e.toString());
    }
}

// wait for requests being processed
try {
   thr.sleep(timeout);
} catch(Exception ex) {
}

然后我使用启动服务器-Dorg.jboss.modcluster.CatalinaEventHandler.stopContext.timeout=50,我的 Web 应用程序关闭速度非常快,因为等待时间只有 50 毫秒。

于 2013-09-26T15:09:18.333 回答