2011-01-22 3 views
5

Tomcatエンジン上に実行中のサーブレットがあります。 Javaファイルをコンパイルして戦争を構築するとき、Tomcatはそれをリロードするのに不確定な時間がかかります。時には3秒、場合によっては30秒などです。現在の回避策は、tomcatを停止し、シェルスクリプトを使用して再起動することです。 autodeployとreloadableフラグをtrueに設定しましたが、確実に動作しません。どのようにこれを行うにはどのようなアイデア?ポインタも高く評価されています。これは、ubuntuのtomcat v6.0.20に関するものです。ここでTomcatに最近コンパイルされたクラス/ warファイルをリロードする方法

は私たちのconf/server.xmlファイルの抽出物である:

<Engine name="Catalina" defaultHost="localhost"> 

    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
     resourceName="UserDatabase"/> 

    <Host name="localhost" appBase="webapps" 
     unpackWARs="true" autoDeploy="true" 
     xmlValidation="false" xmlNamespaceAware="false"> 

    <DefaultContext reloadable="true"> 
    </DefaultContext> 

    <!-- SingleSignOn valve, share authentication between web applications 
     Documentation at: /docs/config/valve.html --> 
    <!-- 
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
    --> 

    </Host> 
</Engine> 

答えて

6

一つの可能​​性はTomcat Manager Appに適切な要求を送信することです。例えば

http://localhost:8080/manager/text/reload?path=/examples 
+0

我々はこの問題を回避するスクリプトで何をしているかであること - Tomcatを停止し、数秒間(スリープ)を待って、もう少し寝てから、URLリクエスト(wget $ tomcatURL)を送信してください。半分の時間が経過したらエラーメッセージが表示され、その場合はスクリプトを再実行します。エラーメッセージが表示されず、HTMLコンテンツを取得できないときは、tomcatが現在のwar/classファイルで始まっていることがわかります。デーモンを始めるには本当にお粗末な方法ですが、私は言うでしょう。 –

1

この問題が発生している場合は、jettyを強くお勧めします。これはあなたのコードに埋め込み可能なので、コード内でクラスを実行してwebapp用のサーバを起動することができます!

ビルド環境として使用する場合は、Eclipseでアプリケーションをデバッグすることができます(私はEclipseでデバッグするTomcatアプリケーションを覚えていますが、どうしたら忘れてしまったのでしょうか)、または桟橋(ant jetty) jettyプラグイン(mvn jetty:run)を使用してjettyサーバーを起動するには、mavenを使用してください。

jettyでは、Tomcatと同様のサーバーをホストすることもできます。ここでは、新しい戦争をコピーしてすぐに影響します。

私たちは、サポートが慣れているのでTomcatをサーバーアプリケーションに使用していますが、開発のためには桟橋が不可欠です。

0

時々私は何をすべきかは、Tomcatのからフォルダやクラスを削除で/仕事/カタリナ/ ...

関連する問題