2013-09-03 4 views
1

Привет всем Я использую Struts1.1, при нажатии кнопки в JSP у нас есть много данных для обработки, которые связаны с проверкой БД, и для миллионов записей требуется более 2 ч. Итак, мы хотим выполнить в фоновом режиме с использованием службы-исполнителя и будущей задачи java асинхронно. Таким образом, пользователь может свободно перемещаться на другие страницы, когда выполняется фоновая обработка, и когда этот процесс завершен, пользователь может вернуться к тому же самому jsp, чтобы щелкнуть другой кнопка (активируется после того, как обработка производится) для просмотра результата обработки данных: Вот мой класс действия:Как контролировать фоновую задачу, выполняемую будущей задачей

ServletContext servletContext=getServlet().getServletContext(); 
     ExecutorService poolService = (ExecutorService) servletContext.getAttribute("threadPoolAlias"); 
     AdminBlocageBackgroundProcessing adminBlocageBackgroundProcessing= new AdminBlocageBackgroundProcessing(fichier,blocage); 
     Future<ArrayList> future= poolService.submit(adminBlocageBackgroundProcessing); 

Это моя модель класса, где выполняются валидация базы данных:

public class AdminBlocageBackgroundProcessing implements Callable { 
private FormFile fichier; 
private String blocage; 
public ArrayList data=null; 
public AdminBlocageBackgroundProcessing(FormFile fichier, String data) { 
this.fichier=fichier; 
this.blocage=data; 
    // TODO Auto-generated constructor stub 
} 

public Object call() { 
    // TODO Auto-generated method stub 
    try{ 
    data = ImportMetier.extractFromCSV(
     new String(fichier.getFileData(), 
        "ISO-8859-1"),blocage); 

    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return data; 
} 

сейчас мой вопрос в том, как мне удастся контролировать выполнение этого метода «вызова» на уровне приложения, так что когда его завершение я смогу показать результаты обработки данных.

и самое главное, я хочу, чтобы выполнить его в фоне, так что пользователь может свободно перемещаться в других частях приложения, так что я не могу использовать

data=future.get(); 

, потому что это приведет к основному потоку ждать до метода вызова не завершено.

Заранее спасибо :-)

ответ

0

Почему не может пройти таймаут с Future # Get() или использовать Future # IsDone) для проверки (если задача была завершена?

+0

Ну, я определенно использовал метод будущегоget(). , но главной проблемой, с которой я столкнулся, я не смог отслеживать метод фонового вызова. с использованием статической переменной и автоподключение JSP helpd me. – Bazooka

Смежные вопросы