2011-01-10 51 views
1

Web應用程序傳統上按照請求/響應循環,其中一個請求是由用戶或另一web應用程序製成。但是,我很好奇,如果可以讓Web應用程序在部署到應用程序服務器時自動啓動某些任務。例如,假設我們有一個Web應用程序來檢索和處理數據。是否有可能配置此應用程序自動檢索和處理數據滿足某些條件時,而不需要從用戶/另一個Web應用程序的請求?是否有可能讓網頁應用程序主動而不是被動?

回答

2

是的,它是使用任務調度比如cron例如。儘管人們可能會爭辯說,這些任務不再是一個Web應用程序,而是本地應用程序在服務器上延伸。

+0

我也想通過計劃去這裏。它可能只是現有webapp的補充。像現在一樣對webapps數據庫進行一些操作。 –

+0

我對Java servlet容器並不十分熟悉,可能他們在調度功能方面有一些內置的功能。 – Mchl

0

可以包括在部署過程本身。或者在部署過程中將該初始請求包含在網頁中。

1

如果在您的示例中的數據是文件,那麼你可以使用一個FileWatcher監視的文件夾,並開始有所行動時,一個新的文件的土地在那裏。

這是一個很簡單的一個example,只給你它是如何工作的想法:

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

既然你提到你想部署我認爲你可以使用春運期間爲有所不爲這裏執行某些任務或在部署期間在內存中加載某些內容(緩存)。例如在應用程序上下文XML,你可以有這樣的: -

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

MyCache類可能是類似下面: -

class MyCache{ 
     public void load() { 
      //do your deployment work 
    } 
} 
相關問題