Bonjour,
Je dois développer un planificateur de tâches avec quartz en java sous une servlet pour qu'il puisse démarrer en même temps que le serv apache, mais il y a quelque chose qui ne va pas. Je vous montre la source.
MyWebApp.java
web.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 ublic class MyWebApp extends HttpServlet { public static final String QUARTZ_FACTORY_KEY = "org.quartz.impl.StdSchedulerFactory.KEY"; private boolean performShutdown; private Scheduler scheduler; Calendar cal = Calendar.getInstance(); public MyWebApp() { performShutdown = true; scheduler = null; } public void init(ServletConfig cfg) throws ServletException { super.init(cfg); System.out.println("Quartz Initializer Servlet loaded, initializing Scheduler..."); try { String configFile = cfg.getInitParameter("config-file"); String shutdownPref = cfg.getInitParameter("shutdown-on-unload"); if(shutdownPref != null) { performShutdown = Boolean.valueOf(shutdownPref).booleanValue(); } StdSchedulerFactory factory; if(configFile != null) { factory = new StdSchedulerFactory(configFile); } else { factory = new StdSchedulerFactory(); } scheduler = factory.getScheduler(); String startOnLoad = cfg.getInitParameter("start-scheduler-on-load"); if(startOnLoad == null || Boolean.valueOf(startOnLoad).booleanValue()) { if(scheduler.isStarted()){ System.out.println("~~~~~~~~~~~~~~~~~~This is the Alarm message Scheduler Already started~~~~~~~~~~~~~~~~~~~``"); } scheduler.start(); System.out.println("TriggerMail Started for 3 and 3.15"); } else { System.out.println("Scheduler has not been started. Use scheduler.start()"); } String factoryKey = cfg.getInitParameter("servlet-context-factory-key"); if(factoryKey == null) { factoryKey = "org.quartz.impl.StdSchedulerFactory.KEY"; } System.out.println("Storing the Quartz Scheduler Factory in the servlet context at key: " + factoryKey); cfg.getServletContext().setAttribute(factoryKey, factory); } catch(Exception e) { System.out.println("Quartz Scheduler failed to initialize: " + e.toString()); throw new ServletException(e); } }
quartz.properties
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <servlet> <servlet-name>MyWebApp</servlet-name> <display-name>MyWebApp</display-name> <servlet-class>MyWebApp</servlet-class> <load-on-startup>2</load-on-startup> <init-param> <param-name>config-file</param-name> <param-value>quartz.properties</param-value> </init-param> <init-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>start-scheduler-on-load</param-name> <param-value>true</param-value> </init-param> </servlet>
Pour le message d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #========================================================================== # Configure Main Scheduler Properties #========================================================================== org.quartz.scheduler.instanceName = SchedulerDeTest org.quartz.scheduler.instanceId = scheduler1 #========================================================================== # Configure ThreadPool #========================================================================== org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = -1 org.quartz.threadPool.threadPriority = 5
Si vous pouviez m'aider ^^, si le plus probable vient de tomcat5.0 où directement du fichier java où encore des fichiers annexe tels que quartz.properties (sur lequel j'ai un doute sur son fonctionnement) et web.xml.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Exception lors de l'allocation pour la servlet MyWebApp java.lang.NoClassDefFoundError: MyWebApp (wrong name: MyWebApp/MyWebApp) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1812) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:866) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1319) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1034) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:757) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:130) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:619)
Partager