1

Java を介してプログラムで Tomcat (ローカルホスト上) を管理する方法を探しています。Tomcat を開始/停止し、WAR をデプロイしたい。

どんな助けでも大歓迎です。

4

6 に答える 6

2

アプリに埋め込まれた Tomcat を実行できます。

于 2012-04-06T22:01:27.730 に答える
1

Java Runtime クラスを使用して、bat ファイルを呼び出すことができます。Java プロセスを実行しているユーザーに、Tomcat を開始および停止する権限があることを確認してください。

try{
Runtime.getRuntime().exec("c:/program files/tomcat/bin/startup.bat");
} catch(IOException e) {System.out.println("exception");}
于 2012-04-06T17:16:28.553 に答える
1

java を介して tomcat を開始/停止する方法は、bootstrap.jar で実行を呼び出し (ランタイム クラスを使用)、サンプル パラメータを使用することです: -Dcatalina.home=c:/tomcat/

ant が tomcat start stop を実行する方法を確認するサンプル コード:

http://ptrthomas.wordpress.com/2006/03/25/how-to-start-and-stop-tomcat-from-ant

外部プログラムが Java からどのように実行されるかを確認するためのサンプル コード: http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/

于 2012-04-06T16:50:59.947 に答える
1

Tomcat をプログラムで管理するには、JMX と Tomcat のビルトイン MBean の機能を確認することをお勧めします。

本質的には、独自の Java ベースの JMX クライアントを作成して RMI 経由で MBean と通信するか、マネージャー アプリケーションで JMX Http プロキシを利用し、プレーンな古い http リクエストを使用して tomcat インスタンスのスクリプトと管理を行うことができます。

JMX と Tomcat 6 の参考資料: http://www.datadisk.co.uk/html_docs/java_app/tomcat6/tomcat6_jmx.htm

Manager App と JMX Http Proxy の参考資料: http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#JMX_Set_command

WAR をかなり簡単に展開および展開解除できるはずです。

Tomcat をシャットダウンできる既存の MBean はないと思いますが、自分で実装して System.exit(); を呼び出すのはかなり簡単です。

于 2012-04-06T18:57:45.020 に答える
0

個々の Tomcat コネクタを再起動できます。つまり、アプリケーションが実行されている 8843 のようなポートを再起動できます。これが必要になるシナリオの 1 つは、API を介して署名付き証明書を取得する場合、またはトラストストアを変更する場合です。

これは、証明書を追加/削除した後に tomcat コネクタを再起動するために使用している完全なコード/方法です。

    public void refreshTrustStore() throws Exception 
    {
        try 
        {   
            //following line need to be replaced based on where you get your port. It may be passed in as argument
            String httpsPort = configurationManager.getHttpsPort();
            String objectString = "*:type=Connector,port=" + httpsPort + ",*";

            final ObjectName objectNameQuery = new ObjectName(objectString); 

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

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

                    // Polling sleep to reduce delay to safe minimum.
                    // Use currentTimeMillis() over nanoTime() to avoid issues
                    // with migrating threads across sleep() calls.
                    long start = System.currentTimeMillis();
                    // Maximum of 6 seconds, 3x time required on an idle system.
                    long max_duration = 6000L;
                    long duration = 0L;
                    do
                    {
                        try
                        {
                            Thread.sleep(100);
                        }
                        catch (InterruptedException e)
                        {
                            Thread.currentThread().interrupt();
                        } 

                        duration = (System.currentTimeMillis() - start);
                    } while (duration < max_duration &&
                    server.queryNames(objectNameQuery, null).size() > 0);

              // Use below to get more accurate metrics.
            String message = "TrustStoreManager TrustStore Stop: took " + duration + "milliseconds";
            logger.information(message);

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

            break;
        }
    }
} 
catch (Exception exception) 
{
    //Log and throw exception
    throw exception
}

}

于 2015-10-13T17:13:47.277 に答える
0

tomcat managerを使用するか、そのソースを参照して、 manager がデプロイ操作を処理する方法を学習できます。

于 2012-04-06T18:20:49.027 に答える