Avatar billede thinge Nybegynder
02. august 2004 - 09:23 Der er 20 kommentarer og
1 løsning

web.xml spørgsmål om "autostart" af en java-fil

Jeg har en lille java-fil, som jeg gerne vil kalde når serveren starter op. Kan det lade sig gøre??
thinge
Avatar billede arne_v Ekspert
02. august 2004 - 10:30 #1
Ja - det hedder en startup servlet !
Avatar billede arne_v Ekspert
02. august 2004 - 10:33 #2
<servlet>
    ...
    <load-on-startup>1</load-on-startup>
  </servlet>

kald din kode i servlettens init metode.
Avatar billede fsconsult.dk Nybegynder
02. august 2004 - 10:35 #3
<listener>
    <listener-class>mypackage.InitServer</listener-class>
</listener>

Hvor mypackage.InitServer implementerer ServletContextListener.
Avatar billede thinge Nybegynder
02. august 2004 - 15:45 #4
<load-on-startup>1</load-on-startup>
hvad betyder "1".
Jeg synes nemlig kun at filen bliver kaldt lige efter jeg har deployet.
Altså ikke hvis jeg genstarter serveren
Avatar billede thinge Nybegynder
02. august 2004 - 15:52 #5
således ser XML'en ud
<servlet>
    <servlet-name>ftpBean</servlet-name>
    <servlet-class>dk.bestseller.SupplierPortal.SupplierBeans.FTPBean</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
Avatar billede arne_v Ekspert
02. august 2004 - 17:22 #6
1 bestemmer rækkefølgen som startup servlets bliver kørt i (1=først,2=anden etc.).
Avatar billede arne_v Ekspert
02. august 2004 - 17:31 #7
Jeg har en vis mistanke om at FTPBean ikke er en servlet men en
almindelig Java klasse.

Det skal være en servlet. Som har en metode:

public void init() {
  // kald din kode
}

eller:

public void init(ServletConfig config) {
    // kald din kode
}
Avatar billede thinge Nybegynder
02. august 2004 - 21:22 #8
min ftpbean:
import java.io.File;
import java.util.*;
import java.net.URL;
import javax.servlet.http.*;
import javax.servlet.*;

public class FTPBean extends HttpServlet{
  private File rootFile;
  private OrderFileTimerTask orderFileTimerTask;
  private NotificationFileTimerTask notificationFileTimerTask;
  private Timer timer;
  private final long oneHour = 3600000;
 
  public void init() {
    timer = new Timer();
    orderFileTimerTask = new OrderFileTimerTask();
    notificationFileTimerTask = new NotificationFileTimerTask();
    setRootFile();
    setTimer();
}

  /*public FTPBean(){
    timer = new Timer();
    orderFileTimerTask = new OrderFileTimerTask();
    notificationFileTimerTask = new NotificationFileTimerTask();
    setRootFile();
    setTimer();
  }*/

  public void setRootFile(){
    this.rootFile = getPath();
    orderFileTimerTask.setRootFile(rootFile);
    notificationFileTimerTask.setRootFile(rootFile);
  }

  private Date getDate(int minutes){
    Calendar calendar = Calendar.getInstance();
    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH),calendar.get(Calendar.HOUR_OF_DAY)+1,minutes,0);
//    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH),calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE)+minutes,0);
    System.out.println(calendar.getTime());
    return calendar.getTime();
  }
 
  public void setTimer(){
    timer.scheduleAtFixedRate(notificationFileTimerTask, getDate(0), oneHour);
    timer.scheduleAtFixedRate(orderFileTimerTask, getDate(30), oneHour);
  }
  private File getPath() {
    URL url = this.getClass().getResource("/");
    String location = new File(url.getPath()).getPath();
    File f = new File(location);
    f = new File(f.getParent()+"\\applications\\SupplierWeb\\SupplierWeb\\www");
    return f;
  }
}
Avatar billede thinge Nybegynder
02. august 2004 - 21:25 #9
filen bliver stadig kun kaldt lige efter jeg har deployet.
Altså ikke hvis jeg genstarter serveren.
det ser ud til at den først starter når der kommer et "request".
Den skulle gerne starte sammen med serveren
thinge
Avatar billede arne_v Ekspert
02. august 2004 - 21:30 #10
Den skal kaldes hvis serveren genstartes.

