2009-11-02 11 views
6

Utworzono głównie pusty dynamiczny projekt WWW w środowisku Eclipse.Opis pliku context.xml w tomcat 6

Ma

  • żadnych serwlety
  • nie jsp plików

web.xml jest

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>testprojekt</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

i dodałem context.xml do folderu META-INF

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
     <Parameter name="companyName" value="My Company, Incorporated" override="false"/> 
</Context> 

Wyeksportowałem ten projekt jako plik WAR. O następującej strukturze:

[email protected]:$ tree 
. 
|-- META-INF 
| |-- MANIFEST.MF 
| `-- context.xml 
`-- WEB-INF 
    |-- classes 
    |-- lib 
    `-- web.xml 

4 directories, 3 files 

Kiedy wdrożyć projekt do lokalnego tomcat (Apache Tomcat/6.0.20) wszystko działa zgodnie z oczekiwaniami. Oznacza to, że plik context.xml jest kopiowany do/conf/Catalina/localhost i zmieniony na testprojekt.xml.

Kiedy edytować testprojekt.xml do:

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Parameter name="companyName" value="My BLAH Company, Incorporated" override="false"/> 
</Context> 

widzę następujący wynik w catalina.out:

02.11.2009 13:21:35 org.apache.catalina.startup.HostConfig checkResources 
INFO: Undeploying context [/testprojekt] 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext resourcesStart 
SCHWERWIEGEND: Error starting static Resources 
java.lang.IllegalArgumentException: Document base /opt/tomcat6/webapps/testprojekt does not exist or is not a readable directory 
     at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142) 
     at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4048) 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4217) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526) 
     at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630) 
     at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491) 
     at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1274) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:296) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
     at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337) 
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601) 
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) 
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590) 
     at java.lang.Thread.run(Thread.java:619) 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start 
SCHWERWIEGEND: Error in resourceStart() 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start 
SCHWERWIEGEND: Error getConfigured 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext start 
SCHWERWIEGEND: Context [/testprojekt] startup failed due to previous errors 
02.11.2009 13:21:35 org.apache.catalina.core.StandardContext stop 
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/testprojekt] has not been started 

dlaczego tak jest? Czy to oczekiwany wynik? Jaki jest właściwy sposób zmiany parametrów w context.xml?

Z góry dziękuję. Pozdrawiam,

+0

Nie rozumiem pytania. Myślę, że brakuje ci tekstu wyjaśniającego po części "Kiedy edytuję stronę testprojekt.xml to:". Przynajmniej mogę powiedzieć, że komunikat o wyjątku jest dość samo wyjaśniający. Weź to dosłownie. – BalusC

+0

Unikaj próbek kodu, abyśmy mogli je zobaczyć. –

+0

Proszę przyjrzeć się bliżej dwóm plikom testprojekt.xml. Dodałem ciąg BLAH do wartości drugiego. Spodziewałbym się, że po zmianie wartości moja aplikacja webowa będzie miała dostęp do tych nowych wartości. Ale nie przychodzę nawet do tej części, ponieważ po zapisaniu otrzymuję wyjątek. I naprawdę nie rozumiem wyjątku, albo co jest nie tak w moim podejściu. – Carsten

Odpowiedz

0

Twoje pytanie jest nieco dwuznaczne, ale spróbuję.

Usunąć edytowany plik textprojekt.xml, wprowadzić te same zmiany w pliku context.xml dla swojego projektu i ponownie uruchomić tomcat.

Może to być spowodowane konfliktem między dwoma plikami xml. Zmiana pliku XML utworzonego przez tomcat powoduje zmianę pliku context.xml dla aplikacji webapp. Przynajmniej nie zmienia się na tomcat6.0.18, którego używam do pracy dev.

Mam nadzieję, że to pomocne.

+0

Hmm, postawiłem też pytanie na liście mailingowej tomcat i wygląda na to, że to BŁĄD. https://issues.apache.org/bugzilla/show_bug.cgi?id=47343 Ale zastanawiam się, dlaczego zmiana w conf/Catalina/localhost/testprojekt.xml REDEPLOY webapp? Zgadłbym, że uwolniłoby to aplikację internetową! Gdzie jest właściwe miejsce na umieszczenie konfiguracji DB (na przykład)? Zmienisz to bez przestojów. Zgaduję. – Carsten

2

Myślę, że to błąd w Tomcat. Złożyłem raport o błędzie, ale twierdzą, że działa zgodnie z założeniami. Tomcat ma 3 tryby wdrażania: Katalog, WAR i Fragment Kontekstu. W twoim przypadku zmiesza się przy ponownym ładowaniu.

Oto sekwencja prowadzi do błędu,

  1. Podczas wdrażania wojnie fragment kontekst (META-INF/context.xml) jest kopiowany do konf Catalina [HOST]/katalog /.
  2. Po zmodyfikowaniu fragmentu, poprawnie wykrywa zmianę, co powoduje uruchomienie ponownego rozmieszczenia.
  3. Jednak zapomina, że ​​jest to wdrożenie WAR i traktuje je jako wdrożenie katalogu. Katalog jest usuwany przez undelpoy, więc pojawia się błąd.

Jeśli zmienisz tylko kod XML w META-INF, wszystko powinno działać.