Probleme mit Tomcat / Servlet auf Linux (Debian)

Status
Nicht offen für weitere Antworten.

ITAzubi

Mitglied
Hallo,

folgende Problematik hat sich aufgetan:

Es soll ein Tomcat auf Debian installiert werden. Darin soll ein Java-Servlet eines Kollegen eingefügt und ausgeführt werden. Jedoch werden beim Versuch, das Servlet zu starten, Fehlermeldungen ausgegeben.

Was bisher gemacht wurde:
1. Debian Lenny installiert
2. Java SDK heruntergeladen, entpackt und nach /opt/jdk1.6.0_16 gelegt
chmod 755 jdk-6u16-linux-i586.bin
./jdk-6u16-linux-i586.bin
mv jdk1.6.0_16 /opt/jdk1.6.0_16
3. den Pfad in /etc/profile angegeben
Code:
if [ "`id -u`" -eq 0 ]; then
        JAVA_HOME="/opt/jdk1.6.0_16"
        PATH="~/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games:$JAVA_HOME/bin"
 else
        JAVA_HOME="/opt/jdk1.6.0_16"
  PATH="~/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:$JAVA_HOME/bin"
fi
4. Apache-Tomcat 6.0.20 heruntergeladen und nach opt gelegt
tar xvfz apache-tomcat-6.0.20.tar.gz
mv apache-tomcat-6.0.20.tar.gz /opt
5. CATALINA_HOME Variablen in /etc/profile festgelegt
Code:
if [ "`id -u`" -eq 0 ]; then
        JAVA_HOME="/opt/jdk1.6.0_16"
  CATALINA_HOME="/opt/apache-tomcat-6.0.20"
        PATH="~/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games:$JAVA_HOME/bin:$CATALINA_HOME"
 else
        JAVA_HOME="/opt/jdk1.6.0_16"
        CATALINA_HOME="/opt/apache-tomcat-6.0.20"
  PATH="~/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:$JAVA_HOME/bin:$CATALINA_HOME"
fi
6. Ein Script zum Starten, Stoppen und Neustarten von Tomcat geschrieben und nach init.d gelegt und Tomcat gestartet.
7. Tomcat über localhost:8080 aufgerufen ... funktioniert, kann auch auf den Manager zugreifen
8. Die War-Datei des Projektes vom Kollegen deployed
9. Servlet liegt jetzt in /webapps/abc und erscheint in der Application List
10. Zusätzlich eine dazugehörige Ini in /webapps/xyz/WEB-INF/classes/de/abc/def/ghi.ini
11. Erste Ernüchterung, als einige Fehlermeldungen auftauchen (siehe unten beim Ist-Zustand). Kurz: Das Servlet lässt sich nicht starten und spuckt sofort die Fehlermeldung aus.
12. Den Pfad der dazugehörigen Ini im Quellcode angepasst, da diese vorher noch auf Windows angepasst war.
Edit (korrigiert nach erster Antwort):
[JAVA=85]IniReader read = null;
try {
read = new IniReader("opt\\apache-tomcat-6.0.20\\webapps\\xyz\\WEB-INF\\classes\\de\\abc\\def\\ghi.ini");
}[/code]
13. Benötigte jar-Dateien mit rüber genommen.


Ist-Zustand:
Wenn ich das Servlet aufrufen will, bekomme ich immer noch folgende Fehlermeldung:
javax.servlet.ServletException: Servlet.init() for servlet Stativ threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
java.lang.Thread.run(Thread.java:619)

root cause

java.lang.NullPointerException
Stativ.init(Stativ.java:87)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
java.lang.Thread.run(Thread.java:619)

Leider muss ich zugeben, dass ich keinerlei Vorkenntnisse in diesem Bereich habe und zum ersten Mal damit arbeite.
Ich habe diverse Foren und Seiten durchstöbert, wurde jedoch nicht fündig.
Inzwischen hänge ich an der Sache schon seit 1 Woche und egal wie man es dreht und wendet, bleibt die Fehlermeldung hartnäckig bestehen.
Unsere Programmierer können mir dazu leider auch nicht viel mehr sagen.
Komisch ist ja, dass das Servlet unter einem in Windows installierten Tomcat 6 ohne Murren und Knurren funktioniert.
Gibt es noch markante Unterschiede oder Einstellungen, die man unter Linux beachten sollte?
Habe auch schon aus Verzweiflung einfach mal den kompletten Tomcat-Ordner mit auf meine Debian VM gezogen und alles, bis auf die bin-Dateien genauso wie im Windows-Pendant integriert und jediglich den ini-Pfad angepasst. Jedoch tat sich auch da nichts.
Die Fehlermeldungen blieben bestehen.
Hat zufällig jemand eine Idee oder einen Tipp, was man noch machen könnte, um das Problem beheben und das Servlet fehlerfrei ausführen zu können.
Vielleicht habe ich etwas grundlegend falsch gemacht oder meine Gedanken gehen in die falsche Richtung.

