# Tomcat funktioniert nach shutdown/startup nicht mehr korrekt



## nebulo (4. Mai 2011)

Hallo,

ich habe folgendes Problem, nachdem ich ein war-Archiv im Tomcat (Version 7.0.8) deployed habe funktioniert alles korrekt. Nach einem neustart des Tomcat kann ich aber weder die Management-Konsole (localhost:8080) noch irgendeine andere Anwendung erreichen. Außerdem wird der Shutdown-Port nicht geöffnet. 

Hat jemand schonmal was Ähnliches gehabt oder eine Idee in welche Richtung ich weiter nach Fehlern suchen soll. Ich bin momentan relativ ratlos.

nebulo


----------



## maki (4. Mai 2011)

Logausgaben?
Fehlermeldungen?


----------



## nebulo (4. Mai 2011)

catalina.out und localhost.....log enthalten keine ungewöhnlichen Meldungen.

EDIT: 

Nochmal kurz zur Situation es handelt sich um einen Anwendung die auf eine JMS-Nachricht wartet und dann weiterverarbeitet. Ich habe dafür einen ServletContextListener implementiert und instantiiere dort die Klasse die die JMS-Verbindung konfiguriert und den MessageListener implementiert. 

Nachdem ich bisher gar nicht weitergekommen bin, habe ich die Instantiierung der Klasse in einem neuen Thread vorgenommen und dann gibt es die Probleme komischerweise nicht. Aber ich kann momentan beim besten Willen nicht erkennen was hier den ganzen Tomcat blockiert.

Hat jemand irgendwelche Tipps?


----------



## nebulo (4. Mai 2011)

Der Tomcat hängt an der Stelle an der ein WebService-Client erstellt werden soll. Er stoppt irgendwo im Konstruktor, der folgendesmaßen aufgerufen wird.


```
new Engine_Service(wsdlLocation, ESEngine_SERVICENAME);
```

Der Konstruktor wurde von JAXWS generiert und sieht so aus:

```
public Engine_Service(URL wsdlLocation, QName serviceName) {
    	super(wsdlLocation, serviceName);
}
```

Das Seltsame an dem Ganzen ist, dass das Problem erst beim Neustart des Tomcat auftritt. Direkt nach dem ersten deployen funktioniert alles. 
Ich vermute es ist ein Problem, dass in der aktuellen Konfiguration der WebService von dem hier ein Client erzeugt werden soll im selben Tomcat deployed ist ....


----------



## Noctarius (4. Mai 2011)

Klingt als wenn irgendwo eine Exception ins Nirvana geschickt wird.


----------



## nebulo (4. Mai 2011)

Aber eine Exception müsste sich ja mit einem catch(Exception e) fangen lassen. Das habe ich ohne Erfolg versucht?

Irgendwelche weiteren Vorschläge ...?
Kann es tatsächlich sein, dass das Problem ist, dass die Anwendung bei der Initialisierung noch nicht auf den WebService (eigentlich ja nur auf die WSDL) zugreifen kann der im gleichen Tomcat deployed ist?


----------



## FArt (5. Mai 2011)

Auf jeden Fall klingt es wieder nach einer "pure Java" Implementierung in einem Enterpriseumfeld. Thread starten... auf eine JMS Queue verbinden... aus einem Servlet heraus... das macht man nicht.
Du solltest dir überlegen, ob du nicht einen kleinen Applicartionserver verwenden möchtest. Da ist (z.B. bei JBoss) ein Tomcat drin für deine Webanwendung und die Messges empfängst du über ein MDB.
Sonst: baue dir für deinen Empfänger ein MBean im Tomcat.


----------



## nebulo (5. Mai 2011)

Der Thread war ja nur eine Holzhammer-Methode um zu schauen ob meine Anwendungen den Tomcat dazu veranlasst hängen zu bleiben. Klar könnte ich einen Application-Server verwenden und eine MessageDrivenBean für den Empfang von JMS-Nachrichten verwenden. Für meine Zwecke ist ein Application-Server nur weil ich JMS-Nachrichten empfangen will aber reichlich übertrieben. 

Das Problem hat auch nichts mit dem JMS zu tun sondern es tritt auf bei der Erzeugung des WebService ClientStub-Objekts. Ich habe das Problem insoweit gelöst, dass das ClientStub-Objekt nun nicht mehr bei der Instantiierung meiner Klasse sondern erst onDemand erzeugt wird. Das scheint dann zu keinen Problemen zu führen. 

Ich vermute tatsächlich, dass die Probleme daher rühren, dass meine Anwendung beim Starten des Tomcat eine WSDL von einem WebService der im gleichen Tomcat deployed ist abfragen will.


----------



## Noctarius (5. Mai 2011)

Ein Tomcat deployed erst alle Webapps bevor der Connector freigegeben wird und die Webapps Daten ausliefern können. Davor werden zwar Verbindungen und Requests angenommen aber diese müssen mit der Bearbeitung warten bis zum Ende des Startup.
Wenn du natürlich ein Webapp hast welches erwartet ein WSDL zu bekommen und im schlimmsten Fall solange wartest bis es kommt hast du quasi eine Art technischen Deadlock. Du wartest auf das WSDL und der Tomcat wartet mit dem Ausliefern, dass du fertig gewartet hast - Ergo Deadlock  Sowas kann man auch einfacher fabrizieren


----------



## nebulo (5. Mai 2011)

Dann bedanke ich mal für die Antworten! Ich bin kein Experte was ServletContainer, ApplicationServer usw. betrifft aber das was Noctarius schreibt erscheint mir nachvollziehbar. 

Für alle die auf ähnliche Probleme stoßen: Ich erzeuge den WebService Client-Stub nun erst wenn er zum ersten Mal benötigt wird.


----------

