Sử dụng trình xử lý một luồng.
@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();
}
}
đâu Result
chỉ là đối tượng JavaBean của bạn có chứa các kết quả mong muốn và Task
cái nhìn như thế này: (? Tập tin tải lên)
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
chỉ là đối tượng JavaBean của bạn có chứa các dữ liệu đầu vào. Cuối cùng, hãy gọi nó từ trong bean được quản lý của bạn như sau:
@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
}
}
// ...
}
Bằng cách này, tất cả các nhiệm vụ sẽ được xử lý bởi một lần đơn hàng đầu tiên.
Nếu vùng chứa của bạn hỗ trợ EJB, thì có nhiều cách khác.
Cảm ơn bạn, tôi sẽ thử –