From 632ed8009889eaffcd1c63bef6e963b66da086e2 Mon Sep 17 00:00:00 2001 From: Paul Gregoire Date: Wed, 16 Sep 2015 21:35:09 -0400 Subject: [PATCH] Moved and refactored war deployer service, now its in tomcat plugin --- .../org/red5/server/service/WarDeployer.java | 242 ------------------ src/main/server/conf/jee-container.xml | 14 +- src/main/server/conf/red5-common.xml | 7 - src/main/server/conf/red5-core.xml | 4 +- src/main/server/conf/red5.properties | 6 +- src/main/server/plugins/Readme.md | 4 +- ...atplugin-1.9.jar => tomcatplugin-1.10.jar} | Bin 48195 -> 53898 bytes src/main/server/red5.bat | 2 +- 8 files changed, 19 insertions(+), 260 deletions(-) delete mode 100644 src/main/java/org/red5/server/service/WarDeployer.java rename src/main/server/plugins/{tomcatplugin-1.9.jar => tomcatplugin-1.10.jar} (53%) diff --git a/src/main/java/org/red5/server/service/WarDeployer.java b/src/main/java/org/red5/server/service/WarDeployer.java deleted file mode 100644 index 18264fb6f..000000000 --- a/src/main/java/org/red5/server/service/WarDeployer.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * RED5 Open Source Flash Server - https://github.com/Red5/ - * - * Copyright (c) 2006-2011 by respective authors (see below). All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free Software - * Foundation; either version 2.1 of the License, or (at your option) any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License along - * with this library; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -package org.red5.server.service; - -import java.io.File; -import java.io.FilenameFilter; -import java.lang.management.ManagementFactory; - -import javax.management.JMX; -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.servlet.ServletException; - -import org.red5.server.api.scheduling.IScheduledJob; -import org.red5.server.api.scheduling.ISchedulingService; -import org.red5.server.jmx.mxbeans.LoaderMXBean; -import org.red5.server.util.FileUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * This service provides the means to auto-deploy a war. - * - * @author Paul Gregoire (mondain@gmail.com) - */ -public final class WarDeployer { - - private Logger log = LoggerFactory.getLogger(WarDeployer.class); - - private ISchedulingService scheduler; - - //how often to check for wars - private int checkInterval = 600000; //ten minutes - - //where we deploy from - where the war files are located - private String deploymentDirectory; - - private static String jobName; - - //that wars are currently being installed - private static boolean deploying; - - { - log.info("War deployer service created"); - } - - public void setCheckInterval(int checkInterval) { - this.checkInterval = checkInterval; - } - - public int getCheckInterval() { - return checkInterval; - } - - public ISchedulingService getScheduler() { - return scheduler; - } - - public void setScheduler(ISchedulingService scheduler) { - this.scheduler = scheduler; - } - - public String getDeploymentDirectory() { - return deploymentDirectory; - } - - public void setDeploymentDirectory(String deploymentDirectory) { - this.deploymentDirectory = deploymentDirectory; - } - - public void init() { - // create the job and schedule it - jobName = scheduler.addScheduledJobAfterDelay(checkInterval, new DeployJob(), 60000); - // check the deploy from directory - log.debug("Source directory: {}", deploymentDirectory); - File dir = new File(deploymentDirectory); - if (!dir.exists()) { - log.warn("Source directory not found"); - } else { - if (!dir.isDirectory()) { - log.warn("Source directory is not a directory"); - } - } - dir = null; - } - - public void shutdown() { - scheduler.removeScheduledJob(jobName); - } - - /** - * Returns the LoaderMBean. - * @return LoadeerMBean - */ - @SuppressWarnings("cast") - public LoaderMXBean getLoader() { - MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - // proxy class - LoaderMXBean proxy = null; - ObjectName oName; - try { - // TODO support all loaders - oName = new ObjectName("org.red5.server:type=TomcatLoader"); - if (mbs.isRegistered(oName)) { - proxy = JMX.newMXBeanProxy(mbs, oName, LoaderMXBean.class, true); - log.debug("Loader was found"); - } else { - log.warn("Loader not found"); - } - } catch (Exception e) { - log.error("Exception getting loader", e); - } - return proxy; - } - - /** - * Filters directory content - */ - protected class DirectoryFilter implements FilenameFilter { - /** - * Check whether file matches filter rules - * - * @param dir Directory - * @param name File name - * @return true If file does match filter rules, false otherwise - */ - public boolean accept(File dir, String name) { - File f = new File(dir, name); - log.trace("Filtering: {} name: {}", dir.getName(), name); - // filter out all but war files - boolean result = f.getName().endsWith("war"); - //nullify - f = null; - return result; - } - } - - private class DeployJob implements IScheduledJob { - - public void execute(ISchedulingService service) { - log.trace("Executing job"); - if (deploying) { - return; - } - deploying = true; - log.debug("Starting scheduled deployment of wars"); - - //short name - String application = null; - //file name - String applicationWarName = null; - - //get webapp location - String webappsDir = System.getProperty("red5.webapp.root"); - log.debug("Webapp folder: {}", webappsDir); - - //look for web application archives - File dir = new File(deploymentDirectory); - //get a list of wars - File[] files = dir.listFiles(new DirectoryFilter()); - for (File f : files) { - //get the war name - applicationWarName = f.getName(); - - int dashIndex = applicationWarName.indexOf('-'); - if (dashIndex != -1) { - //strip everything except the applications name - application = applicationWarName.substring(0, dashIndex); - } else { - //grab every char up to the last '.' - application = applicationWarName.substring(0, applicationWarName.lastIndexOf('.')); - } - log.debug("Application name: {}", application); - - //setup context - String contextPath = '/' + application; - String contextDir = webappsDir + contextPath; - - log.debug("Web context: {} context directory: {}", contextPath, contextDir); - - //verify this is a unique app - File appDir = new File(webappsDir, application); - if (appDir.exists()) { - if (appDir.isDirectory()) { - log.debug("Application directory exists"); - } else { - log.warn("Application destination is not a directory"); - } - log.info("Application {} already installed, please un-install before attempting another install", - application); - } else { - log.debug("Unwaring and starting..."); - //un-archive it to app dir - FileUtil.unzip(deploymentDirectory + '/' + applicationWarName, contextDir); - //get the webapp loader - LoaderMXBean loader = getLoader(); - if (loader != null) { - //load and start the context - try { - loader.startWebApplication(application); - //remove the war file - File warFile = new File(deploymentDirectory, applicationWarName); - if (warFile.delete()) { - log.debug("{} was deleted", warFile.getName()); - } else { - log.debug("{} was not deleted", warFile.getName()); - warFile.deleteOnExit(); - } - warFile = null; - } catch (ServletException e) { - log.error("Unexpected error while staring web application...", e); - } - } - } - appDir = null; - } - dir = null; - - //reset sentinel - deploying = false; - } - - } - -} diff --git a/src/main/server/conf/jee-container.xml b/src/main/server/conf/jee-container.xml index ce1a330b8..e5335b638 100644 --- a/src/main/server/conf/jee-container.xml +++ b/src/main/server/conf/jee-container.xml @@ -4,7 +4,15 @@ xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> - + + + + + + + + + - + @@ -50,7 +58,7 @@ - - - - - diff --git a/src/main/server/conf/red5-core.xml b/src/main/server/conf/red5-core.xml index bf0731fc6..064bcac0f 100644 --- a/src/main/server/conf/red5-core.xml +++ b/src/main/server/conf/red5-core.xml @@ -117,7 +117,7 @@ - + @@ -162,7 +162,7 @@ - + diff --git a/src/main/server/conf/red5.properties b/src/main/server/conf/red5.properties index e27a6f63a..d47988cfc 100644 --- a/src/main/server/conf/red5.properties +++ b/src/main/server/conf/red5.properties @@ -53,10 +53,10 @@ rtmp.executor.max_pool_size=32 rtmp.executor.queue_capacity=64 # drop audio packets when queue is almost full, to disable this, set to 0 rtmp.executor.queue_size_to_drop_audio_packets=60 +# maximum amount of time allotted to process a single rtmp message / packet in milliseconds, set it as 0 to disable timeout +rtmp.max_handling_time=2000 # deadlock guard configs -rtmp.deadlockguard.sheduler.pool_size=32 -# maximum amount of time allotted to process a single rtmp message / packet in milliseconds, set it as 0 to disable timeout (default 1000) -rtmp.deadlockguard.max_handling_time=1000 +rtmp.deadlockguard.sheduler.pool_size=16 # RTMPS rtmps.host=0.0.0.0 diff --git a/src/main/server/plugins/Readme.md b/src/main/server/plugins/Readme.md index 7085924d6..eb80a9a6b 100644 --- a/src/main/server/plugins/Readme.md +++ b/src/main/server/plugins/Readme.md @@ -1,6 +1,6 @@ Included plugins: - * Red5 Tomcat 1.9 + * Red5 Tomcat 1.10 * Red5 WebSocket 1.2 Support libraries: @@ -9,5 +9,5 @@ Support libraries: * ECJ 4.4.2 * [juli-over-slf4j](https://github.com/Red5/juli-over-slf4j) -Updated: 01/14/2015 +Updated: 09/16/2015 diff --git a/src/main/server/plugins/tomcatplugin-1.9.jar b/src/main/server/plugins/tomcatplugin-1.10.jar similarity index 53% rename from src/main/server/plugins/tomcatplugin-1.9.jar rename to src/main/server/plugins/tomcatplugin-1.10.jar index cc8e799c2ae6622efc91a47a9fd658241e31d095..4d440664fbec5533fac74031478d0ec8a84678d3 100644 GIT binary patch delta 20860 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 diff --git a/src/main/server/red5.bat b/src/main/server/red5.bat index 2352e7b68..97c65884e 100644 --- a/src/main/server/red5.bat +++ b/src/main/server/red5.bat @@ -17,7 +17,7 @@ REM Set up security options REM set SECURITY_OPTS=-Djava.security.debug=failure -Djava.security.manager -Djava.security.policy="%RED5_HOME%/conf/red5.policy" set SECURITY_OPTS=-Djava.security.debug=failure REM Set up tomcat options -set TOMCAT_OPTS=-Dcatalina.home="%RED5_HOME%" +set TOMCAT_OPTS=-Dcatalina.home=%RED5_HOME% REM Setup python/jython path set JYTHON_OPTS=-Dpython.home=lib REM Combined java options