Auf Thema antworten

jdbc:derby:scheduler erwartet die Datenbank im Verzeichnis, aus dem Du auch das Programm startest, da kein Pfad angegeben wird.


Dies wird mit Tomcat nicht gehen, weil da das ausführende Verzeichnis sehr "anders" sein kann. Ich weiss auch nicht genau, ob das Eclipse-Verzeichnis gemeint ist, oder Du je nach Einrichtung/Start von Tomcat dessen Verzeichnis gemeint ist.


Daher empfehle ich derartige Umgebungsproblematiken auszulagern, zumal hierzu eine schöne Lösung existiert. Derartige Web-Resourcen werden normalerweise über JNDI aufgelöst.


Damit trennst Du quasi den Aufenthaltsort einer DB von seiner Nutzung in Tomcat und ermöglichst, dass Du leicht auf Umgebungsänderungen reagieren kannst.


Ich kann leider nur grob skizzieren, was zu tun ist. Genauere Informationen kann Dir aber Google liefern. In dem Tomcat-Server, den Du innerhalb von Eclipse definiert hast, gibt es ebenfalls wie im richtigen Tomcat, eine server.xml Konfigurationsdatei. In dieser musst Du einen Resource-Eintrag vom Typ javax.sql.DataSource definieren. In Deiner web.xml benötigst Du dann ein resource-ref Element, der auf das Element aus server.xml verweist.


In Deinem Code kannst Du dann

[code=Java]

Context initContext = new InitialContext();

Context envContext  = (Context)initContext.lookup("java:/comp/env");

DataSource ds = (DataSource)envContext.lookup("jdbc/<DeinName>");

Connection conn = ds.getConnection();

[/code]

die DB-Verbindung zur Datenbank aufbauen. Du siehst, das dem Programm-Code überhaupt nicht bekannt ist, zu welcher Datenbank eine Verbindung aufgebaut wird. Ändert sich das irgendwann einmal, muss "nur" die web.xml und/oder server.xml angepasst werden.


Den Aufbau des Schedulers würde ich anders machen, da ich immer komisch werde:), wenn ich einfach absolute Pfade im Code sehe. Dies ist, wie ich oben angemerkt habe, immer sehr von der Umgebung abhängig. Ich würde dass über den Classpath machen:

[code=Java]

        StdSchedulerFactory sf = new StdSchedulerFactory();

        sf.initialize(getClass().getClassLoader().getResourceAsStream("quartz.properties"));

        Scheduler sched = sf.getScheduler();

[/code]


Das Problem mit den Permissions zur Datenbank finde ich auch merkwürdig und stimme zu, dass Quartz (über JNDI) eine DB-Verbindung aufbauen muss.

Normalerweise sollte da eine SecurityException kommen, die genau angibt, welche Permission fehlt. Kannst Du diese nennen oder sagen, woran Du erkennst das der DB-Aufbau nicht klappte? Ich bin der Meinung, dass Du den Aufbau erst einmal über JNDI einbauen solltest. Ich habe gesehen, dass dies auch in der quartz.properties angegeben werden kann. Ich vermute aber, dass die Tabellen für Quartz in der Db bereits angelegt worden sind, oder?



Oben