Hi.
Ich bin mir nicht ganz sicher, ob's hierhin gehört, aber ich denke das größte Problem besteht hier in der Datenbankanbindung.
Ich setze aktuell ein Monitoring-System auf (Dynamic Web Project), welches über eine Weboberfläche administriert werden soll. Die einzelnen Aufgaben sollen mit Quartz geplant werden (CronJobs). Ich habe ein initialisierendes Servlet, welches aktuell testweise einen Schedule startet und einen Job plant. Der Job alleine funktioniert, beim Scheduling hakt es insofern, als dass der JDBCJobStore streikt. Ich bekomme eine Exception in Richtung "Datenbankverbindung kann nicht hergestellt werden" (hab schon mehrere Varianten bei verschiedenen Ansätzen und Versuchen erhalten, die aber letztlich immer irgendwie mit der DB zusammenhängen. Interessant ist, dass der Schedule trotzdem irgendwie initialisiert wird nur dazwischen irgendwo was schiefgeht. Na ja, hier die Exception, anschließend meine Quartz.properties. Die wichtigsten Dinge aus dem Servlet/dem Schedule häng ich auch mal an ->
Die Exception (samt bissi Tomcat-Startup-Ausgabe) ->
Die Quartz.properties ->
Der Treiber (derby.jar) liegt auf dem CP vor, daran kann/sollte es eigentlich nicht liegen.
Ich bin mir nicht ganz sicher, ob's hierhin gehört, aber ich denke das größte Problem besteht hier in der Datenbankanbindung.
Ich setze aktuell ein Monitoring-System auf (Dynamic Web Project), welches über eine Weboberfläche administriert werden soll. Die einzelnen Aufgaben sollen mit Quartz geplant werden (CronJobs). Ich habe ein initialisierendes Servlet, welches aktuell testweise einen Schedule startet und einen Job plant. Der Job alleine funktioniert, beim Scheduling hakt es insofern, als dass der JDBCJobStore streikt. Ich bekomme eine Exception in Richtung "Datenbankverbindung kann nicht hergestellt werden" (hab schon mehrere Varianten bei verschiedenen Ansätzen und Versuchen erhalten, die aber letztlich immer irgendwie mit der DB zusammenhängen. Interessant ist, dass der Schedule trotzdem irgendwie initialisiert wird nur dazwischen irgendwo was schiefgeht. Na ja, hier die Exception, anschließend meine Quartz.properties. Die wichtigsten Dinge aus dem Servlet/dem Schedule häng ich auch mal an ->
Java:
public void init() throws ServletException {
// Set up a simple configuration that logs on the console.
BasicConfigurator.configure();
// Automatically java script can run here
log.info("### Servlet Initialized successfully");
try {
log.info("### Initializing Scheduler");
new AlarmSchedule();
log.info("### Scheduler successfully initialized");
}
catch (Exception ex) {
log.fatal("### Failed to initialize Scheduler");
}
}
public AlarmSchedule(){
try{
SchedulerFactory schdFact = new StdSchedulerFactory();
Scheduler schd = schdFact.getScheduler();
schd.start();
JobDetail jd = new JobDetail("alarmjob", Scheduler.DEFAULT_GROUP, AlarmJob.class);
Trigger t = TriggerUtils.makeImmediateTrigger("alarmtrigger", 5, 10);
t.getJobDataMap().put("auth_name", "Vageesh");
t.setStartTime(new Date());
schd.addJobListener(new AlarmJobListener());
jd.addJobListener("Alarm gone");
schd.scheduleJob(jd, t);
System.out.println(schd.getSchedulerName());
}
catch(SchedulerException e){
e.printStackTrace();
}
}
Code:
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
0 INFO [main] com.cron.InitializeServlet - ### Servlet Initialized successfully
0 [main] INFO com.cron.InitializeServlet - ### Servlet Initialized successfully
1 INFO [main] com.cron.InitializeServlet - ### Initializing Scheduler
1 [main] INFO com.cron.InitializeServlet - ### Initializing Scheduler
156 INFO [main] org.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
156 [main] INFO org.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
156 INFO [main] org.quartz.core.QuartzScheduler - Quartz Scheduler v.1.8.5 created.
156 [main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.1.8.5 created.
158 INFO [main] org.quartz.impl.jdbcjobstore.JobStoreTX - Using thread monitor-based data access locking (synchronization).
158 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Using thread monitor-based data access locking (synchronization).
161 DEBUG [main] org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' is desired by: main
161 [main] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' is desired by: main
161 DEBUG [main] org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: main
161 [main] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: main
162 DEBUG [main] org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' given to: main
162 [main] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' given to: main
465 INFO [main] org.quartz.core.QuartzScheduler - Scheduler MonitoringScheduler_$_JavaKaffee-PC1310643797144 shutting down.
465 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MonitoringScheduler_$_JavaKaffee-PC1310643797144 shutting down.
465 INFO [main] org.quartz.core.QuartzScheduler - Scheduler MonitoringScheduler_$_JavaKaffee-PC1310643797144 paused.
465 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MonitoringScheduler_$_JavaKaffee-PC1310643797144 paused.
465 INFO [main] org.quartz.core.QuartzScheduler - Scheduler MonitoringScheduler_$_JavaKaffee-PC1310643797144 shutdown complete.
465 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MonitoringScheduler_$_JavaKaffee-PC1310643797144 shutdown complete.
org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.JobPersistenceException: Failed to obtain DB connection from data source 'myDS': org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'org.apache.derby.jdbc.EmbeddedDriver' for connect URL 'jdbc:derby://127.0.0.1:1527/scheduler' [See nested exception: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'org.apache.derby.jdbc.EmbeddedDriver' for connect URL 'jdbc:derby://127.0.0.1:1527/scheduler']]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.initialize(JobStoreSupport.java:612)
at org.quartz.impl.jdbcjobstore.JobStoreTX.initialize(JobStoreTX.java:56)
at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1274)
at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1465)
at com.cron.AlarmSchedule.<init>(AlarmSchedule.java:17)
at com.cron.InitializeServlet.init(InitializeServlet.java:27)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4420)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4733)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: org.quartz.JobPersistenceException: Failed to obtain DB connection from data source 'myDS': org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'org.apache.derby.jdbc.EmbeddedDriver' for connect URL 'jdbc:derby://127.0.0.1:1527/scheduler' [See nested exception: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'org.apache.derby.jdbc.EmbeddedDriver' for connect URL 'jdbc:derby://127.0.0.1:1527/scheduler']
at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:695)
at org.quartz.impl.jdbcjobstore.JobStoreTX.getNonManagedTXConnection(JobStoreTX.java:69)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3765)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3730)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.cleanVolatileTriggerAndJobs(JobStoreSupport.java:752)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.initialize(JobStoreSupport.java:610)
... 23 more
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'org.apache.derby.jdbc.EmbeddedDriver' for connect URL 'jdbc:derby://127.0.0.1:1527/scheduler'
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.quartz.utils.PoolingConnectionProvider.getConnection(PoolingConnectionProvider.java:194)
at org.quartz.utils.DBConnectionManager.getConnection(DBConnectionManager.java:109)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:692)
... 28 more
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:264)
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
... 33 more
467 INFO [main] com.cron.InitializeServlet - ### Scheduler successfully initialized
467 [main] INFO com.cron.InitializeServlet - ### Scheduler successfully initialized
14.07.2011 13:43:17 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
14.07.2011 13:43:17 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
14.07.2011 13:43:17 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/17 config=null
14.07.2011 13:43:17 org.apache.catalina.startup.Catalina start
INFO: Server startup in 860 ms
637 DEBUG [MonitoringScheduler_Worker-1] org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
637 [MonitoringScheduler_Worker-1] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
638 DEBUG [MonitoringScheduler_Worker-3] org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
638 [MonitoringScheduler_Worker-3] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
639 DEBUG [MonitoringScheduler_Worker-5] org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
639 [MonitoringScheduler_Worker-5] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
639 DEBUG [MonitoringScheduler_Worker-2] org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
639 [MonitoringScheduler_Worker-2] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
640 DEBUG [MonitoringScheduler_Worker-4] org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
640 [MonitoringScheduler_Worker-4] DEBUG org.quartz.simpl.SimpleThreadPool - WorkerThread is shut down.
Code:
# ==========Configure Main Scheduler Properties ==========
org.quartz.scheduler.instanceName = MonitoringScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.skipUpdateCheck = true
# ============== Configure ThreadPool ===============
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=5
org.quartz.threadPool.threadPriority=5
# =============== Configure JobStore ================
#specify the jobstore used
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
#The datasource for the jobstore that is to be used
org.quartz.jobStore.dataSource = myDS
#quartz table prefixes in the database
org.quartz.jobStore.tablePrefix = qrtz_
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
#The details of the datasource specified previously
org.quartz.dataSource.myDS.driver = org.apache.derby.jdbc.EmbeddedDriver
org.quartz.dataSource.myDS.URL = jdbc:derby://127.0.0.1:1527/scheduler
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password = monitor
org.quartz.dataSource.myDS.maxConnections = 20