1

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(7.0.23)では、コネクタは停止しません!そこで、次のコード行を使用して、destroy()メソッドを呼び出しました(stop()メソッドを呼び出した直後)。mbeanServer.invoke(objectName、 "destroy"、null、null);

この場合、コネクタは実際に停止しました。しかし、起動しようとすると、コネクタが起動せず、次の例外が発生しました。

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)

tomcat 7でコネクタを停止してから開始する方法についてのアイデアはありますか?優雅な方法で好ましい。よろしくお願いします、ガイ

4

1 に答える 1

2

「停止」をどのように定義しているかによって異なります。デフォルトでは、Tomcat は init() 中にポートにバインドし、destroy() 中にバインドを解除します。デフォルトの場合、stop() は新しい接続の処理を停止するだけですが、確立されている接続を停止しない場合があります (とりわけ、基盤となる OS によって異なります)。

server.xml でコネクタに bindOnInit="false" を設定すると、より良い結果が得られる場合があります。この設定により、start() が呼び出されたときにポートがバインドされ、stop() が呼び出されたときにポートがアンバインドされます。

于 2012-03-28T18:51:17.883 に答える