2012-05-10 27 views
5

我有一個JSF應用程序,用戶創建一些文件。問題是,他們必須上傳並下載確認消息,並且上傳/下載過程是排他性的,當時只有一個用戶,因爲身份驗證需要技術用戶/密碼。我的問題是,如何才能讓等待的過程對用戶透明,是一種協議,例如:jsf和java中同步方法的最佳實踐

  • 等待獲取連接
  • 認證
  • 上傳文件
  • 下載確認文件
  • done

回答

3

使用單線程執行程序。

@ManagedBean 
@ApplicationScoped 
public class FileManager { 

    private ExecutorService executor; 

    @PostConstruct 
    public void init() { 
     executor = Executors.newSingleThreadExecutor(); 
    } 

    public Result process(Task task) throws InterruptedException, ExecutionException { 
     return executor.submit(task).get(); 
    } 

    @PreDestroy 
    public void destroy() { 
     executor.shutdownNow(); 
    } 

} 

哪裏Result只是你包含所需的結果JavaBean對象和Task是這樣的:(?上傳的文件)

public class Task implements Callable<Result> { 

    private Data data; 

    public Task(Data data) { 
     this.data = data; 
    } 

    @Override 
    public Result call() throws Exception { 
     Result result = process(data); // Do your upload/download/auth job here. 
     return result; 
    } 

} 

Data是包含輸入數據只是你的JavaBean對象。先出的順序 -

@ManagedBean 
@RequestScoped 
public class Bean { 

    @ManagedProperty("#{fileManager}") 
    private FileManager fileManager; 

    public void submit() { 
     try { 
      Data data = prepareItSomehow(); 
      Result result = fileManager.process(new Task(data)); 
      // Now do your job with result. 
     } 
     catch (Exception e) { 
      // Handle 
     } 
    } 

    // ... 
} 

這樣,所有的任務將由單個THEAD在第一中進行處理:如下從您的託管bean最後調用它。

如果您的容器支持EJB,那麼還有其他方法。

+0

謝謝,我會試試看 –