0

ボタンをクリックすると、バックグラウンドで何かを実行する必要があるため、非同期サーブレットがあります。マネージド Bean からリダイレクトすると、うまく機能します (つまりrun()、クラス内でメソッドがextends Runnable正しく実行されます)。このような

String url = externalContext.getRequestContextPath() + "/ReportExecutionServlet";
externalContext.redirect(url);

でもディスパッチに切り替えるとこうなる

externalContext.redirect("/ReportExecutionServlet");

取得しようとすると失敗しますAsyncContext

AsyncContext aCtx = request.startAsync(request, response);

エラーは以下です

Caused By: java.lang.IllegalStateException: The async-support is disabled on this request: weblogic.servlet.internal.ServletRequestImpl

これを修正する方法はありますか?

注: 念のため、非同期サーブレットを実行する方法は次のとおりです。

    AsyncContext aCtx = request.startAsync(request, response);            
    //delegate long running process to an "async" thread
    aCtx.addListener(new AsyncListener() {

        @Override
        public void onComplete(AsyncEvent event) throws IOException {
            logger.log(Level.INFO, "ReportExecutionServlet handle async request - onComplete");
        }

        @Override
        public void onTimeout(AsyncEvent event) throws IOException {
            logger.log(Level.WARNING, "ReportExecutionServlet handle async request - onTimeout");
        }

        @Override
        public void onError(AsyncEvent event) throws IOException {
            logger.log(Level.SEVERE, "ReportExecutionServlet handle async request - onError");
        }

        @Override
        public void onStartAsync(AsyncEvent event) throws IOException {
            logger.log(Level.INFO, "ReportExecutionServlet handle async request - onStartAsync");
        }
    });
    // Start another service
    ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);            
    executor.execute(new AsyncRequestReportProcessor(aCtx));
4

1 に答える 1

0

JSF 2.x は非同期機能をサポートしていないため、機能していません。詳細については、FacesServlet サーブレット 3.0 非同期サポートを参照してください。

于 2012-09-07T13:21:43.460 に答える