Java を介してプログラムで Tomcat (ローカルホスト上) を管理する方法を探しています。Tomcat を開始/停止し、WAR をデプロイしたい。
どんな助けでも大歓迎です。
アプリに埋め込まれた Tomcat を実行できます。
Java Runtime クラスを使用して、bat ファイルを呼び出すことができます。Java プロセスを実行しているユーザーに、Tomcat を開始および停止する権限があることを確認してください。
try{
Runtime.getRuntime().exec("c:/program files/tomcat/bin/startup.bat");
} catch(IOException e) {System.out.println("exception");}
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/
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(); を呼び出すのはかなり簡単です。
個々の 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
}
}
tomcat managerを使用するか、そのソースを参照して、 manager がデプロイ操作を処理する方法を学習できます。