5
我有一個JSF應用程序,用戶創建一些文件。問題是,他們必須上傳並下載確認消息,並且上傳/下載過程是排他性的,當時只有一個用戶,因爲身份驗證需要技術用戶/密碼。我的問題是,如何才能讓等待的過程對用戶透明,是一種協議,例如:jsf和java中同步方法的最佳實踐
- 等待獲取連接
- 認證
- 上傳文件
- 下載確認文件
- done
我有一個JSF應用程序,用戶創建一些文件。問題是,他們必須上傳並下載確認消息,並且上傳/下載過程是排他性的,當時只有一個用戶,因爲身份驗證需要技術用戶/密碼。我的問題是,如何才能讓等待的過程對用戶透明,是一種協議,例如:jsf和java中同步方法的最佳實踐
使用單線程執行程序。
@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,那麼還有其他方法。
謝謝,我會試試看 –