Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat 在我的代码中停止\启动连接器_Tomcat_Connector - Fatal编程技术网

Tomcat 在我的代码中停止\启动连接器

Tomcat 在我的代码中停止\启动连接器,tomcat,connector,Tomcat,Connector,我需要停止,然后以编程方式启动https连接器。 在tomcat 6中,以下代码片段可以正常工作: final ObjectName objectNameQuery = new ObjectName("*:type=Connector,port=443,*"); MBeanServer mbeanServer = null; ObjectName objectName = null; for (final

我需要停止,然后以编程方式启动https连接器。 在tomcat 6中,以下代码片段可以正常工作:

        final ObjectName objectNameQuery = new ObjectName("*:type=Connector,port=443,*"); 
        MBeanServer      mbeanServer = null;
        ObjectName       objectName  = null;

        for (final MBeanServer server : (List<MBeanServer>) MBeanServerFactory.findMBeanServer(null))
        {
            if (server.queryNames(objectNameQuery, null).size() > 0)
            {
                mbeanServer     = server;
                objectName      = (ObjectName) server.queryNames(objectNameQuery, null).toArray()[0];

                break;
            }
        }

        // now we restart the connector that we just found. We sleep a little, but I am
        // not actually sure 1) how long we should sleep for or 2) if sleeping is
        // necessary at all.
        if (mbeanServer != null)
        {
            mbeanServer.invoke(objectName, "stop", null, null);                

            Thread.sleep(waitForStopInSec * 1000);

            mbeanServer.invoke(objectName, "start", null, null);

            log.warn("https Connector was restarted");
        }
你知道如何在tomcat 7中停止然后启动连接器吗?最好以优雅的方式。 提前感谢,,
盖伊

这取决于你如何定义“停止”。默认情况下,Tomcat在init()期间绑定到端口,在destroy()期间解除绑定。在默认情况下,stop()只停止处理新连接,但可能不会停止这些连接(取决于底层操作系统)


如果在server.xml中为连接器设置bindOnInit=“false”,可能会得到更好的结果。使用此设置,调用start()时端口将被绑定,调用stop()时端口将被解除绑定。

Mark,感谢您的响应。如何启动()和停止()连接器?它是否像我在文章中那样在连接器MBean上使用操作?或者有更好的方法?他们认为你这样做会奏效。如果可能的话,更好的方法是获取对实际连接器对象的引用,而不是通过JMX。这有多容易取决于您是如何启动Tomcat实例的。听起来不错,但我不知道您所说的“…您是如何启动Tomcat实例”是什么意思。。。如何获取连接器?可能通过监听器(ServletContextListener)?不清楚您是否编写了web应用程序(在这种情况下JMX与任何方法一样好),或者您是否嵌入了Tomcat,在这种情况下,我希望您能够直接访问连接器对象。再次感谢您。也许我必须解释一下我的动机:我正在使用https连接器进行相互认证。问题是证书可能会更改,因此我必须使用新的SSLSocket。在tomcat6中,我使用了上面的代码(stop()和start()之后的代码),它工作得非常好。在tomcat7中,它不工作!我注意到(netstat-a)stop()之后tomcat仍然使用端口443。我希望443在stop()之后是自由的。我尝试销毁(),但连接器再次启动失败。有什么想法吗?
28/03/12 18:32:01 ERROR T:CommServerScheduler_Worker-1 TrustStoreRefreshJob.refreshHTTPSConnectors - failed to restart connector 
javax.management.InstanceNotFoundException:    Catalina:type=Connector,port=443,address="/192.168.201.24"
     at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
     at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:833)
     at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
     at tool.security.TrustStoreRefreshJob.refreshHTTPSConnectors(TrustStoreRefreshJob.java:79)
     at tool.security.TrustStoreRefreshJob.executeJob(TrustStoreRefreshJob.java:32)
     at com.nextnine.common.scheduler.AbstractJobLogic.execute(AbstractJobLogic.java:47)
     at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
     at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)