2012-05-10 31 views
5

Tôi có một ứng dụng JSF nơi người dùng tạo một số tệp. Vấn đề là, họ phải tải lên và tải xuống thư xác nhận và quá trình tải lên/tải xuống là độc quyền, chỉ có một người dùng vào thời điểm đó, vì xác thực yêu cầu người dùng/mật khẩu kỹ thuật. Câu hỏi của tôi là, làm thế nào tôi có thể làm cho quá trình chờ đợi trong suốt cho người sử dụng, một loại giao thức, ví dụ:Thực hành tốt nhất trong các phương thức đồng bộ hóa trong jsf và java

  • chờ đợi để có được kết nối
  • xác thực
  • tập tin tải lên
  • tập tin tải xác nhận
  • thực hiện

Trả lời

3

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.

+0

Cảm ơn bạn, tôi sẽ thử –

Các vấn đề liên quan