2015-06-22 2 views
1

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

+0

Struts просто облегчает разработку веб-приложения. То, что вы ищете здесь, - это то, как запустить асинхронную задачу, это абсолютно неуместно ** для struts. Я рекомендую вам взглянуть на [это руководство] (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html). –

ответ

1

Я рекомендую использовать DeferredResult of Spring. Это реализация будущего, которая использует технику длинного полигона http.

http://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/web/context/request/async/DeferredResult.html

Так давайте, говорит, что вы будете делать запрос, а сервер он возвратит вас deferredResult, и тогда ваш запрос будет держать его открытым до тех пор, внутренний процесс (Hibernate) не закончит свою задачу. Тайм-аут настраивается в конструкторе.

Вот еще один пример http://www.javacodegeeks.com/2013/03/deferredresult-asynchronous-processing-in-spring-mvc.html

0

Чтобы сохранить сеанс открытым в течение всего срока службы запроса, мы привязываем его к виду. Это делается либо с использованием Spring's OpenSessionInViewInterceptor, либо OpenSessionInViewFilter

Фильтр открытого сеанса в режиме просмотра гарантирует, что сеанс Hibernate будет полностью открыт до рендеринга представления.

Или

Вы можете использовать очереди задач во внутреннем интерфейсе в течение длительного запущенного процесса, как this.

Рабочие очереди (aka: Task Queues) - это избежать необходимости выполнять ресурсоемкую задачу и ждать ее завершения. Вместо этого задачи планируются позже. Задача инкапсулируется как сообщение и отправляется в очередь. Рабочий процесс, выполняющийся в фоновом режиме, будет выполнять задачи и в конечном итоге выполнить задание. Когда вы запускаете много рабочих, задачи будут распределяться между ними.

Эта концепция особенно полезна в веб-приложениях, где невозможно обрабатывать сложную задачу во время короткого окна HTTP-запроса.