|
|
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Добрый день. В JSF есть такой клас как FacesContext, для чево он предназначен? Пока я его использую что б печетать сообщения на странице: Код: java 1. Я понимаю что есть API, но хотелось как-то попонятней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2012, 12:02:59 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Там в ThreadLocal хранится информация по текущему запросу-ответу. Так сделано, чтобы не протаскивать кучу параметров с уровня сервлетов. Посмотрите Servlet API. Там сквозной нитью идут ServletRequest и ServletResponse. В фильтре, в методах самого сервлета. И, в случае, MVC ещё и в контроллере. В JSF таких параметров могло бы быть ещё больше. И чтобы их сквозной нитью не тянуть через все классы жизненого цикла (которы в JSF вообще не маленький), есть такой контейнер, где всегда хранятся текущие данные в контексте запроса и ответа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2012, 12:11:34 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Собственно в JavaDoc всё тоже самое написано: FacesContext contains all of the per-request state information related to the processing of a single JavaServer Faces request, and the rendering of the corresponding response. It is passed to, and potentially modified by, each phase of the request processing lifecycle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2012, 12:12:09 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТам в ThreadLocal хранится информация по текущему запросу-ответу. Так сделано, чтобы не протаскивать кучу параметров с уровня сервлетов. Посмотрите Servlet API. Там сквозной нитью идут ServletRequest и ServletResponse. В фильтре, в методах самого сервлета. И, в случае, MVC ещё и в контроллере. В JSF таких параметров могло бы быть ещё больше. И чтобы их сквозной нитью не тянуть через все классы жизненого цикла (которы в JSF вообще не маленький), есть такой контейнер, где всегда хранятся текущие данные в контексте запроса и ответа. Я скажем так начал сразу после основ(Шилд, полный справочник), взялся за JSF. А сервлеты просто перечитал мельком, создал парочку своих, просто так, посмотреть работают ли они. Так же само из JSP-страницами, даже простенькие совои теги посоздавал. Может я слишком поспешыл и мне надо больше узнать про Сервлеты? Подскажыте на какие основние вопросы/проблемы надо посмотреть при работе з сервлетами? И вобще, посмотрел я на эти сервлеты и понял, что там все печально, даже и не знаю как долго я б писал на них что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2012, 12:37:10 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
denis11111Я скажем так начал сразу после основ(Шилд, полный справочник), взялся за JSF. А сервлеты просто перечитал мельком, создал парочку своих, просто так, посмотреть работают ли они. Так же само из JSP-страницами, даже простенькие совои теги посоздавал. Может я слишком поспешыл и мне надо больше узнать про Сервлеты? Подскажыте на какие основние вопросы/проблемы надо посмотреть при работе з сервлетами? И вобще, посмотрел я на эти сервлеты и понял, что там все печально, даже и не знаю как долго я б писал на них что-то. Если задача - самообучение. То сервлетам стоит уделить немного больше внимания, а потом поверхностно изучить всё многообразие web-фреймерков. Начасть с JSF, Spring MVC и GWT. Потом остальные. Если задача - реализовать проект на JSF, то вникать в сервлеты будете по ходу, если понадобиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2012, 12:41:32 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Ищо вопросик про FacesContext. Там есть такая фишка как: Код: java 1. 2. Это для работы с сесиями? Вобщем мне надо узнать кто из залогиненых пользавателей есть на сайте. (Помним, это JSF проект!). Вот есть клас который проверяет и пускает пользывателей на сайт: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Так вот, как видите этот клас есть @SessionScoped, тобто его обьект существует пока пользыватель не закроет браузер. И в этом обьекте есть поля login, roleId, logined по которым мы знаем инфу пропользывателя. Для каждого пользывателя который будет заходить на сайт будет создаватся свой обьект LoginBean со своими ogin, roleId, logined. И таперь самое интересное, как мне узнать кто есть на сайте? Мне пишут что надо создать что-то вроде такого: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Ну в результате мне и пишет в логе: sessionCreated - когда, я так понял создается сесия sessionDestroyed - когда удаляется Но как связать это все с моим класом LoginBean, к котором имеется логин, я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2012, 14:09:19 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТам в ThreadLocal хранится информация по текущему запросу-ответу. У меня возникла проблема обращения к FacesContext в потоке. Т.е. я выполняю каку-то задачу на удаленном сервере в отдельном потоке и хочу вывести в сообщении лог выполнения этой задачи, но вот незадача, FacesContext в этих потоках не виден. Как вариант, можно создавать свой FacesContext, но во-первых как-то не очень понятно как это делать, откуда брать запрос/ответ и еще говорят, что в созданном FacesContext сообщения все-равно не выводятся. Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 20:47:16 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana Palun, Пересмотреть дизайн приложения. Есть синхронная обработка - request\response, где вы и можете использовать контекст и есть асинхронная обработка, естественно без всякой привязки к фейсесконтексту. Не знаю зачем вам все это вообще надо, трудно что-то советовать. Но я предполагаю что вам надо сделать простейший ajax-поллер, который будет опрашивать некий бин, а данные в бине будут появляться как раз из вашего внешнего потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 21:21:30 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana PalunУ меня возникла проблема обращения к FacesContext в потоке. Т.е. я выполняю каку-то задачу на удаленном сервере в отдельном потоке и хочу вывести в сообщении лог выполнения этой задачи, но вот незадача, FacesContext в этих потоках не виден. Как вариант, можно создавать свой FacesContext, но во-первых как-то не очень понятно как это делать, откуда брать запрос/ответ и еще говорят, что в созданном FacesContext сообщения все-равно не выводятся. Как быть? У вас полное недопонимание того как всё устроено. Когда вы создали новый поток у вас нет больше никакой связи с запросом от клиента. Создание собственного FacesContext тем более бесполезное занятие. Сначала нужно понять задачу с точки зрения браузера и HTTP. А потом уже искать способы реализовать её в JSF. Long polling, COMET, AJAX, WebSocket это те термины которыми вам нужно оперировать. Например введите в гугле JSF long polling - найдёте несколько рецептов как в долгоиграющей задаче обновлять клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 23:08:24 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСначала нужно понять задачу с точки зрения браузера и HTTP. А потом уже искать способы реализовать её в JSF. рассказываю: на клиенте мы решаем с какой схемой(на удаленном сервере) и какую операцию будем выполнять, запускаем скрипт через SSH, во время выполнения скрипта нужно выводить на клиент например попап с картинкой ожидания, по окончанию выполнения скрипта закрываем попап и выводим лог выполнения(оракловский). Изначально все это планировалось делать по екшнлистенеру кнопки, но так не получилось, поскольку процесс долгоиграющий и он держит кнопку, поэтому и попап и результат выполнения появляется после завершения всего скопом. Выделила выполнения скрипта в отдельный поток, теперь идет запуск попапа и скрипта, который колбасится в отдельном потоке, но вот постала проблема вывода лога. BlazkowiczНапример введите в гугле JSF long polling - найдёте несколько рецептов как в долгоиграющей задаче обновлять клиента. гугл уже красный от моих запросов, я перепробовала все, что только можно. Обращалась к другим разработчикам за советом, они порекомендовали запускать скрипти ssh по клиентлистенеру попапа, когда тот уже появился, но так тоже не годится, поскольку мне нужно оперировать переменными бина, а они обнуляется при вызове бина из клиентлистенера. Буду очень благодарна идеям. С удовольствием начну оперировать вышеназванными понятиями, но пока не совсем понимаю как они мне помогут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 12:12:19 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana Palunрассказываю: на клиенте мы решаем с какой схемой(на удаленном сервере) и какую операцию будем выполнять, запускаем скрипт через SSH, во время выполнения скрипта нужно выводить на клиент например попап с картинкой ожидания, по окончанию выполнения скрипта закрываем попап и выводим лог выполнения(оракловский). Изначально все это планировалось делать по екшнлистенеру кнопки, но так не получилось, поскольку процесс долгоиграющий и он держит кнопку, поэтому и попап и результат выполнения появляется после завершения всего скопом. Выделила выполнения скрипта в отдельный поток, теперь идет запуск попапа и скрипта, который колбасится в отдельном потоке, но вот постала проблема вывода лога. При чем тут SSH и скрипт какой-то, если тема вроде про JSF была? Это вообещ про web, или у вас JSF в GUI рендерится? Это всё постановка задачи юзером или менеджером программисту. Как програмисту вам нужно уйти от "кнопок" и понять как это должно работать в HTTP. Изначально в HTTP/DHTML небыло механизма способного позволить серверу послать сообщение на клиента. Поэтому используют различные ухищрения и новые технологии, которые я перечислил выше. Вам стоит с ними ознакомиться. А потом искать применение в вашем проекте. Oksana Palunгугл уже красный от моих запросов, я перепробовала все, что только можно. Тогда осталось сложить лапки и грустить. Oksana PalunОбращалась к другим разработчикам за советом, они порекомендовали запускать скрипти ssh по клиентлистенеру попапа, когда тот уже появился, но так тоже не годится, поскольку мне нужно оперировать переменными бина, а они обнуляется при вызове бина из клиентлистенера. Можно в терминах JSF? О каком клиентлистенере речь? Oksana PalunБуду очень благодарна идеям. С удовольствием начну оперировать вышеназванными понятиями, но пока не совсем понимаю как они мне помогут. В JSF как HTTP/HTML фреймверке нет простого способа послать сообщение от сервера клиенту. Вам нужно изучить какие для этого существуют решения и поискать их реализацию в JSF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 12:21:12 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana Palunгугл уже красный от моих запросов, я перепробовала все, что только можно. Тогда вы наверное вот это уже читали http://technology.amis.nl/2011/10/19/adf-faces-handle-task-in-background-process-and-show-real-time-progress-indicator-for-asynchronous-job-using-server-push-in-adf/ Чам вам не подошло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 12:22:34 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Blazkowicz[ Тогда осталось сложить лапки и грустить. очень остроумно, я просила совет, а не подобные комментарии. Есть постановка задачи, если у вас предложения как это можно осуществить, пожалуйста, выскажитесь, а если абы просто покидаться понятиями, то не стоит отвлекаться от своих текущих дел ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 12:48:50 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana Palunочень остроумно, я просила совет, а не подобные комментарии. Советов уже выдал массу. Остались только подобные коментарии. Oksana PalunЕсть постановка задачи, если у вас предложения как это можно осуществить, пожалуйста, выскажитесь, Высказался уже. Но вы продолжаете выдавать разные интерпретации постоановки задачи. Oksana Palunа если абы просто покидаться понятиями, то не стоит отвлекаться от своих текущих дел ;) Ну, это у вас гугл уже красный. И, спасибо, я сам разберусь что мне делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 13:01:21 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana Palun, какой-то у вас неправильный гугл. Куда уж понятней обьяснять, чем Blazkowicz, я не представляю, но я попробую:) 1) Вам определенно надо понять, что запуская задачу в отдельном треде, вы теряете всякую связь с JSF и FacesContext в частности. 2) Если вы понимаете как работает HTTP, то определенно должны понимать что сервер не может вам сообщить что задание окончено, следовательно что вы должны сделать? Правильно, опрашивать сервер на наличие изменений, и вот тут плавно подходим к понятию ajax-polling. Если вы используете richfaces, то ваша задача вообще сводится к элементарному, так как там есть уже готовый компонент a4J:poll, который кстати очень легко гуглится . http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=poll&skin=blueSky Итак, теперь о самой задаче. 1) У вас есть кнопка на странице Start Job, на акшнлистенере срабатывает метод, который запускает задачу. 2) У вас есть a4j:poll, котрый по дефолту disabled. Так вот, когда старт джоб листенер срабатывает, он выставляет поллеру флаг enabled. 3) Теперь поллер будет с определенным интервалом опрашивать сервер - закончен ли ваш джоб 4) Как узнать что джоб закончен? - Вариантов масса. Это может быть application-scope bean, запись в базе данных, в конце концов файл. Например, можете сделать так - при старте джоба, ему генерится идентификатор, и в базе данных сохраняется запись о джобе со статусом стартед. Когда поток заканчивает выполнение - он обновляет запись на статус комплитед. В поллере вы просто опрашиваете запись на статус. 5) Как только поллер определил что задача закончена, он обновляет UI, и ставит себе статус disabled Если у вас нет желания использовать richfaces или подобные фреймворки, написать аналог руками не так уж и сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 14:13:49 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
забыл ник1) У вас есть кнопка на странице Start Job, на акшнлистенере срабатывает метод, который запускает задачу. 2) У вас есть a4j:poll, котрый по дефолту disabled. Так вот, когда старт джоб листенер срабатывает, он выставляет поллеру флаг enabled. 3) Теперь поллер будет с определенным интервалом опрашивать сервер - закончен ли ваш джоб 4) Как узнать что джоб закончен? - Вариантов масса. Это может быть application-scope bean, запись в базе данных, в конце концов файл. Например, можете сделать так - при старте джоба, ему генерится идентификатор, и в базе данных сохраняется запись о джобе со статусом стартед. Когда поток заканчивает выполнение - он обновляет запись на статус комплитед. В поллере вы просто опрашиваете запись на статус. 5) Как только поллер определил что задача закончена, он обновляет UI, и ставит себе статус disabled Если у вас нет желания использовать richfaces или подобные фреймворки, написать аналог руками не так уж и сложно. так я тоже делала, только запускала задачу не по екшнлистенеру кнопки, а по клиентлистенеру пула, поскольку по екшнлистенеру запускается ожидалка....Но, в данном способе у меня возникла проблема вызова экземпляра класса бина без очищения данных. Т.е. когда клиентлистенер вызывает метод, запускающий задачу, очищаются все переменные бина, установленные на клиенте, поэтому я решила выделить этот процесс в отдельный поток... Может объясняю криво, ну как могу, я еще не очень хорошо владею терминологией, поправляйте, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 15:00:44 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
забыл ник1) У вас есть кнопка на странице Start Job, на акшнлистенере срабатывает метод, который запускает задачу. в том то изначально и была проблема, что по екшнлистенеру нельзя задачу запустить, она не отпускает кнопку, пока не отработает и пулл не запускатся, он запускается тогда, когда все отработает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 15:07:46 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana Palunтак я тоже делала, только запускала задачу не по екшнлистенеру кнопки, а по клиентлистенеру пула, поскольку по екшнлистенеру запускается ожидалка....Но, в данном способе у меня возникла проблема вызова экземпляра класса бина без очищения данных. Т.е. когда клиентлистенер вызывает метод, запускающий задачу, очищаются все переменные бина, установленные на клиенте, поэтому я решила выделить этот процесс в отдельный поток... Может объясняю криво, ну как могу, я еще не очень хорошо владею терминологией, поправляйте, если что. Так. тут определенно проблемы с терминологией. Лично мне непонятны две вещи, что за клиентлистенер и что за пулл. Возможно вы под пулом подразумеваете все же компонент поллера? Давайте я еще раз разложу вам вариант с richfaces по шагам и с кодом. Ваша начальная страница <h:commandButton actionListener="#{bean.startJob}" value="Старт"></h:commandButton> <a4j:poll enabled="#{bean.enabled}" actionListener="#{bean.checkJobResults}" interval="6000" reRender="result"/> <h:panelGroup id="result"> <rich:messages/>//ну это если через контекст, можно просто брать из бина #{bean.data}, короче со способом определитесь </h:panelGroup> Ваши бины Bean java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. По сути вам нужно написать методы isJobCompleted и getResult() со своей логикой. Для этого вам нужно 1) Подумать как определить что джоб закончен 2) Продумать как получить инфу и как ее отобразить. Я бы делал так - в стартДжоб создавал в БД запись Джоб со стасусом Стартед, а в сессионный бин клал его идентификатор. В потоке джоба, когда он заканчивается, я бы апдейтил джоб и ставил ему статус комплитед, и сохранял результат в колонке result. В методе изДжобКоплитед проверял статус джоба, если комплитед, клал бы в result - job.GetResult(); Как-то так. На самом деле вариантов масса, начиная с applicationScope bean заканчивая JMS и файлами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 15:45:32 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
забыл никВаша начальная страница <h:commandButton actionListener="#{bean.startJob}" value="Старт"></h:commandButton> <a4j:poll enabled="#{bean.enabled}" actionListener="#{bean.checkJobResults}" interval="6000" reRender="result"/> <h:panelGroup id="result"> <rich:messages/>//ну это если через контекст, можно просто брать из бина #{bean.data}, короче со способом определитесь </h:panelGroup> мы по ходу, чутка о разных вещах говорим, судя по коду, это ajax, я пишу на JDev(ADF). То, чтоу вас a4j:poll здесь af:poll, так? забыл никpublic void startJob(){ Job job = new Job(); //тут мы запускаем job в отдельном потоке, вариантов масса - 1) через Thread t =new Thread(job).start(); 2) ложим в ExecutorPool 3) Ложим в JMS. Например используем 1) Thread t =new Thread(job).start(); //все ваш джоб исполняется в другом потоке, actionListener успешно заканчивает выполнение, и никаких зависаний на кнопке Старт. //включаем поллер enabled = true; } да, только тут возникает проблема получения лога выполнения процесса, если его не писать в БД(что есть bad practice, как по мне), то вернуть результат из потока ...есть разве способ? забыл никЯ бы делал так - в стартДжоб создавал в БД запись Джоб со стасусом Стартед, а в сессионный бин клал его идентификатор. В потоке джоба, когда он заканчивается, я бы апдейтил джоб и ставил ему статус комплитед, и сохранял результат в колонке result. это вариант, но хотелось бы обойтись без захламления БД схем подобной информацией, как-то это ж можно решить с помощью средств ADFа?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 16:01:49 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana Palunмы по ходу, чутка о разных вещах говорим, судя по коду, это ajax, я пишу на JDev(ADF). То, чтоу вас a4j:poll здесь af:poll, так? Да, вроде очень похожи. Oksana Palunда, только тут возникает проблема получения лога выполнения процесса, если его не писать в БД(что есть bad practice, как по мне), Какая проблема? Куда вы пишете лог? Oksana Palunто вернуть результат из потока ...есть разве способ? Ну, например. java.util.concurrent.Future.get() - возвращает результат асинхронной задачи. Можно в пямяти лог держать. А по PollEvent сбрасывать его. Oksana Palunзабыл никЯ бы делал так - в стартДжоб создавал в БД запись Джоб со стасусом Стартед, а в сессионный бин клал его идентификатор. В потоке джоба, когда он заканчивается, я бы апдейтил джоб и ставил ему статус комплитед, и сохранял результат в колонке result. это вариант, но хотелось бы обойтись без захламления БД схем подобной информацией, как-то это ж можно решить с помощью средств ADFа?! Этот вариант это переизобретение JMS. Вам стоит подумать что произойдёт с вашими асинхронными задачами в случае перезагрузки сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 16:10:55 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
Oksana Palunзабыл никВаша начальная страница <h:commandButton actionListener="#{bean.startJob}" value="Старт"></h:commandButton> <a4j:poll enabled="#{bean.enabled}" actionListener="#{bean.checkJobResults}" interval="6000" reRender="result"/> <h:panelGroup id="result"> <rich:messages/>//ну это если через контекст, можно просто брать из бина #{bean.data}, короче со способом определитесь </h:panelGroup> мы по ходу, чутка о разных вещах говорим, судя по коду, это ajax, я пишу на JDev(ADF). То, чтоу вас a4j:poll здесь af:poll, так? забыл никpublic void startJob(){ Job job = new Job(); //тут мы запускаем job в отдельном потоке, вариантов масса - 1) через Thread t =new Thread(job).start(); 2) ложим в ExecutorPool 3) Ложим в JMS. Например используем 1) Thread t =new Thread(job).start(); //все ваш джоб исполняется в другом потоке, actionListener успешно заканчивает выполнение, и никаких зависаний на кнопке Старт. //включаем поллер enabled = true; } да, только тут возникает проблема получения лога выполнения процесса, если его не писать в БД(что есть bad practice, как по мне), то вернуть результат из потока ...есть разве способ? забыл никЯ бы делал так - в стартДжоб создавал в БД запись Джоб со стасусом Стартед, а в сессионный бин клал его идентификатор. В потоке джоба, когда он заканчивается, я бы апдейтил джоб и ставил ему статус комплитед, и сохранял результат в колонке result. это вариант, но хотелось бы обойтись без захламления БД схем подобной информацией, как-то это ж можно решить с помощью средств ADFа?! Ну вот ко второму дню наконец-то мы пришли к тому что у вас ADF, совсем незначительная деталь:) Если честно с ADF совсем незнаком, конкретных инструкций не дам. Могу только концептуально. Ну, во-первых захламлять БД - это понятие растяжимое, зависит от задачи. Если у вас нет полноценной сущности джоб, и функционала допустим чтобы просмотреть кто когда и что запускал и с какими результатом, то да - вы наверное правы. Насчет того как потокам обменяться информацией - есть масса способов - разделяемая память, БД, файлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 16:16:51 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
забыл никНу вот ко второму дню наконец-то мы пришли к тому что у вас ADF, совсем незначительная деталь :) http://www.sql.ru/forum/actualthread.aspx?tid=996954 ;) Но polling по-моему отвратное решение. Я бы server push сразу делал. http://www.slideshare.net/mwessendorf/server-side-push-with-adf-faces http://matthiaswessendorf.wordpress.com/2009/12/05/adf-faces-and-server-side-push/ К тому же нужно какой-то лог постоянно перекачивать на клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 16:23:39 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
К слову, на JavaScript + Servlet (или любой другой простейший фреймверк) задача решается на много проще в стиле COMET. Каким-нить jQuery плагином биндится на AJAX запрос к серверу. А сервер без всяких рукописных потоков запускает долгоиграющую задачу и пишет лог в response. JavaScript вычитывает лог частями и обновляет какой-нибудь DIV содержимым. Реализация простейшая. Никаких своих запускалок потоков и асинхронных задач. JSF - зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 17:09:01 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНо polling по-моему отвратное решение. Я бы server push сразу делал. http://www.slideshare.net/mwessendorf/server-side-push-with-adf-faces Ну я бы смотрел по задаче, поллинг просто легче имплементировать как по мне, и если он не дает особой нагрузки - и фиг с ним. А так -да, push получше будет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 17:16:43 |
|
||
|
FacesContext
|
|||
|---|---|---|---|
|
#18+
BlazkowiczК слову, на JavaScript + Servlet (или любой другой простейший фреймверк) задача решается на много проще в стиле COMET. Каким-нить jQuery плагином биндится на AJAX запрос к серверу. А сервер без всяких рукописных потоков запускает долгоиграющую задачу и пишет лог в response. JavaScript вычитывает лог частями и обновляет какой-нибудь DIV содержимым. Реализация простейшая. Никаких своих запускалок потоков и асинхронных задач. JSF - зло. в точку) трудно не согласиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 17:17:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37835120&tid=2130172]: |
0ms |
get settings: |
17ms |
get forum list: |
24ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
43ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
92ms |
get tp. blocked users: |
2ms |
| others: | 285ms |
| total: | 498ms |

| 0 / 0 |
