2015-12-09 12 views
12

Mam dwa serwisy internetowe SOAP (Axis2) i drugi typ REST (Jersey 2).Tomcat - Wyjątek, gdy próbuję udostępnić dwa projekty na dwóch różnych portach.

Wszystko działa poprawnie, ale chcę, aby umieścić jeden na porcie 8080 i jeden na porcie 8081.

zacząłem edytować server.xml w moim folderze/conf tomcat dla utworzyć nową usługę z własnej złącza, silnik i gospodarz tak:

server.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Server port="8005" shutdown="SHUTDOWN"> 
<Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 
<Listener SSLEngine="on" 
    className="org.apache.catalina.core.AprLifecycleListener" /> 
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 
<GlobalNamingResources> 
    <Resource auth="Container" description="User database that can be updated and saved" 
     factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" 
     pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" /> 
</GlobalNamingResources> 
<Service name="reciver"> 
    <Connector acceptCount="100" connectionTimeout="10000" 
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" 
     maxThreads="10" port="8080" useBodyEncodingForURI="true" /> 
    <Engine defaultHost="localhost" jvmRoute="host1" name="reciver"> 
     <Host autoDeploy="true" name="localhost" unpackWARs="true"> 
      <Context docBase="SOAP" path="/SOAP" reloadable="true" 
       source="org.eclipse.jst.jee.server:SOAP" /> 
     </Host> 
    </Engine> 
</Service> 
<Service name="reciver2"> 
    <Connector acceptCount="100" connectionTimeout="10000" 
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" 
     maxThreads="10" port="8081" useBodyEncodingForURI="true" /> 
    <Engine defaultHost="localhost" jvmRoute="host2" name="reciver2"> 
     <Host autoDeploy="true" name="localhost" unpackWARs="true"> 
      <Context docBase="REST" path="/REST" reloadable="true" 
       source="org.eclipse.jst.jee.server:REST" /> 
     </Host> 
    </Engine> 
</Service> 

mam problem z moim kontekście na drugim Service. Kiedy dodać ten jeden i spróbować uruchomić Tomcat Mam ten wyjątek:

GRAVE: A child container failed during start 
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[reciver2].StandardHost[localhost].StandardContext[/REST]] 
at java.util.concurrent.FutureTask.report(Unknown Source) 
at java.util.concurrent.FutureTask.get(Unknown Source) 
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916) 
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[reciver2].StandardHost[localhost].StandardContext[/REST]] 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
... 6 more 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [[email protected]] 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4909) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5039) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 6 more 
Caused by: java.lang.IllegalArgumentException: The main resource set specified [C:\DEV\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\REST] is not valid 
at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:723) 
at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:684) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 9 more 

déc. 09, 2015 11:23:28 AM org.apache.catalina.core.ContainerBase startInternal 
GRAVE: A child container failed during start 
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[reciver2].StandardHost[localhost]] 
at java.util.concurrent.FutureTask.report(Unknown Source) 
at java.util.concurrent.FutureTask.get(Unknown Source) 
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916) 
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:769) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:625) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[reciver2].StandardHost[localhost]] 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: org.apache.catalina.LifecycleException: A child container failed during start 
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924) 
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 6 more 

déc. 09, 2015 11:23:28 AM org.apache.catalina.startup.Catalina start 
GRAVE: The required Server component failed to start so Tomcat is unable to start. 
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]] 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:625) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[reciver2]] 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:769) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 7 more 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[reciver2]] 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 9 more 
Caused by: org.apache.catalina.LifecycleException: A child container failed during start 
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924) 
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 11 more 

gdy usunę kontekstowe tomcat uruchomienia i wysłuchać na tym porcie.

port

Jest to pierwszy raz próbuję to zrobić, robię coś złego, ale nie wiem, gdzie mam szukać na google i stack ale nie znalazłem rozwiązania.

Pracuję na Windows 10, tomcat 8 i Eclipse Mars.

Jeśli jedno z was zna rozwiązanie, będę mu wdzięczny za pomoc. Dziękuję

+1

Myślę, że to Eclipse WTP powoduje kłopoty. Czy próbowałeś uruchomić Tomcat z tą samą konfiguracją, ale ręcznie wdrażając pliki?Czy znalazłeś także dokładnie * miejsce, w którym * twój projekt REST zostanie wdrożony? Najwyraźniej nie tam, gdzie szuka go Tomcat: 'C: \ DEV \ eclipse \ workspace \ .metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0 \ webapps \ REST'. –

+0

Nie publikuj tutaj zdjęć testu. Opublikuj tekst. – EJP

Odpowiedz

4

Problem polega na tym, że próbujesz uruchomić Tomcat z taką konfiguracją z poziomu IDE Eclipse.

Ghayel ma rację, że po to główny powód:

Caused by: java.lang.IllegalArgumentException: The main resource set specified [C:\DEV\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\REST] is not valid 
at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:723) 
at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:684) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 

