Announcement

Collapse
No announcement yet.

Mysteriöses Tomcat/Servlet Problem, brauche dringend Hilfe..

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mysteriöses Tomcat/Servlet Problem, brauche dringend Hilfe..

    Hallo,

    ich bin noch ziemlich neu bzgl. Servlets und Tomcat und bin
    derzeit dabei, eine Applikation als Servlet zu exportieren und
    ans Web anzuschließen.
    Dabei bin ich aber nun auf ein Problem gestossen, bei dem ich
    nun einfach nicht mehr weiterkomme.

    Mein System: Linux 2.6.8.1, Apache Tomcat/4.1

    Es handelt sich bei dem Programm um ein Suchprogramm, das aus
    einem größeren XML-Dokument gewisse Daten ausliest und diese
    dann intern in einer von mir selbst organisierten
    Datenstruktur hält. Der Benutzer kann nun eine Eingabe tätigen
    und anhand dieses Inputs sucht das Programm in seiner
    Datenstruktur nach der passenden Antwort.
    Das Programm lief bisher in der Konsole und dabei einwandfrei.
    Nun soll der Benutzer das Programm aber über ein Servlet per
    Browser abfragen können.
    Ich habe also angefangen, ein Servlet zu schreiben und dachte
    mir, da das Erstellen der Datenstruktur einige Zeit
    beansprucht und sich die Daten nicht ändern, dies nur einmal
    zu machen, also eine Instanzvariable des Typs "SuchProgramm"
    im Servlet zu halten und es in der init-Methode zu
    initialisieren. Die Requests nutzen dann nur die
    Abfragemethode suche(String input) und erhalten die Antwort
    zurück.

    Also in etwa so:
    <PRE>

    public class SuchServlet
    extends HttpServlet
    {

    static SuchProgramm suchproramm;

    public void init()
    {
    suchprogramm = new SuchProgramm();
    suchprogramm.init();
    }

    public void doGet(HttpServletRequest request, HttpServletResponse
    response)
    throws IOException, ServletException
    {
    String input = request.getParameter( "input" );
    String answer = suchprogramm.suche( input );

    // usw. Antwort zurückgeben
    }

    //doPost usw.
    }
    </PRE>

    Das funktioniert leider nicht richtig, meistens stürzt Tomcat
    einfach ab. Das komische ist aber, wenn ich sämtliche Klassen
    im classes-Verzeichnis von Tomcat neu kompiliere und
    unmittelbar darauf Tomcat neu starte und eine Anfrag starte,
    funktioniert es. Auch wenn ich dann Tomcat neu starte geht es.
    Wenn ich dann aber den PC reboote und nach dem Hochfahren eine
    neue Anfrage starte, geht es wieder nicht.

    Wenn ich das Suchprogramm nicht persistent als Instanzvariable
    halte funktioniert es auch einwandfrei z.B.:

    <PRE>

    public class SuchServlet
    extends HttpServlet
    {
    public void doGet(HttpServletRequest request, HttpServletResponse
    response)
    throws IOException, ServletException
    {
    SuchProgramm suchprogramm = new SuchProgramm();
    suchprogramm.init();
    String input = request.getParameter( "input" );
    String answer = suchprogramm.suche( input );

    // usw. Antwort zurückgeben
    }

    //doPost usw.
    }
    </PRE>

    Hier ist ein Auszug aus der Log-Datei von Tomcat (bei
    Nichtfunktionieren):

    2004-11-01 01:33:09 invoker: init: Associated with Context
    '/webdav'

    2004-11-01 01:33:09 jsp: init

    2004-11-01 01:33:09 HostConfig[localhost]: Starting
    background thread

    2004-11-01 01:33:09 HostConfig[localhost]: BACKGROUND THREAD
    Starting

    2004-11-01 01:33:10 StandardHost[localhost]: Mapping request
    URI '/examples/servlet/SuchServlet'

    2004-11-01 01:33:10 StandardHost[localhost]: Trying the
    longest context path prefix

    2004-11-01 01:33:10 StandardHost[localhost]: Mapped to
    context '/examples'

    2004-11-01 01:33:10 invoker: included='false',
    requestURI='/examples/servlet/SuchServlet'

    2004-11-01 01:33:10 invoker: servletPath='/servlet',
    pathInfo='/HelloServlet'

    2004-11-01 01:33:10 invoker: Processing servlet 'SuchServlet'
    with path info ''

    2004-11-01 01:33:10 invoker: Creating wrapper for
    'SuchServlet' with mapping '/servlet/SuchServlet/*'

    2004-11-01 01:33:10 org.apache.catalina.INVOKER.SuchServlet:
    init

    2004-11-01 01:33:10 HostConfig[localhost]: HostConfig:
    Processing STOP

    2004-11-01 01:33:10 HostConfig[localhost]: Stopping
    background thread

    2004-11-01 01:33:10 HostConfig[localhost]: Deploying
    discovered web applications

    2004-11-01 01:33:10 HostConfig[localhost]: BACKGROUND THREAD
    Stopping

    2004-11-01 01:33:10 HostConfig[localhost]: Undeploying
    deployed web applications

    2004-11-01 01:33:10 HostConfig[localhost]: Undeploying web
    application at context path /webdav

    2004-11-01 01:33:10 StandardHost[localhost]: Removing web
    application at context path /webdav

    2004-11-01 01:33:10 HostConfig[localhost]: Undeploying web
    application at context path /examples

    2004-11-01 01:33:10 StandardHost[localhost]: Removing web
    application at context path /examples

    2004-11-01 01:33:10 SessionListener: contextDestroyed()

    2004-11-01 01:33:10 ContextListener: contextDestroyed()

    Es geht also bis zur Aktion

    org.apache.catalina.INVOKER.HelloServlet: init

    dann bricht das Ganze komischerweise ab.
    Es muss meiner Meinung nach irgendwas mit der Persistenz des
    Suchprogramms zu tun haben aber nur was genau?
    Ist dafür eventuell eine spezielle Tomcat-Einstellung nötig?

    Ich google nun schon seit Tagen, komme aber einfach nicht mehr
    weiter.
    Kann mir hier bitte jemand helfen?

    Gruß,
    Jens

  • #2
    Hallo,

    hat sich erledigt!
    Lag anscheinend an irgendeiner Einstellung von Tomcat, aber
    mit Eclipse und dem Tomcat-Plugin hat sich das Problem beheben
    lassen...

    Gruß,
    Jen

    Comment

    Working...
    X