2011-01-10 19 views
1

Web-Anwendungen folgen traditionell dem Anfrage/Antwort-Zyklus, bei dem eine Anfrage von einem Benutzer oder einer anderen Web-App gestellt wird. Allerdings bin ich neugierig, ob es möglich ist, eine Web-App bestimmte Aufgaben bei der Bereitstellung auf einem App-Server automatisch zu initiieren. Angenommen, wir haben eine Web-App, die Daten abruft und verarbeitet. Ist es möglich, diese App so zu konfigurieren, dass Daten automatisch abgerufen und verarbeitet werden, wenn bestimmte Kriterien erfüllt sind, anstatt eine Anfrage von einem Benutzer/einer anderen Webanwendung zu benötigen?Ist es möglich, Web-App proaktiv statt reaktiv zu machen?

Antwort

2

Ja es verwendet Taskplaner wie Cron zum Beispiel. Obwohl man argumentieren könnte, dass solche Aufgaben nicht länger eine Web-Anwendung sind, sondern stattdessen lokale Anwendungen auf dem Server.

+0

Ich würde auch mit cron finden Sie hier. Es könnte nur eine Ergänzung der bestehenden Webapp sein. Zum Beispiel etwas in die Webapps-Datenbank zu tun. –

+0

Ich bin nicht wirklich mit Java-Servlet-Containern vertraut, es könnte möglich sein, dass sie in den Planungsfunktionen eingebaut sind. – Mchl

0

Sie können dies in den Bereitstellungsprozess selbst aufnehmen. Oder schließen Sie diese erste Anfrage auf die Webseite im Bereitstellungsprozess ein.

1

Wenn die Daten in Ihrem Beispiel in Dateien sind, dann können Sie einen Filewatcher verwenden die Ordner zu überwachen und eine Aktion, wenn eine neue Datei landet dort zu initiieren.

Hier ist ein example eines sehr einfach, nur Ihnen eine Vorstellung zu geben, wie es funktioniert:

package pilrcedit; 

import java.io.*; 
import java.util.*; 

public class FileWatcher implements ChangeListener 
{ 
    private static final int FILE_MODIFIED=MODIFIED; 

    Hashtable files=new Hashtable(); 
    ChangeListeners listeners=new ChangeListeners(); 

    public FileWatcher() 
    { 
    Preferences.addChangeListener(this); 
    } 

    public void objectChanged(Object source,int id,Object data) 
    { 
    checkFiles(); 
    } 

    private void checkFiles() 
    { 
    for(Enumeration e=files.keys();e.hasMoreElements();) 
    { 
     File f=(File)e.nextElement(); 
     if (f.lastModified()!=((Long)files.get(f)).longValue()) 
     { 
     files.put(f,new Long(f.lastModified())); 
     notifyListeners(f); 
     } 
    } 
    } 

    public void addFile(File f,ChangeListener listener) 
    { 
    files.put(f,new Long(f.lastModified())); 
    listeners.add(f,listener); 
    } 

    public void removeFile(File f,ChangeListener listener) 
    { 
    listeners.remove(f,listener); 
    } 

    public void notifyListeners(File f) 
    { 
    listeners.fireObjectChanged(f,this,FILE_MODIFIED,f); 
    } 
} 
0

Da Sie erwähnt Sie bestimmte Dinge während des Einsatzes tun möchte ich glaube, Sie Frühling verwenden können Hier können Sie bestimmte Aufgaben ausführen oder während der Bereitstellung etwas im Speicher (Cache) laden. Zum Beispiel in der XML-Anwendungskontext können Sie dies haben: -

<bean id="someCache" class="com.my.company.MyCache" 
      init-method="load"> 
    <!-- <property> as needed -->  
</bean> 

myCache Klasse so etwas wie unten sein könnte: -

class MyCache{ 
     public void load() { 
      //do your deployment work 
    } 
} 
Verwandte Themen