Ich danke euch für eure Bemühungen.
 
Zuletzt bearbeitet:
Code:
...
root cause

java.lang.NullPointerException
Stativ.init(Stativ.java:87)
...

Den Code solltest du am besten mal posten. So von ~70 - ~100.

Ansonsten würde ich empfehlen die Ini Datei in den Classpath zu packen und so zu laden. Aber genaueres kann dir vermutlich erst gesagt werden, wenn du den Quellcode postest.
 
[JAVA=85]IniReader read = null;
try {
read = new IniReader("opt\\apache-tomcat-6.0.20\\webapps\\xyz\\WEB-INF\\classes\\de\\abc\\def\\ghi.ini");
}[/code]
Der Pfad der Ini ist in zeile 87 angegeben.
Hier etwas verfremdet.
Inzwischen in den classpath gelegt, aber immer noch die Fehlermeldung. (oben korrigiert)
 
Zuletzt bearbeitet:
Also

1) Solltest du unter Java (und auch unter Linux) Pfade mit / und nicht mit \ trennen.

2) Um auf Resourcen im Classpath zuzugreifen benutzt man:

Code:
getClass().getClassLoader().getResource(...)
oder
Code:
getClass().getClassLoader().getResourceAsStream(...)

Ersteres gibt eine URL zurück, letzteres einen InputStream. Welches von beidem jetzt dein IniReader brauchen kann, ist hier leider nicht ersichtlich.
 
[JAVA=85]IniReader read = null;
try {
read = new IniReader("opt\\apache-tomcat-6.0.20\\webapps\\xyz\\WEB-INF\\classes\\de\\abc\\def\\ghi.ini");
}[/code]
Der Pfad der Ini ist in zeile 87 angegeben.
Hier etwas verfremdet.
Inzwischen in den classpath gelegt, aber immer noch die Fehlermeldung. (oben korrigiert)

Das kann nicht sein. Du hast nicht den passenden Quelltext publiziert. Im try Block würde die Exception abgefangen werden.
 
Also
1) Solltest du unter Java (und auch unter Linux) Pfade mit / und nicht mit \ trennen.
Okay, danke, dann versuche ich erstmal den Pfad umzuschreiben.
Hatte die Vorgabe nur abgeändert, deswegen hab ich die Trennzeichen so übernommen, wie sie enthalten waren.

2) Um auf Resourcen im Classpath zuzugreifen benutzt man:
Code:
getClass().getClassLoader().getResource(...)
oder
Code:
getClass().getClassLoader().getResourceAsStream(...)
Ersteres gibt eine URL zurück, letzteres einen InputStream. Welches von beidem jetzt dein IniReader brauchen kann, ist hier leider nicht ersichtlich.
Dazu muss ich noch einmal die Programmierer kontaktieren, da ich den Quellcode nicht selbst verfasst habe und nur deren Servlet in ein Tomcat einbauen soll. Ich kann es erstmal nur so weitergeben.

Das kann nicht sein. Du hast nicht den passenden Quelltext publiziert. Im try Block würde die Exception abgefangen werden.
Mir wurde nur gesagt, dass es dieser Teil sei, der in der Fehlermeldung auftaucht.
Auch hier werde ich erstmal die beiden Programmierer zu Rate ziehen.

Aber ich danke euch schonmal für die Anregungen.
Anhand eurer Antworten weiß ich schonmal, dass es nicht an der Konfiguration des Tomcat oder sonstigen Sachen drum herum liegt, sondern am Servlet selbst.
 
Zuletzt bearbeitet:
Habe nochmal mit unseren Programmierern reingeschaut und wir haben die PATH-Variable angepasst.
Seitdem geht es.
Ich danke euch für eure Hilfe.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben