2011-12-20 3 views
1

Я пытаюсь изменить встроенную конфигурацию tomcat для своего приложения heroku. Я установил приложение heroku, используя ссылку wiki ниже, которая настраивает простой встроенный tomcat.Изменение конфигурации для Embedded 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, как настроить по умолчанию время ожидания сеанса для моего веб-приложения? По какой-то причине кажется, что по умолчанию не работает 30 минут? Я хочу установить что-то вроде одной недели.
  2. Если я запускаю приложение из eclipse, как установить autodeploy = true, чтобы мне не приходилось компилировать и перезапускать мое приложение каждый раз, когда я изменяю код Java?
  3. есть способ установить мой web.xml и server.xml?
  4. Как запустить apache tomcat manager?

Документация в Интернете не очень ясна. Не могли бы вы помочь?

Заранее спасибо .. Киран

+0

Тайм-аут сеанса только что настроен в web.xml, правильно? Использование web.xml для конфигурации приложения не должно меняться со встроенным tomcat. –

ответ

1

Использование Context.setSessionTimeout (INT). Java docs here. Вот тот же самый Основной класс с тайм-аут сеанса установлен в 30 дней:

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(...).

Что касается Tomcat Manager, вы не можете использовать его, когда встраиваете Tomcat в приложение таким образом. Мне любопытно, для чего вы хотели бы использовать Tomcat Manager?

Все, что вы обычно делали бы с server.xml, вы можете использовать с помощью встроенного API. Весь смысл внедрения заключается в том, что вы все программируете.

Вы по-прежнему можете настроить свой собственный web.xml, как обычно. Просто добавьте его в каталог WEB-INF под каталогом, который вы передаете как webappDirLocation. Но опять же, мне любопытно, что вы хотели бы поставить в web.xml? Поскольку вы «владеете» основным циклом приложения, вы можете настроить любую конфигурацию, необходимую вам из основного метода. Я настоятельно рекомендую практиковать инициализацию всего, что вам нужно, в основном цикле и чтение переменных среды ОС для всего, что является специфичным для среды (например, URL-адрес JDBC).

Наконец, что касается Eclipse, вам больше не нужно горячее развертывание, потому что вы не используете модель развертывания контейнера. Вы можете просто запустить приложение из Eclipse с помощью «Debug as ...», а Eclipse автоматически скомпилирует и перезагрузит код при его изменении. Это не похоже на горячее развертывание. Например, это не будет горячая перезагрузка классов с новыми сигнатурами метода. Но гораздо быстрее циклировать все приложение по сравнению с использованием контейнера, поэтому в целом я считаю его гораздо более продуктивным.

Смежные вопросы