Bonjour,
j'utilise une bête application web type servlet/jsp, et j'ai notamment une servlet qui lance une méthode java sur demande du client.
Maintenant, je veux scheduler cette méthode pour qu'elle tourne tous les quarts d'heure, et je veux aussi que mon scheduler tourne tout seul, tout en donnant à l'utilisateur la possibilité de l'interrompre si besoin.

Je me suis tourné vers un service quartz en utilisant le scheduler Jboss, et dès le démarrage de jboss, je me récupère un ClassNotFoundException pour ma classe Job!

Voila le fichier deploy/quartz-service.xml que j'ai écrit:
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
<?xml version="1.0" encoding="UTF-8"?>
<server>
	<mbean
		code="org.quartz.ee.jmx.jboss.QuartzService"
		name="user:service=QuartzService,name=QuartzService"
	>
		<attribute name="JndiName">quartzScheduler</attribute>
		<attribute name="Properties">
			org.quartz.scheduler.instanceName = DefaultQuartzScheduler
			org.quartz.scheduler.rmi.export = false
			org.quartz.scheduler.rmi.proxy = false
			org.quartz.scheduler.xaTransacted = false
			org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
			org.quartz.threadPool.threadCount = 5
			org.quartz.threadPool.threadPriority = 4
			org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
                        org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
			org.quartz.plugin.jobInitializer.fileName = quartz-jobs.xml
		</attribute>
	</mbean>
</server>
et j'ai ajouté le fichier quartz-jobs.xml suivant:
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
<?xml version="1.0" encoding="utf-8"?>  
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.opensymphony.com/quartz/JobSchedulingData http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd" verison="1.5">    
    <job>  
        <job-detail>  
            <name>regulierJob</name>  
            <group>mesJobs</group>  
            <description>Le job d'exécution régulier</description>  
            <job-class>com.monAppli.MaClasse</job-class>   
        </job-detail>  
        <trigger>  
            <cron>  
                <name>cronTriggerRegulier</name>  
                <group>mesTriggers</group>  
                <job-name>regulierJob</job-name>  
                <job-group>mesJobs</job-group>  
                <cron-expression>0 0/15 * ? * 1-5</cron-expression>  
            </cron>  
        </trigger>  
    </job>
</quartz>
Et v'la-t-y pas que ça me pète un classNotFoundException:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Caused by: java.lang.ClassNotFoundException: com.eurovl.wis2tee.checkPFI.JobCheckPFINormal from BaseClassLoader@1621fe6{VFSClassLoaderPolicy@11c537f{name=vfsfile:/C:/jboss-5.1.0.GA/server/default/conf/jboss-service.xml domain=ClassLoaderDomain@1bd669d... etc etc etc...
Alors, comment qu'on fait pour utiliser une classe de Web Module depuis un job managé par Jboss?

Je précise que la classe com.monAppli.MaClasse se trouve dans un fichier monAppli.war, qu'il ne s'agit pas d'un EJB, et qu'elle fait appel à pas mal d'autres classes de ce .war, donc l'idée de sortir la classe et la mettre dans un .jar séparé ne me plait pas trop...

Idéalement je cherche une manière de dire: "charge d'abord la WebApp monAppli.war, et ENSUITE, lance le service".
J'ai essayé différentes formes de <depends>monAppli.war</depends> mais dans ce cas il me sort des trucs comme ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Dependency "monAppli.war" (should be in state "Create", but is actually in state "** NOT FOUND Depends on 'monAppli.war' **")



HELLPPPPPPPPP!!!!!

Edit: ah oui, je suis sur JBoss 5.1 AS, ça pourrait servir.

Cordialement,
Jidéfix