Zobacz Eclipse IDE w Tomcat FAQ i Eclipse WebTools Project Tomcat FAQ w Eclipse o referencje.

Państwo problem jest spowodowany przez kombinację dwóch następujących faktów:

  1. Domyślnie Eclipse IDE nie używa pliku server.xml że edytujesz w IDE, ale przetwarza je podczas kopiowania na inny " CATALINA_BASE 'directory. Z Twojego logu tego katalogu jest C:\DEV\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps. Najpierw spójrz na plik w tym katalogu. Może się różnić od edytowanego pliku.

    Po drugie, spodziewam się, że przetwarzanie Eclipse IDE o numerze server.xml nie obsługuje wielu elementów silnika. (Może je wspierać, ale będę zaskoczony, jeśli to zrobi).

  2. Po zdefiniowaniu elementu Context w pliku server.xml niepowodzenie w uruchomieniu tego kontekstu powoduje niepowodzenie uruchamiania Tomcat jako całości.

    Jest to jeden z powodów, dla których nie zdefiniowano elementów kontekstu w server.xml.

AFAIK, serwer Tomcat w Eclipse może być skonfigurowany do używania innego katalogu CATALINA_BASE, a to może być skonfigurowany do publikowania konteksty jako pliki XML (zamiast umieszczać je w server.xml), ale nadal wątpliwości, że takie konfiguracja obsługuje wiele elementów silnika.

Myślę, że najlepiej jest skonfigurować instancję Tomcat poza środowiskiem Eclipse i użyć innych narzędzi (takich jak Apache Ant) do spakowania i wdrożenia aplikacji internetowej (kopiując pliki + polegając na autodeploy lub używając Tomcat Ant tasks, aby wdrożyć aplikację na działającej instancji Tomcat).

Jeśli nie potrzebujesz, aby te usługi WWW były na tej samej maszynie JVM, wystarczy skonfigurować kilka instancji serwera w środowisku Eclipse i uruchomić je równolegle. (Oczywiście ich numery portów muszą być różne).

-3

To jest główny powód:

Caused by: java.lang.IllegalArgumentException: The main resource set specified [C:\DEV\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\REST] is not valid 

Tutaj można go naprawić Issue with ContextLoaderListener

+0

@JoffreyHernandez Nie rozumiem ==> Bug, dziękuję za tout anwser ?? – Ghayel

+0

@Gayel Joffrey oznaczał "wielkie dzięki za odpowiedź." – approxiblue

+2

Twoja odpowiedź nie ma nic wspólnego z rzeczywistym problemem. Link do pytania z 'ClassNotFoundException' zamiast opisanego problemu. – malaguna

-1

Po przeczytaniu konfigurację server.xml i przeglądu Apache Tomcat 8 oficjalna dokumentacja:

mogę powiedzieć, co następuje: Konfiguracja Server, Service i Engine wydaje się słuszna.

Jednak zarówno konfiguracja Host brakuje appBase atrybut który jest oznaczony jako obowiązkowe w oficjalnej dokumentacji . To samo dla atrybutu ContextdocBase, jest obowiązkowe i nie występuje w przykładowej konfiguracji.(EDIT: wykreślić dzięki @EJP komentarz)

Ponadto Context config stany następujące informacje docBase atrybut:

dokumentu bazowego (znany również jako kontekstowy katalog główny) katalog dla tej aplikacji internetowej lub ścieżki do pliku archiwum aplikacji internetowej (jeśli ta aplikacja WWW jest wykonywana bezpośrednio z pliku WAR). Możesz podać bezwzględną ścieżkę do tego katalogu lub pliku WAR lub ścieżkę do katalogu appBase hosta będącego właścicielem.

Nie widzę żadnego z nich w konfiguracji próbki.

Z drugiej strony, stwierdza oficjalny dokument o Context następujące:

nie jest zalecane, aby umieścić < Kontekst> Elementy bezpośrednio w pliku server.xml. Wynika to z faktu, że modyfikowanie konfiguracji jest bardziej inwazyjne, ponieważ główny plik conf/server.xml nie może być ponownie załadowany bez restartowania Tomcat.

Więc prosimy przejrzeć konfigurację, bo znalazłem kilka błędów, które mogą być przyczyną Twojej org.apache.catalina.LifecycleException: A child container failed during start

+1

