2012-05-10 8 views
5

ユーザーがいくつかのファイルを作成するJSFアプリケーションがあります。問題は、認証に技術的なユーザ/パスワードが必要なため、アップロードして確認メッセージをダウンロードしてアップロード/ダウンロードのプロセスを排他的で、その時点で1人のユーザにする必要があるということです。私の質問は、私は例えば、プロトコルの種類、利用者のための待機中のプロセスを透明にすることができる方法、である:アップロードファイル jsfとjavaの同期メソッドのベストプラクティス

  • ダウンロード確認ファイル接続
  • 認証
  • を取得するために待機している

    • done
  • 答えて

    3

    シングルスレッドエグゼキュータを使用してください。

    Resultが望ましい結果を含むちょうどあなたのJavaBeanオブジェクトであり、このような Task
    @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(); 
        } 
    
    } 
    

    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オブジェクトである(アップロードされたファイル?)。最初の注文から - すべてのタスクがで最初に単一thead要素によって処理されます

    @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 
         } 
        } 
    
        // ... 
    } 
    

    この方法:次のように最後に管理対象Bean内から呼び出します。

    コンテナがEJBをサポートしている場合、他の方法があります。

    +0

    ありがとう、私は試してみます –

    関連する問題