|
|
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, коллеги. Просветите меня плиз, как быть с Future: Future<UUID> result = callAsync(parameters); Завершил выполнение метод callAsync или нет - я решаю по result.isDone(); Но вот проблема, если callAsync выбросил исключение, то isDone всегда будет возвращать false; И узнать о том, что метод бросил исключение можно будет только попробовав выполнить result.get(), что чревато ожиданием. Я вижу два очевидных обхода: 1. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. т.е. вызывать get с таймером Целый букет исключений, и вообще не красиво. 2. Переписать callAsync так, чтобы он вообще не бросал исключений. А если исключение возникло, то передавать его в параметре Future: Код: java 1. Где ResultHolder содержит исключение (если было) и результат. Оба варианта не нравятся, хотя второй еще ничего. Но Future мне использовать надо, потому что я использую метод EJB бина аннотированный как javax.ejb.Asynchronous, который либо ничего не должен возвращать, либо должен возвращать Future. Вот думаю, может какую-нибудь другую потокобезопасную структуру вообще использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 18:33:35 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
Мне кажется, вопрос немного не по адресу. Модератор: Тема перенесена из форума "Работа". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 18:40:20 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
softwarer, Ой, я что, а работе запостил? Прошу прощения :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 18:53:28 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
rabiterНо вот проблема, если callAsync выбросил исключение, то isDone всегда будет возвращать false; Это не правильно. Посмотрите FutureTask - если выкидывается исключение, то статус меняется на RAN, соответсвенно isDone() должен вернуть true. rabiterОба варианта не нравятся, хотя второй еще ничего. Но Future мне использовать надо, потому что я использую метод EJB бина аннотированный как javax.ejb.Asynchronous, который либо ничего не должен возвращать, либо должен возвращать Future. GlassFish небось? Покажите что у вас в callAsync() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 18:54:26 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
Если у вас именно callAsync выбросит исключение, то переменная result окажется вообще вне scope. Покажите более конкретный код что вы и как запускаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 18:56:29 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И вызов: Код: java 1. по сути, потом result сохраняется в глобальной мапе. Клиент использует периодический polling чтобы проверить, появились ли новые отчеты. Каждый такой запрос от клиента ищет в этой мапе отчеты на свое имя и проверяет у них isDone. Там у меня используется имплементация Future AsyncResult а не FutureTask, так вот она в случае исключения isDone не выставляет в true. Я сейчас попробую использовать FutureTask, но не уверен что в случае с методом EJB можно выбирать между альтернативными имплементациями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:12:09 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
И да, используем glassfish) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:12:35 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
rabiterИ да, используем glassfish) Тогда удивлятся нечему. На этом форуме на него каждую неделю жалуются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:15:13 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
http://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html The isDone method returns true if the asynchronous method invocation completed normally, was cancelled, or resulted in an exception . Возьмите JBoss - не мучайтесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:17:00 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Вау. Спасибо :-) Эх) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:18:19 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
Угощайтесь: http://java.net/jira/browse/GLASSFISH-11503 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:19:23 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, О да, спасибо) Но на фоне глюков JSF и ICEFaces с которыми приходится каждый день сталкиваться, это ничто) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:24:38 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
rabiter, Вы знаете, но у меня isDone стал возвращать true, т.е. все как надо. Что-то я где-то видно намудрил. Но в инете есть на эту тему посты http://stackoverflow.com/questions/7689624/futurev-and-exception] http://stackoverflow.com/questions/7689624/futurev-and-exception ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:28:29 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
rabiter http://stackoverflow.com/questions/7689624/futurev-and-exception] http://stackoverflow.com/questions/7689624/futurev-and-exception Странно что там isDone вообще никто не упоминает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:33:46 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
rabiterВы знаете, но у меня isDone стал возвращать true, т.е. все как надо. Что-то я где-то видно намудрил. А есть разница если вызывать через Local или Remote интерфейсы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:34:25 |
|
||
|
Future, exception и isDone
|
|||
|---|---|---|---|
|
#18+
Blazkowiczrabiter http://stackoverflow.com/questions/7689624/futurev-and-exception] http://stackoverflow.com/questions/7689624/futurev-and-exception Странно что там isDone вообще никто не упоминает. Да, странно. Но в первом ответе рекомендуют попробовать get после isDone авторА есть разница если вызывать через Local или Remote интерфейсы? Вы знаете, я весьма смутно понимаю, что такое Remote вызов бина. Я вызываю как Local. Если мне надо будет вызывать что-то удаленно, я сделаю WS. Вы пользовались когда-нибудь Remote бинами, это удобно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 19:40:54 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38120370&tid=2130143]: |
0ms |
get settings: |
10ms |
get forum list: |
28ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
40ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 326ms |
| total: | 516ms |

| 0 / 0 |
