Avatar billede aslan Nybegynder
03. februar 2005 - 12:50 Der er 28 kommentarer og
1 løsning

Cronjob til tomcat?

Er det muligt at lave et simpelt cronjob i tomcat og i så fald hvordan?
Avatar billede simonvalter Praktikant
03. februar 2005 - 15:20 #1
Avatar billede simonvalter Praktikant
03. februar 2005 - 15:21 #2
det samme som arne sagde igår.
Avatar billede aslan Nybegynder
03. februar 2005 - 16:13 #3
Jeg ville gerne have haft noget specifik til tomcat, men det kan man åbenbart ikke.... bare læg et svar tak
Avatar billede simonvalter Praktikant
03. februar 2005 - 16:21 #4
ok
Avatar billede arne_v Ekspert
05. februar 2005 - 23:19 #5
Quartz API er ret nemt at bruge også fra servlet kode.

Og Quartz har også "Quartz web app" som er en færdig Java web app, hvor du
kan sætte jobs op i en web GUI.
Avatar billede aslan Nybegynder
07. februar 2005 - 15:42 #6
Så vidt jeg har hørt skulle Quartz være alt for stort. Det eneste jeg skal bruge er at kunne ramme en servlet i bestemte tidspunkter eller i en bestemt interval, ligesom man kan i resin via web.xml. Er det muligt på en nem måde i Quartz?
Avatar billede aslan Nybegynder
07. februar 2005 - 15:43 #7
Hvor kan jeg finde den "Quartz web app" ?
Avatar billede arne_v Ekspert
07. februar 2005 - 15:48 #8
For stort ?

Det er bare en enkelt jar fil.

Hvis du vil gøre det kode mæssigt så putter du den kode der skal køres
med interval i en seperat klasse, laver en simpel Quartz job på 8 linier
som kalder koden og laver en servlet som schedulerer jobbet (15 linier)
og putter den i web.xml som startup servlet.

Eller så leger du lidt med quartz web app.
Avatar billede arne_v Ekspert
07. februar 2005 - 15:50 #9
Avatar billede aslan Nybegynder
07. februar 2005 - 15:54 #10
Hej arne er det muligt at jeg kan se de 8 og 15 linier kode som du snakker om? Så kunne det være at jeg bedre kunne danne mig et overblik over hvad Quartz kan.
Avatar billede arne_v Ekspert
07. februar 2005 - 15:59 #11
Ja.

Men det bliver først om nogle timer, når jeg kommer hjem (mine eksempler
ligger på min hjemme PC).
Avatar billede aslan Nybegynder
07. februar 2005 - 16:03 #12
Lyder fint..
Avatar billede arne_v Ekspert
07. februar 2005 - 19:22 #13
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class QServletJob implements Job {
    public void execute(JobExecutionContext ctx) throws JobExecutionException {
        System.out.println("Det virker");
    }
}
Avatar billede arne_v Ekspert
07. februar 2005 - 19:22 #14
import java.text.ParseException;

import javax.servlet.http.HttpServlet;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

public class QServlet extends HttpServlet {
    public void init() {
        try {
            SchedulerFactory sf = new StdSchedulerFactory();
            Scheduler s = sf.getScheduler();
            s.start();
            s.scheduleJob(new JobDetail("test", Scheduler.DEFAULT_GROUP,QServletJob.class),
                          new CronTrigger("test", Scheduler.DEFAULT_GROUP, "0/15 * * * * ?"));
            Thread.sleep(75000);
            s.shutdown();
        } catch (SchedulerException e) {
        } catch (InterruptedException e) {
        } catch (ParseException e) {
        }
    }
}
Avatar billede arne_v Ekspert
07. februar 2005 - 19:22 #15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>QServlet</servlet-name>
    <servlet-class>QServlet</servlet-class>
    <load-on-startup>5</load-on-startup>
  </servlet>
</web-app>
Avatar billede arne_v Ekspert
07. februar 2005 - 19:23 #16
C:\Jakarta\tomcat-5.0.28\webapps\qtest>dir /s
Volume in drive C is ARNEPC2_C
Volume Serial Number is E09B-1D63

Directory of C:\Jakarta\tomcat-5.0.28\webapps\qtest

07-02-2005  19:13      <DIR>          .
07-02-2005  19:13      <DIR>          ..
07-02-2005  19:20      <DIR>          WEB-INF
              0 File(s)              0 bytes

Directory of C:\Jakarta\tomcat-5.0.28\webapps\qtest\WEB-INF

07-02-2005  19:20      <DIR>          .
07-02-2005  19:20      <DIR>          ..
07-02-2005  19:15      <DIR>          classes
07-02-2005  19:20      <DIR>          lib
07-02-2005  19:19                  345 web.xml
              1 File(s)            345 bytes

Directory of C:\Jakarta\tomcat-5.0.28\webapps\qtest\WEB-INF\classes

07-02-2005  19:15      <DIR>          .
07-02-2005  19:15      <DIR>          ..
07-02-2005  19:14                1.616 QServlet.class
07-02-2005  19:14                  656 QServletJob.class
              2 File(s)          2.272 bytes

