2009-10-05 4 views
7

Mam drzewo źródłowe dla pliku .war, który muszę zmodyfikować, aby można było dodać pewne informacje konfiguracyjne specyficzne dla aplikacji (w tym przypadku ciąg połączenia jdbc, ale mogę mieć inne zasoby, takie jak zasoby). Jakie są najlepsze praktyki, gdzie umieścić informacje konfiguracyjne i jak uzyskać do nich dostęp z serwletu?gdzie/jak skonfigurować zasoby konfiguracyjne dla plików .war Tomcat

Domyślam się, że to Tomcat configuration reference ma z tym coś wspólnego, ale moje oczy przyćmią, kiedy spróbuję je przeczytać.

Odpowiedz

4

Dla konkretnego przypadku ciągu połączenia JDBC, polecam zamiast tego używać puli połączeń zarządzanej przez Tomcat. Możesz przeczytać więcej na ten temat: http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html

To więcej pracy, ale myślę, że na dłuższą metę będzie lepiej Ci służyć.

+0

dzięki ...Prawdopodobnie masz rację co do dłuższego czasu, ale jest to prawdopodobnie jedyna aplikacja Tomcat, nad którą będę pracował przez długi czas. + Nie mam zbyt dużo wolnego czasu, aby wymyślić jak poprawić moją aplikację. Dokumenty Apache nie są bardzo jasne. –

+0

ma to trochę więcej sensu, po spędzeniu czasu wyciągając moje włosy (niestety ...) i po obejrzeniu pliku JIRA server.xml. Jak jednak uzyskać dostęp do DataSource z poziomu mojej aplikacji Java? Przykładowa strona podaje przykład JSP, ale nie kodu Java. –

+0

Obejmują one kilka przykładów poniżej (np. W sekcji PostgreSQL, krok 4). –

5

Do konfiguracji aplikacji internetowej można umieścić config na ścieżce klas gdzieś. Wtedy można się do niego dostać z aplikacji z getResourceAsStream lub jeśli wolisz wiosny:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
    <list> 
     <value>classpath:my-config.properties</value> 
    </list> 
    </property> 
</bean> 

Istnieje wiele miejsc, gdzie można umieścić na ścieżce klasy właściwości w Tomcat. w porządku to wygląda na:

/WEB-INF/classes of your web application 
/WEB-INF/lib/*. jar of your web application 
$CATALINA_HOME/common/classes 
$CATALINA_HOME/common/endorsed/*.jar 
$CATALINA_HOME/common/i18n/*.jar 
$CATALINA_HOME/common/lib/*. jar 
$CATALINA_BASE/shared/classes 
$CATALINA_BASE/shared/lib/*.jar 

Na przykład, jeśli umieścisz my-config.properties zarówno w .jar i WEB-INF/klas jeden w WEB-INF/klas zostaną wykorzystane. Możesz użyć tego mechanizmu domyślnie, aby przetestować config i zastąpić prod config na serwerach prod.

+0

Co z przeciwieństwem? Jeśli chcę mieć plik właściwości wewnątrz aplikacji WWW, na wypadek gdyby nie można było znaleźć Tomcata. Czy jest jakiś sposób na zrobienie tego? – enkara

+0

Czy WEB_INF/classes nie jest w twojej aplikacji internetowej? – leonm

1

Hmm. Wygląda na to, że najprostszą ścieżką do uzyskania tego, co chcę, po stronie Java aplikacji, jest użycie Servlet.getServletConfig().getInitParameter(parameterName) np. getInitParameter ("myApp.connectionString");

Ale nie wiem, gdzie to ustawić. Tomcat docs mówi o różnych permutacjach pliku context.xml, ale chcę się upewnić, że ten parametr dotyczy tylko mojego serwletu, a nie innych. Nie chcę również umieszczać go w pliku .war, aby ten parametr był niezależny od aplikacji (na przykład po zainstalowaniu aktualizacji).


Aktualizacja: I zorientowaliśmy się, kluczowe parametry/wartość przystosowane przez ServletContext.getInitParameter() iść tutaj (lub może przejść tutaj) w $ {CATALINA_HOME} /conf/server.xml:

<Server port=... > 
    ... 
    <Service name="Catalina" ...> 
    <Engine name="Catalina" ...> 
     ... 
     <Host name="localhost" ...> 
     <Context path="/myWarFile"> 
      <Parameter name="foo" value="123" /> 
      <Parameter name="bar" value="456" /> 
      ... 
     </Context> 
     </Host> 
    </Engine> 
    </Service> 
</Server> 

To ustawia dwa parametry, "foo" = "123", "bar" = "456" dla serwletu myWarFile.war (lub dokładniej ze ścieżką URL /myWarFile) i mogę uzyskać do nich dostęp w Javie z Servlet.getServletConfig().getInitParameter("foo") lub Servlet.getServletConfig().getInitParameter("bar").

ja również spojrzał na Jira za wejściem server.xml (i what they tell you to set it to for MySQL), używają Resource zamiast Parameter, nie całkiem pewny subtelności tego, ale wydaje się, że to może być bardziej odpowiedni sposób.

<Server port=... > 
    <Service name="Catalina" ...> 
    <Engine name="Catalina" ...> 
     <Host name="localhost" ...> 
     <Context path="/jira" docBase="${catalina.home}/atlassian-jira" 
      reloadable="false"> 
      <Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource" 
      username="jirauser" 
      password="..." 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost/jiradb1?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF8" 
      maxActive="20" 
      validationQuery="select 1" 
      /> 
     </Context> 
     </Host> 
    </Engine> 
    </Service> 
</Server> 
+0

Parametry te są konfigurowane wewnątrz znacznika serwletu pliku web.xml za pomocą: init-param, param-name i param-value. http://www.orionserver.com/docs/web.xml.html – rodrigoap

+1

* który * plik web.xml? ten w moim pliku .war lub w $ {CATALINA_HOME}/conf? Jeśli pierwszy, nie muszę tego robić, jeśli nie rozumiem odpowiedniej składni. –

1

można dodać ścieżkę do plików właściwości w swojej CATALINA_HOME/conf/catalina.properties we „wspólnym” classloader common.loader.