Læs f.eks. http://www.stardeveloper.com/articles/display.html?article=2001061901&page=1
Avatar billede arne_v Ekspert
02. august 2004 - 21:38 #11
Jeg har lige testet med dette vidunder af en servlet:

package test;

import javax.servlet.http.*;

public class KukKukServlet extends HttpServlet {
    public void init() {
        System.out.println("Kuk kuk");
    }
}


Hver gang Tomcat starter op står der i console vinduet nydeligt:

Kuk kuk
Avatar billede thinge Nybegynder
02. august 2004 - 23:03 #12
Node started with id=531585907
Oracle9iAS (9.0.3.0.0) Containers for J2EE initialized
Auto-deploying BCBI2EJB2.jar (ejb-jar.xml had been touched since the previous de
ployment)... Error compiling C:\JDEV9033\j2ee\home\applications\SupplierWeb/BCBI
sådan ser det ud når jeg lige har deployet(du skal ikke tænke på den error der kommer):

2EJB2.jar: Error instantiating compiler: IO error writing cache: C:\JDEV9033\j2e
e\home\application-deployments\SupplierWeb\BCBI2EJB2.jar\deployment.cache
Auto-deploying file:/C:/JDEV9033/j2ee/home/applications/SupplierWeb/SupplierWeb/
(Assembly had been updated)...
Tue Aug 03 00:00:00 CEST 2004
Tue Aug 03 00:30:00 CEST 2004

nu vil jeg så genstarte serveren!!!

Node started with id=531585907
Oracle9iAS (9.0.3.0.0) Containers for J2EE initialized
Det her mangler:
Tue Aug 03 00:00:00 CEST 2004
Tue Aug 03 00:30:00 CEST 2004

thinge
Avatar billede arne_v Ekspert
03. august 2004 - 21:26 #13
Avatar billede thinge Nybegynder
04. august 2004 - 08:44 #14
mmm
Nu har jeg også prøvet på en tomcat server og der virker det......skørt
"arne v" gider du at svare, således at du kan få point
thinge
Avatar billede arne_v Ekspert
04. august 2004 - 09:10 #15
ok

Hvis I betaler Oracle en formue, så kunne du jo spørge dem.
Avatar billede thinge Nybegynder
04. august 2004 - 09:14 #16
jeg tror ikke en formue kan gøre det :o)
Avatar billede fsconsult.dk Nybegynder
04. august 2004 - 09:41 #17
Flg. ser ud til at virke i Orion  (som Oracle's server bygger på):
Det kræver dog support for web app 2.3

web.xml:
    <listener>
        <listener-class>mypackage.InitServer</listener-class>
    </listener>


InitServer.java:

public class InitServer implements ServletContextListener {

    private static Log log = LogFactory.getLog(InitServer.class);

    public void contextInitialized(ServletContextEvent arg0) {
        log.info("contextInitialized");
    }

    public void contextDestroyed(ServletContextEvent arg0) {
        log.info("contextDestroyed");
    }

}
Avatar billede thinge Nybegynder
04. august 2004 - 09:45 #18
Hvad sker der helt præcis
Avatar billede fsconsult.dk Nybegynder
04. august 2004 - 09:49 #19
jeg får skrevet "contextInitialized" i loggen når jeg starter og restarter (+ redeployer) serveren (eller retter web app'en).
Avatar billede thinge Nybegynder
04. august 2004 - 10:17 #20
det giver det samme problem på min server
Avatar billede arne_v Ekspert
04. august 2004 - 13:53 #21
Der er noget galt med din server.

Puds Oracle på sagen.

Hvis ikke de kan hjælpe med sådan noget så kan man lige så godt
køre gratis JBoss server.
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