Directory of C:\Jakarta\tomcat-5.0.28\webapps\qtest\WEB-INF\lib

07-02-2005  19:20      <DIR>          .
07-02-2005  19:20      <DIR>          ..
21-12-2004  20:52              318.680 quartz.jar
              1 File(s)        318.680 bytes

    Total Files Listed:
              4 File(s)        321.297 bytes
              11 Dir(s)  4.377.993.216 bytes free
Avatar billede aslan Nybegynder
08. februar 2005 - 14:56 #17
Dit eks. virker meget fint arne, men hved du om man kan lave flere jobs istedet for kun et i dit eks. med samme Scheduler (tråd)? Så man slipper for at starte et nyt tråd op for hvert job...
Avatar billede arne_v Ekspert
08. februar 2005 - 17:08 #18
Du kan sagtens schedulere mange jobs på samme scheduler.
Avatar billede arne_v Ekspert
08. februar 2005 - 17:08 #19
VIGTIGT

Linierne:

            Thread.sleep(75000);
            s.shutdown();

skal slettes i den servlet (de er copy pastet fra et standalone eksempel)
Avatar billede aslan Nybegynder
08. februar 2005 - 17:15 #20
Jeg startede også med at slette de linier arne. En anden smart ting er også at stoppe tråden når servlet bliver lukket ned:

    public void init(ServletConfig config)throws ServletException{
       
        super.init(config);
       
        log.debug("***init start***");
       
        try {
           
            SchedulerFactory sf = new StdSchedulerFactory();
            s = sf.getScheduler();
            s.scheduleJob(new JobDetail("runner", Scheduler.DEFAULT_GROUP,QServletJob.class),
                    new CronTrigger("runner", Scheduler.DEFAULT_GROUP, "0/5 * * * * ?"));
            s.start();
           
        } catch (SchedulerException e) {
            log.error("SchedulerException",e);
        } catch (ParseException e) {
            log.error("ParseException",e);
        }
       
        log.debug("***init end***");
       
    }
   
    public void destroy() {
        try{
            s.shutdown();
        } catch (SchedulerException e) {
            log.error("SchedulerException",e);
        }
    }
Avatar billede aslan Nybegynder
08. februar 2005 - 17:22 #21
Så vidt jeg kan forstå er det ikke lige til at schedulere mange jobs på samme scheduler:


http://sourceforge.net/forum/message.php?msg_id=1986407
Avatar billede arne_v Ekspert
08. februar 2005 - 17:37 #22
Det er flere schedulers. Kan du ikke nøjes med flere jobs ?
Avatar billede arne_v Ekspert
08. februar 2005 - 17:38 #23
import java.text.ParseException;

import javax.servlet.http.HttpServlet;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

public class QServlet extends HttpServlet {
    public void init() {
        try {
            SchedulerFactory sf = new StdSchedulerFactory();
            Scheduler s = sf.getScheduler();
            s.start();
            s.scheduleJob(new JobDetail("test", Scheduler.DEFAULT_GROUP,QServletJob.class),
                      new CronTrigger("test", Scheduler.DEFAULT_GROUP, "0/15 * * * * ?"));
            s.scheduleJob(new JobDetail("test2", Scheduler.DEFAULT_GROUP,QServletJob2.class),
                      new CronTrigger("test2", Scheduler.DEFAULT_GROUP, "0/5 * * * * ?"));
        } catch (SchedulerException e) {
        } catch (ParseException e) {
        }
    }
}
Avatar billede arne_v Ekspert
08. februar 2005 - 17:38 #24
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class QServletJob implements Job {
    public void execute(JobExecutionContext ctx) throws JobExecutionException {
        System.out.println("Det virker");
    }
}
Avatar billede arne_v Ekspert
08. februar 2005 - 17:38 #25
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class QServletJob2 implements Job {
    public void execute(JobExecutionContext ctx) throws JobExecutionException {
        System.out.println("Det virker stadig");
    }
}
Avatar billede arne_v Ekspert
08. februar 2005 - 17:38 #26
Og ja - det er vist meget smart med shutdown i destroy !
Avatar billede simonvalter Praktikant
08. februar 2005 - 17:41 #27
uden at have rodet med quartz så tror jeg at de mener at du ikke kan få flere schedulers fra det samme factory (du kan vist godt men de skal så have flere property files) men hvad skal du også have det for. en scheduler kan håndtere flere jobs.

så du skal vel bare tilføje flere

s.scheduleJob(new JobDetail("runner", Scheduler.DEFAULT_GROUP,QServletJob.class),
                    new CronTrigger("runner", Scheduler.DEFAULT_GROUP, "0/5 * * * * ?"));
Avatar billede simonvalter Praktikant
08. februar 2005 - 17:41 #28
nå det var klaret ;)
Avatar billede aslan Nybegynder
08. februar 2005 - 20:19 #29
Mærkeligt jeg synes ellers jeg havde prøvet som i skriver og hvor det ikke virkede.... men det virker ihvertfald og det er det vigtigste :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester