2011-12-20 5 views
1

私はherokuアプリケーションの組み込みのtomcatの設定を変更しようとしています。私は単純な埋め込みのtomcatを設定するwikiのリンクを使ってheroku appをインストールしました。 組み込みのtomcat webappのコンフィグレーションを変更する

http://devcenter.heroku.com/articles/create-a-java-web-application-using-embedded-tomcat

ソースコード

はここにある:

public static void main(String[] args) throws Exception { 

    String webappDirLocation = "src/main/webapp/"; 
    Tomcat tomcat = new Tomcat(); 

    //The port that we should run on can be set into an environment variable 
    //Look for that variable and default to 8080 if it isn't there. 
    String webPort = System.getenv("PORT"); 
    if(webPort == null || webPort.isEmpty()) { 
     webPort = "8080"; 
    } 

    tomcat.setPort(Integer.valueOf(webPort)); 

    tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath()); 
    System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath()); 

    tomcat.start(); 
    tomcat.getServer().await(); 

} 

質問:

  1. 私は組み込みのTomcatを使用していますので、私は自分のWebアプリケーションのデフォルトのセッションタイムアウトを設定しますか?それは何らかの理由で30分にデフォルト設定されているようですか?私は1週間のようなものにしたい。
  2. eclipseからアプリケーションを起動した場合、Javaコードを変更するたびにアプリケーションをコンパイルして再起動する必要がないように、autodeploy = trueを設定するにはどうすればよいですか?
  3. 私のweb.xmlとserver.xmlを設定する方法はありますか?
  4. apache tomcat managerを実行するにはどうすればよいですか?

インターネット上のドキュメントはあまり明確ではありません。あなたは助けてもらえますか?事前に

おかげ.. キラン

+0

セッションタイムアウトはweb.xmlで設定されています。 web.xmlをappの設定に使用することは、埋め込みのTomcatを使って変更しないでください。 –

答えて

1

使用Context.setSessionTimeout(int型)。 Java docs here

package launch; 
import java.io.File; 
import org.apache.catalina.startup.Tomcat; 
import org.apache.catalina.Context; 


public class Main { 

    public static void main(String[] args) throws Exception { 

     String webappDirLocation = "src/main/webapp/"; 
     Tomcat tomcat = new Tomcat(); 

     //The port that we should run on can be set into an environment variable 
     //Look for that variable and default to 8080 if it isn't there. 
     String webPort = System.getenv("PORT"); 
     if(webPort == null || webPort.isEmpty()) { 
      webPort = "8080"; 
     } 

     tomcat.setPort(Integer.valueOf(webPort)); 

     Context ctx = tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath()); 
     ctx.setSessionTimeout(2592000); 
     System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath()); 

     tomcat.start(); 
     tomcat.getServer().await(); 
    } 
} 

お知らせContext ctx = ...ctx.setSessionTimeout(...):ここでは30日に設定セッションタイムアウトと同じメインクラスです。

Tomcat Managerは、この方法でアプリケーションにTomcatを埋め込むときには使用できません。私はあなたがTomcat Managerを使いたいと思っていますか?

通常は、server.xmlから行うことは、埋め込みAPI経由で行うことができます。埋め込みの全ポイントは、プログラムですべてを構成することです。

通常どおり自分でweb.xmlを設定することはできます。 ディレクトリに、webappDirLocationとして渡すディレクトリの下に追加してください。しかし、再び、私はあなたがweb.xmlに入れたいと思うものが好奇妙ですか?メインのアプリケーションループを "所有"しているので、必要な設定をメインの方法から設定できます。メインループで必要なものをすべて初期化し、環境固有のもの(たとえば、JDBC URL)のOS環境変数を読み込むことを強くお勧めします。

最後に、Eclipseの場合、コンテナデプロイメントモデルを使用していないため、ホットデプロイメントはもう必要ありません。 「Debug as ...」を使用してEclipse内からアプリケーションを実行するだけで、Eclipseはコードを変更するときにコードを自動的にコンパイルして再読み込みします。ホットデプロイとまったく同じではありません。たとえば、新しいメソッドシグネチャでクラスをホットリロードすることはありません。しかし、コンテナを使用する場合と比べてアプリケーション全体を循環させるほうがはるかに速いので、全体的に見ると、はるかに生産性が高いことがわかります。

関連する問題