Question : Scheduling de travail dans Java

Bonjour, le

We ont une application basée sur le WEB fonctionner sur le Tomcat v6.0.10 d'Apache. Naturellement, les rapports sont également disponibles en tant qu'élément de notre application.  Maintenant, nous avons prévu de présenter un nouveau dispositif dans l'établissement du programme de rapport intervention d'application.  Using le rapport programmant, les rapports de programme du bidon de l'utilisateur d'application de leur choix et l'obtiennent fourni à leur boîte aux lettres. Nous voulons donner flexibilité de l'utilisateur autant qu'ils peuvent l'état SCH du reports.

I également entendu et eu connaissance de l'établissement du programme de travail dans Java à : les serveurs de source du

Open dans le rel= " nofollow " de " _blank " de target= de " http://java-source.net/open-source/job-schedulers " de href= de Java
le n-source/job-schedulers

What de http://java-source.net/ope est rel= " nofollow " de " _blank " de target= de " http://onjava.com/lpt/a/6207 " de href= de Quartz
rel= " nofollow " de " _blank " de target= de " http://www.javalobby.org/java/forums/t68751.html " de href= de Scheduler
07

JobServer 1.4 Open Source Java de http://onjava.com/lpt/a/62 > cas d'utilisation du ava/forums/t68751.html

Considering de http://www.javalobby.org/j mon ont expliqué en haut, mes questions sont : Le
1) est lui possible d'employer le propre java.util.TimerTask de Sun pour mon établissement du programme complexe de rapport ? Le
2) ce qui sont les raisons/limitations valides/fortes de java.util.TimerTask comparé à d'autres cadres de serveur ?  De sorte que je aie moi-même une croyance forte/raison avant de choisir un tiers serveur framework.
3) il y a un maximum de 100-200 utilisateurs dans mon application.  Au cas où, les utilisateurs programmeraient des rapports d'une telle manière en même temps il y a 100 demandes de rapport dans la file d'attente.  Comment le cadre de serveur OU le java.util.TimerTask manipule-t-il de tels scénarios ?  Avons-nous le contrôle de ceci ? On permet au le
4) à tout moment, des utilisateurs de changer leurs programmes de rapport. Le cadre de serveur soutient-il ceci ? Le
5) évidemment, pour courir un rapport là sont des entrées de rapport, qui doit être passé à chaque programme de rapport.  Avons-nous la flexibilité/option en passant des paramètres au cadre de serveur ?
5) qui est la meilleure manière ? Cadre de intégration de serveur avec l'application Web ou le fonctionnement il en tant qu'autonome ? le

NOTE
en raison de fuite de mémoire dans notre application, nous avons un relancement de quotidiennement-base de service de Tomcat au temps de bas-utilisation.  La raison que j'explique ceci est que le rapport programmé par Users devrait être persisté à travers le serveur/relancements de Tomcat.  Prendre ceci dans l'opinion de consideration.

Experts dans la bonne direction sont appreciated.
class= de

Réponse : Scheduling de travail dans Java

Bien j'ai juste allé voir un de mes applications qui emploie le quartz (enveloppé avant le printemps Spring) et sur l'unschedule de la mise à jour i un travail et programme alors changé.

Mon code pour sheduling/unscheduling… je dois également passer tout à fait de l'information au travail, ainsi il est relativement semblable derrière à ce que vous avez besoin (mais maintenir dans l'esprit, qui la classe de mabe un ou autre est seulement disponible en utilisant l'emballage de quartz de ressort) (les « données » sont les vraies données du travail, le ressort-contexte et le travail-executer-service sont mis en référence au contexte de ressort et à un service, des lesquels j'ai besoin à l'intérieur de mon travail)
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 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
	protégé
	scheduleJob vide (aJob final de SchedulerJob)
	{
        // créent un contexte du travail (Quartz-Objet).
        jobDataMap final de JobDataMap = nouveau JobDataMap () ;
        jobDataMap.put (« données », aJob) ;
        jobDataMap.put (« ressort-contexte », ctx) ;
        jobDataMap.put (« travail-executer-service », jobEcecuterService) ;

        // créent un détail d'exécution d'une tâche (Quartz-Objet).
        jobDetail final de JobDetail = nouveau JobDetail (aJob.getId (),
                nulle, DefaultSchedulerExecuter.class) ;
        jobDetail.setJobDataMap (jobDataMap) ;

        // ajoutent la JOD-définition au programmateur.
        essai {
            schedulerFactory.addJob (le jobDetail, rectifient) ;

            // créent un déclenchement de quartz pour démarrer le JOB.
            déclenchement final de CronTrigger = nouveau CronTrigger () ;
            // a placé le nom à l'identification
            trigger.setName (aJob.getId ());
            trigger.setJobName (aJob.getId ());
            Début de // maintenant.
            trigger.setStartTime (Calendar.getInstance () .getTime ());
            Programme de // comme spécifique dans l'expression de cron.
            trigger.setCronExpression (aJob.getCronExpression ());

            si (log.isInfoEnabled ()) {
                log.info (" [PROGRAMMATEUR] - le travail de Scheduling :  » +
                        aJob.getId () + « avec l'executer » +
                        jobDetail.getJobClass () .getCanonicalName ());
            }

            Programme de // le nouveau travail.
            schedulerFactory.scheduleJob (déclenchement) ;
        } crochet (exception finale e) {
            si (log.isDebugEnabled ()) {
                log.info (« le travail de Scheduling d'erreur » + aJob.getName () + « . Le travail mis hors tension.  », e) ;
            }

            // mettent le travail, ainsi il n'est pas commencé automatiquement encore.
            aJob.setEnabled (faux) ;

            // sauvent le travail modifié.
            essai {
                updateJob (aJob) ;
            } crochet (exception finale ex) {
                jet nouveau RuntimeException (ex) ;
            }
        }
	}

	protégé
	unscheduleJob vide (aJobId final de corde)
	{
    	essai {
    		si (schedulerFactory.getJobDetail (
                    aJobId, « DÉFAUT ») ! = nulle) {
				si (log.isInfoEnabled ()) {
					log.info (" [PROGRAMMATEUR] - le travail d'Unscheduling :  » +
							aJobId) ;
				}

				schedulerFactory.deleteJob (aJobId, « DÉFAUT ») ;
    		}
		} crochet (SchedulerException final e) {
			jet nouveau RuntimeException (
					« Le travail unscheduling d'erreur avec l'identification » + aJobId, e) ;
		}
	}
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us