0

我将我的 grails 应用程序从 2.2.4 升级到 grails 2.3.2。我以前使用 _Events.groovy eventConfigureTomcat() 闭包从 apache httpd mod_jk 建立 ajp 连接。升级的时候发现这个已经不支持了,但是推荐的方法是实现 org.grails.plugins.tomcat.ForkedTomcatCustomizer customize() 方法,这样我就可以建立ajp连接器了。 请参阅 grails 文档并在 ForkedTomcatConnector 上进行搜索

我的问题是代码永远不会被调用。

我在 /src/groovy 目录中实现了 ForkedTomcatCustomizer。这是代码:

package org.grails.plugins.tomcat

import grails.util.Environment
import org.apache.catalina.connector.Connector
import org.apache.catalina.startup.Tomcat

/**
 * Forked tomcat customizer adds ajp connect to support apache ajp in dev env
 * from within IDE
 */
class ForkedTomcatCustomizer
{
    void customize(Tomcat tomcat)
    {
        println("In the ForkedTomcatCustomizer.customize() method")
        if (Environment.getCurrent() == Environment.DEVELOPMENT)
        {
            def ajpConnector = new Connector("org.apache.coyote.ajp.AjpProtocol")
            ajpConnector.port = 8009
            ajpConnector.protocol = "AJP/1.3"
            ajpConnector.redirectPort = 8443
            ajpConnector.enableLookups = false
            ajpConnector.setProperty("redirectPort", "8443")
            ajpConnector.setProperty("protocol", "AJP/1.3")
            ajpConnector.setProperty("enableLookups", "false")
            tomcat.service.addConnector ajpConnector
            println "Added ajp connector"
        }
    }
}

有人看到/解决了这个问题吗?

4

1 回答 1

0

这似乎是一个错误。

请参阅下面的代码片段TomcatDevelopmentRunner......forkedClassLoader当被调用时成员仍然为空invokeCustomizer(来自超类构造函数)......如您所见,NPE 被吞下并且进程静默失败......

    private void invokeCustomizer(Tomcat tomcat) {
        Class cls = null
        try {
            cls = forkedClassLoader.loadClass("org.grails.plugins.tomcat.ForkedTomcatCustomizer")
        } catch (Throwable e) {
            // ignore
        }
        ...
于 2013-11-08T14:19:51.510 回答