Słowo "obowiązkowe" nie pojawia się w twoim [link] (https://tomcat.apache.org/tomcat-8.0-doc/config/host.html) . To, co mówi o "appBase", to "Jeśli nie zostanie określony, zostanie użyty domyślny" webapps ".". – EJP

+0

Masz rację, przepraszam. Oba atrybuty są wyświetlane pogrubioną czcionką, więc obie są bardzo ważne. Zapomniałem powiedzieć, że są podobne błędy w SO związane z ** docBase ** i ** appBase **, więc chciałem to podkreślić, ale zrobiłem to źle. Będę edytować moją odpowiedź. – malaguna

2

Ja zakładając, że prowadzenie Tomcat od Eclipse z wtyczką Server. Pamiętaj, że wtyczka może działać magicznie. Na przykład. ustawi appBase na wtpwebapps dla pierwszego elementu <Host>.

Twój pierwszy element Hosta w konfiguracji (/Service[@name="reciver"]/Engine/Host) ma atrybut niejawnie ustawiony na appBase = "wtpwebapps", podczas gdy drugi element Host (/Service[@name="reciver2"]/Engine/Host) ma appBase = "webapps". Tak więc dla drugiego hosta nie znaleziono aplikacji internetowej, ponieważ wygląda ona w niewłaściwym miejscu.

To właśnie linia ~ 25 w dzienniku mówi ci: Caused by: java.lang.IllegalArgumentException: The main resource set specified [C:\DEV\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\REST] is not valid

masz różne opcje:

1) dodać appBase = "wtpwebapps" do drugiego hosta, jednak to uczynią zarówno webapps dostępne na obu portach 8080 i 8081.

2) osiągnąć taki sam wynik, jak w 1), dodając drugi łącznik do <Service name="reciver"... i usuwając drugą usługę.

3) dodaj trzecią usługę, jedną skonfigurowaną przez Eclipse, a dwie pozostałe są przez ciebie kontrolowane, porównaj konfigurację poniżej. Dzięki temu Eclipse może skonfigurować pierwszą usługę i wyświetla różne aplikacje internetowe na dwóch innych portach 8080 i 8081, z tą wadą, że oba urządzenia są dostępne w 8888.

4) możesz bawić się kombinacjami, pamiętaj tylko, że pierwsze Host jest skonfigurowany przez Eclipse.

Polecam 2) do opracowania. 3) i 1) nieco zakłócają wtyczkę WTP, np. podczas dodawania/usuwania modułów na serwerze lub braku synchronizacji.

roztwór 2)

<?xml version="1.0" encoding="UTF-8"?> 
<Server port="8005" shutdown="SHUTDOWN"> 
<Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 
<Listener SSLEngine="on" 
    className="org.apache.catalina.core.AprLifecycleListener" /> 
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 


<Service name="forEclipse"> 
    <Connector acceptCount="100" connectionTimeout="10000" 
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" 
     maxThreads="10" port="8080" useBodyEncodingForURI="true" /> 

    <Connector acceptCount="100" connectionTimeout="10000" 
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" 
     maxThreads="10" port="8081" useBodyEncodingForURI="true" /> 
    <Engine defaultHost="localhost" jvmRoute="host1" name="reciver"> 
     <Host autoDeploy="true" name="localhost" unpackWARs="true"> 

      <Context docBase="SOAP" path="/SOAP" reloadable="true" 
       source="org.eclipse.jst.jee.server:SOAP" /> 
      <Context docBase="REST" path="/REST" reloadable="true" 
       source="org.eclipse.jst.jee.server:REST" /> 
     </Host> 
    </Engine> 
</Service> 

Roztwór 3)

<Service name="forEclipse"> 
    <Connector acceptCount="100" connectionTimeout="10000" 
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" 
     maxThreads="10" port="8888" useBodyEncodingForURI="true" /> 
    <Engine defaultHost="localhost" jvmRoute="host1" name="reciver"> 
     <Host autoDeploy="true" name="localhost" unpackWARs="true"> 

      <Context docBase="SOAP" path="/SOAP" reloadable="true" 
       source="org.eclipse.jst.jee.server:SOAP" /> 
      <Context docBase="REST" path="/REST" reloadable="true" 
       source="org.eclipse.jst.jee.server:REST" /> 
     </Host> 
    </Engine> 
</Service> 

<Service name="reciver"> 
    <Connector acceptCount="100" connectionTimeout="10000" 
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" 
     maxThreads="10" port="8080" useBodyEncodingForURI="true" /> 
    <Engine defaultHost="localhost" jvmRoute="host1" name="reciver"> 
     <Host appBase="webapps" autoDeploy="true" name="localhost" 
      unpackWARs="true"> 

      <Context docBase="../wtpwebapps/SOAP" path="/SOAP" 
       reloadable="true" source="org.eclipse.jst.jee.server:SOAP" /> 
     </Host> 
    </Engine> 
</Service> 
<Service name="reciver2"> 
    <Connector acceptCount="100" connectionTimeout="10000" 
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" 
     maxThreads="10" port="8081" useBodyEncodingForURI="true" /> 
    <Engine defaultHost="localhost" jvmRoute="host2" name="reciver2"> 
     <Host appBase="webapps" autoDeploy="true" name="localhost" 
      unpackWARs="true"> 
      <Context docBase="../wtpwebapps/REST" path="/REST" 
       reloadable="true" source="org.eclipse.jst.jee.server:REST" /> 
     </Host> 
    </Engine> 
</Service> 

Powiązane problemy