From 104b8352610a147c1e96230bcaf01672ffb5fab4 Mon Sep 17 00:00:00 2001 From: Zachos Dogkanos Date: Wed, 5 Apr 2017 00:18:53 +0300 Subject: [PATCH 01/11] 8.5.2 release --- TomcatGrailsPlugin.groovy | 6 +++--- grails-app/conf/BuildConfig.groovy | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/TomcatGrailsPlugin.groovy b/TomcatGrailsPlugin.groovy index 5e60d84..2bc792a 100644 --- a/TomcatGrailsPlugin.groovy +++ b/TomcatGrailsPlugin.groovy @@ -14,11 +14,11 @@ * limitations under the License. */ class TomcatGrailsPlugin { - def version = '8.0.30' + def version = '8.5.2' def grailsVersion = '2.3 > *' def scopes = [excludes: 'war'] def title = 'Apache Tomcat plugin' - def description = 'Makes Tomcat 8.x the servlet container for Grails at development time' + def description = 'Makes Tomcat 8.5.x the servlet container for Grails at development time' def documentation = 'http://grails.org/plugin/tomcat' def license = 'APACHE' def organization = [name: 'Grails', url: 'http://www.grails.org'] @@ -26,6 +26,6 @@ class TomcatGrailsPlugin { [name: 'Graeme Rocher', email: 'rocherg@ociweb.com'], [name: 'Burt Beckwith', email: 'burt@burtbeckwith.com'] ] - def issueManagement = [system: 'JIRA', url: 'http://jira.grails.org/browse/GPTOMCAT'] + def issueManagement = [url: 'https://github.com/grails-plugins/grails-tomcat-plugin/issues'] def scm = [url: 'https://github.com/grails-plugins/grails-tomcat-plugin'] } diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index 8181754..bafc966 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -4,28 +4,28 @@ if (System.getenv('TRAVIS_BRANCH')) { } grails.project.work.dir = 'target' -grails.project.dependency.resolver = 'maven' +grails.project.dependency.resolver = 'maven' grails.project.dependency.resolution = { inherits 'global' log 'warn' repositories { - grailsCentral() mavenLocal() + grailsCentral() mavenCentral() } dependencies { - String tomcatVersion = '8.0.30' - - compile "org.apache.tomcat.embed:tomcat-embed-core:$tomcatVersion" + String tomcatVersion = '8.5.2' + compile "org.apache.tomcat.embed:tomcat-embed-core:$tomcatVersion", { exclude 'ecj' } ['el', 'jasper', 'logging-log4j', 'logging-juli', 'websocket'].each { - runtime "org.apache.tomcat.embed:tomcat-embed-$it:$tomcatVersion" + runtime "org.apache.tomcat.embed:tomcat-embed-$it:$tomcatVersion", { exclude 'ecj' } } - provided 'javax.servlet:javax.servlet-api:3.1.0' + // TODO use 'org.eclipse.jdt.core.compiler:ecj:4.5' when it's available in Maven Central + runtime 'org.eclipse.scout.sdk.deps:ecj:4.5' } plugins { From ba803ffd0113b008eee51bf165982ce974067ac6 Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Mon, 18 Apr 2016 20:57:10 -0400 Subject: [PATCH 02/11] moved common code into base class --- .../tomcat/InlineExplodedTomcatServer.groovy | 58 +------- .../grails/plugins/tomcat/TomcatServer.groovy | 140 ++++++++++++++---- .../tomcat/fork/TomcatWarRunner.groovy | 54 +------ 3 files changed, 114 insertions(+), 138 deletions(-) diff --git a/src/groovy/org/grails/plugins/tomcat/InlineExplodedTomcatServer.groovy b/src/groovy/org/grails/plugins/tomcat/InlineExplodedTomcatServer.groovy index 52cf73f..656bc0e 100644 --- a/src/groovy/org/grails/plugins/tomcat/InlineExplodedTomcatServer.groovy +++ b/src/groovy/org/grails/plugins/tomcat/InlineExplodedTomcatServer.groovy @@ -25,10 +25,8 @@ import groovy.transform.TypeCheckingMode import org.apache.catalina.Context import org.apache.catalina.Loader import org.apache.catalina.WebResourceRoot -import org.apache.catalina.connector.Connector import org.apache.catalina.startup.Tomcat import org.apache.catalina.webresources.StandardRoot -import org.apache.coyote.http11.Http11NioProtocol import org.codehaus.groovy.grails.plugins.GrailsPluginUtils import org.grails.plugins.tomcat.fork.ForkedTomcatServer @@ -38,20 +36,13 @@ import org.grails.plugins.tomcat.fork.ForkedTomcatServer @CompileStatic class InlineExplodedTomcatServer extends TomcatServer { - final Tomcat tomcat = new Tomcat() - - Context context - InlineExplodedTomcatServer(String basedir, String webXml, String contextPath, ClassLoader classLoader) { if (contextPath == '/') { contextPath = '' } - tomcat.baseDir = tomcatDir.absolutePath context = tomcat.addWebapp(contextPath, basedir) - configureJarScanner context - tomcat.enableNaming() // we handle reloading manually context.reloadable = false @@ -106,25 +97,7 @@ class InlineExplodedTomcatServer extends TomcatServer { void doStart(String host, int httpPort, int httpsPort) { preStart() - if (host != "localhost") { - tomcat.connector.setAttribute "address", host - tomcat.connector.setAttribute "port", httpPort - } - - if (getConfigParam("nio")) { - CONSOLE.updateStatus "Enabling Tomcat NIO connector" - def connector = new Connector(Http11NioProtocol.name) - connector.port = httpPort - tomcat.service.addConnector connector - tomcat.connector = connector - } - - tomcat.port = httpPort - tomcat.connector.URIEncoding = 'UTF-8' - - if (httpsPort) { - configureSsl host, httpsPort - } + super.doStart host, httpPort, httpsPort if (Environment.isFork()) { ForkedTomcatServer.startKillSwitch tomcat, httpPort @@ -133,41 +106,12 @@ class InlineExplodedTomcatServer extends TomcatServer { tomcat.start() } - @CompileStatic(TypeCheckingMode.SKIP) - protected void configureSsl(String host, int httpsPort) { - def sslConnector = loadInstance('org.apache.catalina.connector.Connector') - sslConnector.scheme = "https" - sslConnector.secure = true - sslConnector.port = httpsPort - sslConnector.setProperty "SSLEnabled", "true" - sslConnector.setAttribute "keystoreFile", keystoreFile.absolutePath - sslConnector.setAttribute "keystorePass", keyPassword - sslConnector.URIEncoding = 'UTF-8' - - if (host != "localhost") { - sslConnector.setAttribute "address", host - } - - if (truststoreFile.exists()) { - CONSOLE.addStatus "Using truststore $truststore" - sslConnector.setAttribute "truststoreFile", truststore - sslConnector.setAttribute "truststorePass", trustPassword - sslConnector.setAttribute "clientAuth", getConfigParam("clientAuth") ?: "want" - } - - tomcat.service.addConnector sslConnector - } - void stop() { tomcat.stop() tomcat.destroy() GrailsPluginUtils.clearCaches() } - protected loadInstance(String name) { - tomcat.getClass().classLoader.loadClass(name).newInstance() - } - @CompileStatic(TypeCheckingMode.SKIP) protected void preStart() { eventListener?.triggerEvent "ConfigureTomcat", tomcat diff --git a/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy b/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy index c795702..b592834 100644 --- a/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy +++ b/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy @@ -24,6 +24,9 @@ import groovy.transform.CompileStatic import groovy.transform.TypeCheckingMode import org.apache.catalina.Context +import org.apache.catalina.connector.Connector +import org.apache.catalina.startup.Tomcat +import org.apache.coyote.http11.Http11NioProtocol import org.apache.tomcat.util.scan.StandardJarScanner import org.codehaus.groovy.grails.cli.support.GrailsBuildEventListener import org.codehaus.groovy.grails.plugins.GrailsPluginUtils @@ -47,15 +50,18 @@ abstract class TomcatServer implements EmbeddableServer { protected final File workDir protected final File tomcatDir - protected final boolean usingUserKeystore - protected final File keystoreFile - protected final String keyPassword + protected boolean usingUserKeystore + protected File keystoreFile + protected String keyPassword protected String truststore protected File truststoreFile protected String trustPassword protected Boolean shouldScan = false protected Set extraJarsToSkip + Context context + final Tomcat tomcat = new Tomcat() + // These are set from the outside in _GrailsRun def grailsConfig GrailsBuildEventListener eventListener @@ -65,48 +71,90 @@ abstract class TomcatServer implements EmbeddableServer { pluginSettings = GrailsPluginUtils.getPluginBuildSettings() workDir = buildSettings.projectWorkDir - tomcatDir = getWorkDirFile("tomcat") + tomcatDir = getWorkDirFile('tomcat') + tomcat.baseDir = tomcatDir.absolutePath + + initKeystore() + + System.setProperty 'org.mortbay.xml.XmlParser.NotValidating', 'true' + + Map scanConfig = (Map)getConfigParam('scan') + if (scanConfig) { + shouldScan = (Boolean) (scanConfig.enabled instanceof Boolean ? scanConfig.enabled : false) + extraJarsToSkip = (Set)((scanConfig.excludes instanceof Collection) ? scanConfig.excludes.collect { it.toString() } : []) + } + + tomcatDir.deleteDir() + new File(tomcatDir, 'webapps').mkdirs() + } - def userKeystore = getConfigParam("keystorePath") + protected void initKeystore() { + def userKeystore = getConfigParam('keystorePath') if (userKeystore) { usingUserKeystore = true keystoreFile = new File(userKeystore.toString()) - keyPassword = getConfigParam("keystorePassword") ?: "changeit" // changeit is the keystore default + keyPassword = getConfigParam('keystorePassword') ?: 'changeit' // changeit is the keystore default } else { usingUserKeystore = false - keystoreFile = getWorkDirFile("ssl/keystore") - keyPassword = "123456" + keystoreFile = getWorkDirFile('ssl/keystore') + keyPassword = '123456' } - def userTruststore = getConfigParam("truststorePath") + def userTruststore = getConfigParam('truststorePath') if (userKeystore) { truststore = userTruststore - trustPassword = getConfigParam("truststorePassword") ?: "changeit" + trustPassword = getConfigParam('truststorePassword') ?: 'changeit' } else { truststore = "${buildSettings.grailsWorkDir}/ssl/truststore" - trustPassword = "123456" + trustPassword = '123456' } truststoreFile = new File(truststore) + } - System.setProperty 'org.mortbay.xml.XmlParser.NotValidating', 'true' + @CompileStatic(TypeCheckingMode.SKIP) + protected void configureSsl(String host, int httpsPort) { + def sslConnector + try { + sslConnector = loadInstance('org.apache.catalina.connector.Connector') + } + catch (Exception e) { + throw new RuntimeException("Couldn't create HTTPS connector", e) + } - Map scanConfig = (Map)getConfigParam("scan") - if (scanConfig) { - shouldScan = (Boolean) (scanConfig.enabled instanceof Boolean ? scanConfig.enabled : false) - extraJarsToSkip = (Set)((scanConfig.excludes instanceof Collection) ? scanConfig.excludes.collect { it.toString() } : []) + sslConnector.scheme = 'https' + sslConnector.secure = true + sslConnector.port = httpsPort + sslConnector.setProperty 'SSLEnabled', 'true' + sslConnector.URIEncoding = 'UTF-8' + + if (host != 'localhost') { + sslConnector.setAttribute 'address', host } - tomcatDir.deleteDir() - new File(tomcatDir, 'webapps').mkdirs() + sslConnector.setAttribute 'keystoreFile', keystoreFile.absolutePath + sslConnector.setAttribute 'keystorePass', keyPassword + + if (truststoreFile.exists()) { + CONSOLE.addStatus "Using truststore $truststore" + sslConnector.setAttribute 'truststoreFile', truststore + sslConnector.setAttribute 'truststorePass', trustPassword + sslConnector.setAttribute 'clientAuth', getConfigParam('clientAuth') ?: 'want' + } + + tomcat.service.addConnector sslConnector + } + + protected loadInstance(String name) { + tomcat.getClass().classLoader.loadClass(name).newInstance() } protected void configureJarScanner(Context context) { if (extraJarsToSkip && shouldScan) { try { - def jarsToSkipField = ReflectionUtils.findField(StandardJarScanner, "defaultJarsToSkip", Set) + def jarsToSkipField = ReflectionUtils.findField(StandardJarScanner, 'defaultJarsToSkip', Set) ReflectionUtils.makeAccessible jarsToSkipField Set jarsToSkip = (Set)jarsToSkipField.get(StandardJarScanner) jarsToSkip.addAll extraJarsToSkip @@ -122,7 +170,41 @@ abstract class TomcatServer implements EmbeddableServer { * * If httpsPort is > 0, the server should listen for https requests on that port. */ - protected abstract void doStart(String host, int httpPort, int httpsPort) + protected void doStart(String host, int httpPort, int httpsPort) { + tomcat.port = httpPort + + if (getConfigParam("nio")) { + CONSOLE.updateStatus "Enabling Tomcat NIO Connector" + def connector = new Connector(Http11NioProtocol.name) + connector.port = httpPort + tomcat.service.addConnector connector + tomcat.connector = connector + } + + try { + configureJarScanner context + } + catch (Throwable e) { + CONSOLE.error "Error loading Tomcat: $e.message", e + System.exit 1 + } + + tomcat.enableNaming() + + final Connector connector = tomcat.connector + + // Only bind to host name if we aren't using the default + if (host != "localhost") { + connector.setAttribute "address", host + connector.setAttribute "port", httpPort + } + + connector.URIEncoding = "UTF-8" + + if (httpsPort) { + configureSsl host, httpsPort + } + } /** * Shutdown the server. @@ -192,15 +274,15 @@ abstract class TomcatServer implements EmbeddableServer { } getKeyToolClass().main( - "-genkey", - "-alias", "localhost", - "-dname", "CN=localhost,OU=Test,O=Test,C=US", - "-keyalg", "RSA", - "-validity", "365", - "-storepass", "key", - "-keystore", keystoreFile.absolutePath, - "-storepass", keyPassword, - "-keypass", keyPassword) + '-genkey', + '-alias', 'localhost', + '-dname', 'CN=localhost,OU=Test,O=Test,C=US', + '-keyalg', 'RSA', + '-validity', '365', + '-storepass', 'key', + '-keystore', keystoreFile.absolutePath, + '-storepass', keyPassword, + '-keypass', keyPassword) println 'Created SSL Certificate.' } diff --git a/src/groovy/org/grails/plugins/tomcat/fork/TomcatWarRunner.groovy b/src/groovy/org/grails/plugins/tomcat/fork/TomcatWarRunner.groovy index c80a777..4a5d48b 100644 --- a/src/groovy/org/grails/plugins/tomcat/fork/TomcatWarRunner.groovy +++ b/src/groovy/org/grails/plugins/tomcat/fork/TomcatWarRunner.groovy @@ -21,9 +21,7 @@ import groovy.transform.CompileStatic import org.apache.catalina.Context import org.apache.catalina.LifecycleException -import org.apache.catalina.connector.Connector import org.apache.catalina.startup.Tomcat -import org.apache.coyote.http11.Http11NioProtocol import org.grails.plugins.tomcat.TomcatServer /** @@ -37,7 +35,6 @@ class TomcatWarRunner extends TomcatServer { protected static final GrailsConsole CONSOLE = GrailsConsole.getInstance() - protected Tomcat tomcat = new Tomcat() protected String warPath protected String contextPath @@ -46,68 +43,21 @@ class TomcatWarRunner extends TomcatServer { this.contextPath = contextPath } - protected void enableSslConnector(String host, int httpsPort) { - Connector sslConnector - try { - sslConnector = new Connector() - } - catch (Exception e) { - throw new RuntimeException("Couldn't create HTTPS connector", e) - } - - sslConnector.scheme = "https" - sslConnector.secure = true - sslConnector.port = httpsPort - sslConnector.setProperty "SSLEnabled", "true" - sslConnector.setAttribute "keystoreFile", keystoreFile - sslConnector.setAttribute "keystorePass", keyPassword - sslConnector.URIEncoding = "UTF-8" - - if (!host.equals("localhost")) { - sslConnector.setAttribute "address", host - } - - tomcat.service.addConnector sslConnector - } - @Override protected void doStart(String host, int httpPort, int httpsPort) { Metadata.getCurrent()[Metadata.WAR_DEPLOYED] = "true" - tomcat.port = httpPort tomcat.silent = true - if (getConfigParam("nio")) { - CONSOLE.updateStatus "Enabling Tomcat NIO Connector" - def connector = new Connector(Http11NioProtocol.name) - connector.port = httpPort - tomcat.service.addConnector connector - tomcat.connector = connector - } - - tomcat.baseDir = tomcatDir try { - configureJarScanner tomcat.addWebapp(contextPath, warPath) + context = tomcat.addWebapp(contextPath, warPath) } catch (Throwable e) { CONSOLE.error "Error loading Tomcat: $e.message", e System.exit 1 } - tomcat.enableNaming() - - final Connector connector = tomcat.connector - - // Only bind to host name if we aren't using the default - if (!host.equals("localhost")) { - connector.setAttribute "address", host - } - - connector.URIEncoding = "UTF-8" - - if (httpsPort) { - enableSslConnector host, httpsPort - } + super.doStart host, httpPort, httpsPort ForkedTomcatServer.startKillSwitch tomcat, httpPort From 0e8a37f3f7496012f900d3d0ecadaab862863782 Mon Sep 17 00:00:00 2001 From: Zachos Dogkanos Date: Wed, 5 Apr 2017 00:21:21 +0300 Subject: [PATCH 03/11] Remove ecj from BuildConfig --- grails-app/conf/BuildConfig.groovy | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index bafc966..7b85f8f 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -19,13 +19,10 @@ grails.project.dependency.resolution = { dependencies { String tomcatVersion = '8.5.2' - compile "org.apache.tomcat.embed:tomcat-embed-core:$tomcatVersion", { exclude 'ecj' } + compile "org.apache.tomcat.embed:tomcat-embed-core:$tomcatVersion" ['el', 'jasper', 'logging-log4j', 'logging-juli', 'websocket'].each { - runtime "org.apache.tomcat.embed:tomcat-embed-$it:$tomcatVersion", { exclude 'ecj' } + runtime "org.apache.tomcat.embed:tomcat-embed-$it:$tomcatVersion" } - - // TODO use 'org.eclipse.jdt.core.compiler:ecj:4.5' when it's available in Maven Central - runtime 'org.eclipse.scout.sdk.deps:ecj:4.5' } plugins { From 090e0fe0dd90f7b0e4b2843198b831b6d1b5ac41 Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Mon, 18 Apr 2016 21:07:43 -0400 Subject: [PATCH 04/11] added support for HTTP 2 --- .../grails/plugins/tomcat/TomcatServer.groovy | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy b/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy index b592834..d768de1 100644 --- a/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy +++ b/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy @@ -25,6 +25,7 @@ import groovy.transform.TypeCheckingMode import org.apache.catalina.Context import org.apache.catalina.connector.Connector +import org.apache.catalina.core.AprLifecycleListener import org.apache.catalina.startup.Tomcat import org.apache.coyote.http11.Http11NioProtocol import org.apache.tomcat.util.scan.StandardJarScanner @@ -86,6 +87,8 @@ abstract class TomcatServer implements EmbeddableServer { tomcatDir.deleteDir() new File(tomcatDir, 'webapps').mkdirs() + + initListeners() } protected void initKeystore() { @@ -114,6 +117,10 @@ abstract class TomcatServer implements EmbeddableServer { truststoreFile = new File(truststore) } + protected void initListeners() { + tomcat.server.addLifecycleListener new AprLifecycleListener(SSLEngine: 'on', useAprConnector: true) + } + @CompileStatic(TypeCheckingMode.SKIP) protected void configureSsl(String host, int httpsPort) { def sslConnector @@ -134,15 +141,30 @@ abstract class TomcatServer implements EmbeddableServer { sslConnector.setAttribute 'address', host } - sslConnector.setAttribute 'keystoreFile', keystoreFile.absolutePath - sslConnector.setAttribute 'keystorePass', keyPassword - - if (truststoreFile.exists()) { - CONSOLE.addStatus "Using truststore $truststore" - sslConnector.setAttribute 'truststoreFile', truststore - sslConnector.setAttribute 'truststorePass', trustPassword - sslConnector.setAttribute 'clientAuth', getConfigParam('clientAuth') ?: 'want' + def certificateKeyFile = getConfigParam('certificateKeyFile') ?: '' + def certificateFile = getConfigParam('certificateFile') ?: '' + if (certificateKeyFile && certificateFile) { + sslConnector.setAttribute 'SSLHonorCipherOrder', false + sslConnector.setAttribute 'SSLCertificateKeyFile', certificateKeyFile + sslConnector.setAttribute 'SSLCertificateFile', certificateFile + def certificateKeyPassword = getConfigParam('certificateKeyPassword') ?: '' + if (certificateKeyPassword) { + sslConnector.setAttribute 'SSLPassword', certificateKeyPassword + } } + else { + sslConnector.setAttribute 'keystoreFile', keystoreFile.absolutePath + sslConnector.setAttribute 'keystorePass', keyPassword + + if (truststoreFile.exists()) { + CONSOLE.addStatus "Using truststore $truststore" + sslConnector.setAttribute 'truststoreFile', truststore + sslConnector.setAttribute 'truststorePass', trustPassword + sslConnector.setAttribute 'clientAuth', getConfigParam('clientAuth') ?: 'want' + } + } + + sslConnector.addUpgradeProtocol loadInstance('org.apache.coyote.http2.Http2Protocol') tomcat.service.addConnector sslConnector } From 8b4db500b59cb95dc24e81fce98455a701e2effb Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Mon, 18 Apr 2016 21:15:59 -0400 Subject: [PATCH 05/11] update to Grails 2.5.3 --- application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application.properties b/application.properties index 0723244..8e4494e 100644 --- a/application.properties +++ b/application.properties @@ -1 +1 @@ -app.grails.version=2.5.1 +app.grails.version=2.5.3 From 54cf89c7912f6d974f94659309ecf08d9a5c7832 Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Mon, 18 Apr 2016 21:24:19 -0400 Subject: [PATCH 06/11] update alias to agree with Tomcat default --- src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy b/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy index d768de1..3ef74e3 100644 --- a/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy +++ b/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy @@ -297,7 +297,7 @@ abstract class TomcatServer implements EmbeddableServer { getKeyToolClass().main( '-genkey', - '-alias', 'localhost', + '-alias', 'tomcat', '-dname', 'CN=localhost,OU=Test,O=Test,C=US', '-keyalg', 'RSA', '-validity', '365', From 067cb5dfeb8371b69bb5ae0b20372d41869d98d9 Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Mon, 18 Apr 2016 21:30:00 -0400 Subject: [PATCH 07/11] updated wrapper --- grailsw | 4 ++-- grailsw.bat | 6 +++--- wrapper/grails-wrapper-runtime-2.5.1.jar | Bin 6185 -> 0 bytes wrapper/grails-wrapper-runtime-2.5.3.jar | Bin 0 -> 6169 bytes wrapper/grails-wrapper.properties | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 wrapper/grails-wrapper-runtime-2.5.1.jar create mode 100644 wrapper/grails-wrapper-runtime-2.5.3.jar diff --git a/grailsw b/grailsw index 99ab2f9..309e8b3 100755 --- a/grailsw +++ b/grailsw @@ -132,7 +132,7 @@ fi if [ -z "$STARTER_CONF" ]; then STARTER_CONF="$GRAILS_HOME/conf/groovy-starter.conf" fi -STARTER_CLASSPATH="wrapper/grails-wrapper-runtime-2.5.1.jar:wrapper:." +STARTER_CLASSPATH="wrapper/grails-wrapper-runtime-2.5.3.jar:wrapper:." # Allow access to Cocoa classes on OS X if $darwin; then @@ -200,7 +200,7 @@ if $mingw ; then fi if [ -z "$GRAILS_AGENT_CACHE_DIR" ]; then - GRAILS_AGENT_CACHE_DIR=~/.grails/2.5.1/ + GRAILS_AGENT_CACHE_DIR=~/.grails/2.5.3/ fi SPRINGLOADED_PARAMS=profile=grails\;cacheDir=$GRAILS_AGENT_CACHE_DIR if [ ! -d "$GRAILS_AGENT_CACHE_DIR" ]; then diff --git a/grailsw.bat b/grailsw.bat index 3e762c0..32f7032 100644 --- a/grailsw.bat +++ b/grailsw.bat @@ -60,7 +60,7 @@ if "%GRAILS_HOME:~-1%"=="\" SET GRAILS_HOME=%GRAILS_HOME:~0,-1% :init for %%x in ("%USERPROFILE%") do set SHORTHOME=%%~fsx -if "x%GRAILS_AGENT_CACHE_DIR%" == "x" set GRAILS_AGENT_CACHE_DIR=%SHORTHOME%/.grails/2.5.1/ +if "x%GRAILS_AGENT_CACHE_DIR%" == "x" set GRAILS_AGENT_CACHE_DIR=%SHORTHOME%/.grails/2.5.3/ set SPRINGLOADED_PARAMS="profile=grails;cacheDir=%GRAILS_AGENT_CACHE_DIR%" if not exist "%GRAILS_AGENT_CACHE_DIR%" mkdir "%GRAILS_AGENT_CACHE_DIR%" @@ -140,7 +140,7 @@ set CMD_LINE_ARGS=%$ :execute @rem Setup the command line -set STARTER_CLASSPATH=wrapper/grails-wrapper-runtime-2.5.1.jar;wrapper;. +set STARTER_CLASSPATH=wrapper/grails-wrapper-runtime-2.5.3.jar;wrapper;. if exist "%USERPROFILE%/.groovy/init.bat" call "%USERPROFILE%/.groovy/init.bat" @@ -169,7 +169,7 @@ set JAVA_OPTS=%GRAILS_OPTS% %JAVA_OPTS% %AGENT% set JAVA_OPTS=%JAVA_OPTS% -Dprogram.name="%PROGNAME%" set JAVA_OPTS=%JAVA_OPTS% -Dgrails.home="%GRAILS_HOME%" -set JAVA_OPTS=%JAVA_OPTS% -Dgrails.version=2.5.1 +set JAVA_OPTS=%JAVA_OPTS% -Dgrails.version=2.5.3 set JAVA_OPTS=%JAVA_OPTS% -Dbase.dir=. set JAVA_OPTS=%JAVA_OPTS% -Dtools.jar="%TOOLS_JAR%" set JAVA_OPTS=%JAVA_OPTS% -Dgroovy.starter.conf="%STARTER_CONF%" diff --git a/wrapper/grails-wrapper-runtime-2.5.1.jar b/wrapper/grails-wrapper-runtime-2.5.1.jar deleted file mode 100644 index 32f84e53748520dc98deb7ade0c26f4c86514a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6185 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 ScW1@Ey^v@Cfb7G&xBmfOs{^e7 diff --git a/wrapper/grails-wrapper-runtime-2.5.3.jar b/wrapper/grails-wrapper-runtime-2.5.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..e17a04720506d2d17b3c2a7207e1247fb655d1ec GIT binary patch literal 6169 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 Date: Sat, 30 Apr 2016 20:49:03 -0400 Subject: [PATCH 08/11] fix for #18 --- src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy b/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy index 3ef74e3..50af93b 100644 --- a/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy +++ b/src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy @@ -105,7 +105,7 @@ abstract class TomcatServer implements EmbeddableServer { } def userTruststore = getConfigParam('truststorePath') - if (userKeystore) { + if (userTruststore) { truststore = userTruststore trustPassword = getConfigParam('truststorePassword') ?: 'changeit' } From a67609575cec1e7b4233c2d6bc6bab6a29377634 Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Sat, 30 Apr 2016 20:49:35 -0400 Subject: [PATCH 09/11] bumped the minimum Grails version to 2.5 --- TomcatGrailsPlugin.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TomcatGrailsPlugin.groovy b/TomcatGrailsPlugin.groovy index 2bc792a..08fc3bc 100644 --- a/TomcatGrailsPlugin.groovy +++ b/TomcatGrailsPlugin.groovy @@ -15,7 +15,7 @@ */ class TomcatGrailsPlugin { def version = '8.5.2' - def grailsVersion = '2.3 > *' + def grailsVersion = '2.5 > *' def scopes = [excludes: 'war'] def title = 'Apache Tomcat plugin' def description = 'Makes Tomcat 8.5.x the servlet container for Grails at development time' From 89faa3df7d90926ed84f87bee00867167b8b4c74 Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Sat, 30 Apr 2016 20:49:48 -0400 Subject: [PATCH 10/11] cleanup --- src/groovy/org/grails/plugins/tomcat/TomcatLoader.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/groovy/org/grails/plugins/tomcat/TomcatLoader.groovy b/src/groovy/org/grails/plugins/tomcat/TomcatLoader.groovy index 6d2da97..2e901dc 100644 --- a/src/groovy/org/grails/plugins/tomcat/TomcatLoader.groovy +++ b/src/groovy/org/grails/plugins/tomcat/TomcatLoader.groovy @@ -28,7 +28,7 @@ import org.slf4j.Logger import org.slf4j.LoggerFactory /** - * A loader instance used for the embedded version of Tomcat 8. + * A loader instance used for the embedded version of Tomcat. * * @author Graeme Rocher * @since 2.0 From 6c08b3af09e712e43f5e04d4a9666894ac644b3d Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Sat, 30 Apr 2016 21:39:19 -0400 Subject: [PATCH 11/11] fix for #14 --- .../tomcat/InlineExplodedTomcatServer.groovy | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/groovy/org/grails/plugins/tomcat/InlineExplodedTomcatServer.groovy b/src/groovy/org/grails/plugins/tomcat/InlineExplodedTomcatServer.groovy index 656bc0e..e85bf84 100644 --- a/src/groovy/org/grails/plugins/tomcat/InlineExplodedTomcatServer.groovy +++ b/src/groovy/org/grails/plugins/tomcat/InlineExplodedTomcatServer.groovy @@ -27,6 +27,7 @@ import org.apache.catalina.Loader import org.apache.catalina.WebResourceRoot import org.apache.catalina.startup.Tomcat import org.apache.catalina.webresources.StandardRoot +import org.apache.tomcat.util.descriptor.web.ContextResource import org.codehaus.groovy.grails.plugins.GrailsPluginUtils import org.grails.plugins.tomcat.fork.ForkedTomcatServer @@ -128,16 +129,16 @@ class InlineExplodedTomcatServer extends TomcatServer { return } - if (!resCfg["type"]) { + if (!resCfg.type) { throw new IllegalArgumentException("Must supply a resource type for JNDI configuration") } - def res = loadInstance('org.apache.catalina.deploy.ContextResource') - res.name = name - res.type = resCfg.remove("type") - res.auth = resCfg.remove("auth") - res.description = resCfg.remove("description") - res.scope = resCfg.remove("scope") + def res = new ContextResource( + auth: resCfg.remove('auth'), + description: resCfg.remove("description"), + name: name, + scope: resCfg.remove('scope'), + type: resCfg.remove('type')) // now it's only the custom properties left in the Map... resCfg.each { key, value -> res.setProperty key, value }