Avatar billede markymarc Nybegynder
08. maj 2005 - 20:53 Der er 25 kommentarer og
1 løsning

Hvordan gør jeg et java program til en dæmon ?

Jeg har lavet et lille program der overvåger en mail konto. Det her program vil jeg gerne havde til at køre som en dæmon på min linux box.

Hvordan gør jeg lettes det, nogle forslag?

Mvh
Avatar billede arne_v Ekspert
08. maj 2005 - 20:56 #1
starter det hele

java -classpath ... ...

som et baggrunds job

altså ikke noget specielt Java - ren Linux
Avatar billede arne_v Ekspert
08. maj 2005 - 20:57 #2
Hvis du allerede har kørende en Tomcat eller en JBoss så kunne du jo lade
noget kode inden i den blive kørt af en timer
Avatar billede riversen Nybegynder
08. maj 2005 - 20:57 #3
eller sætte den til at køre vha. cron hvert 5. min fx
Avatar billede markymarc Nybegynder
08. maj 2005 - 21:10 #4
kunne jeg lade den køre i min jboss server??
Avatar billede arne_v Ekspert
08. maj 2005 - 21:16 #5
ja
Avatar billede markymarc Nybegynder
08. maj 2005 - 21:20 #6
HA HA ;-) hvordan gør jeg så det?
Avatar billede arne_v Ekspert
08. maj 2005 - 21:22 #7
flere muligheder

1)  deploye quartz web app i JBoss

2)  bruge den scheduler som har været indbygget i JBoss siden version 2.4

3)  bruge den måde at sætte scheduler op på som er ny i J2EE 1.4
Avatar billede arne_v Ekspert
08. maj 2005 - 21:25 #8
Avatar billede arne_v Ekspert
08. maj 2005 - 21:26 #9
re 1 & 2)

dem har jeg eksempler på
Avatar billede markymarc Nybegynder
08. maj 2005 - 21:26 #10
Men hvis jeg bruger scheduler, køre jeg så ikke bare programmet en gang hver x sek/min/timer alt efter hvad jeg vægler ??

For hvis jeg gør det kan jeg ikke helt bruge det for det gør jeg allerede i mit program.
Avatar billede arne_v Ekspert
08. maj 2005 - 21:27 #11
quarts eksempel:

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 {
  private SchedulerFactory sf;
  private Scheduler s;
  public void init() {
      try {
        sf = new StdSchedulerFactory();
        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) {
      }
  }
  public void destroy() {
      try {
        s.shutdown();
      } catch (SchedulerException e) {
      }
  }
}

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");
  }
}

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. maj 2005 - 21:28 #12
nej - en scheduler fungerer ved at beder JBoss om at køre noget given kode
automatisk med et givent interval

og du kan jo f.eks. bede den om det i en startup servlet
Avatar billede arne_v Ekspert
08. maj 2005 - 21:30 #13
JBoss eksempel:

import java.util.Date;

import org.jboss.varia.scheduler.Schedulable;

public class HelloWorld implements Schedulable {
    public HelloWorld() {
        super();
    }
    public void perform(Date timeOfCall, long remainingRepetitions) {
        System.out.println("Hello world");
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server>
<server>
  <classpath codebase="deploy" archives="mysch.jar"/>
  <mbean code="org.jboss.varia.scheduler.Scheduler"
    name=":service=Scheduler">
    <attribute name="StartAtStartup">true</attribute>
    <attribute name="SchedulableClass">HelloWorld</attribute>
    <attribute name="InitialStartDate">0</attribute>
    <attribute name="SchedulePeriod">10000</attribute>
    <attribute name="InitialRepetitions">-1</attribute>
  </mbean>
</server>
Avatar billede markymarc Nybegynder
08. maj 2005 - 21:32 #14
Hvad er en quick and dirty way at gøre det på??

For al koden skal skrives om til session og entiy beans. Jeg har kun lavet programmet for at test nogle ting med hibernate og POI.
Avatar billede markymarc Nybegynder
08. maj 2005 - 21:35 #15
men Jboss måden at gøre det på ser sku da meget nem ud. Tro jeg vil kaste mig over den.
Avatar billede arne_v Ekspert
08. maj 2005 - 21:36 #16
Både quartz og JBoss kan jo løses med <50 linier så ikke de store problemer.
Avatar billede arne_v Ekspert
08. maj 2005 - 21:37 #17
Prøv den.

Jeg har testet den med 2.x og 3.x men dog aldrig med 4.x
Avatar billede markymarc Nybegynder
08. maj 2005 - 21:42 #18
Har lige en hurtigt ekstra spørgsmål hvis du da har tid til det.

Jeg har lavet en webapplication der benytter nogle session beans som backend. Nu har jeg jo det store spørgsmål om state. Hvor skal jeg lægge det i min httpsession eller i en statefull sessionbean.

Jeg er så kommet frem til at alt hvad der har med min http at gøre frem og tilbage mellem sider, forms og alt det der lægger jeg i min httpsession.

Også laver jeg en statefull sessionbean som jeg klader "bruger" hvor i jeg lægger alt bruger specifike oplysninger i. For så kan jeg vel også bruger den i andre sammen hæng end i http, feks i en gui interface.

Er det en "rigtigt" måde at gøre det på, eller har jeg skudt helt forbi?

Husk også lige og lægge et svar så jeg kan give point. Og mange tak
Avatar billede arne_v Ekspert
08. maj 2005 - 22:02 #19
HTTP sessions versus stateful session beans er et af de store klassiske
spørgsmål.

Og man bliver formentligt aldrig enig om hvad der er bedst.

Jeg tror selv at jeg vil lade de afhænge lidt af hvordan de 2 passer ind
i den konkrete problem stilling.

Fat client er et klassisk argument for stateful session bean men også der
kan man jo bruge web service og dermed HTTP session.
Avatar billede arne_v Ekspert
08. maj 2005 - 22:02 #20
og et svar
Avatar billede markymarc Nybegynder
08. maj 2005 - 22:12 #21
Har du et godt link til en godt artikel om det??
Avatar billede arne_v Ekspert
08. maj 2005 - 22:16 #22
Avatar billede arne_v Ekspert
08. maj 2005 - 22:19 #23
Enterprise Patterns / Fowler har lidt
Avatar billede arne_v Ekspert
08. maj 2005 - 22:25 #24
Avatar billede arne_v Ekspert
08. maj 2005 - 22:28 #25
Avatar billede markymarc Nybegynder
08. maj 2005 - 22:28 #26
Mange tak endnu en gang for hjælpen.
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