API-интерфейс JDK 5 File / Stream Read Timeout в MDB - PullRequest
0 голосов
/ 29 декабря 2010

Существует ли JDK 5 или более старый API для чтения файлов и / или чтения потоков с тайм-аутом? Кроме того, этот API должен быть безопасным, если он помещен в MDB. К вашему сведению: я уже изучал использование классов FutureResult, TimedCallable и т. П .; Я пришел к выводу, что использовать их в MDB не рекомендуется, поскольку 1. они не являются нативными классами JDK и 2. потоки создаются внутри MDB; поэтому мне нужно другое решение.

Кроме того, я полагаю, что любое решение потребует многопоточности, поскольку должен существовать поток, который читает и который управляет своевременностью чтения потока и блокирует его при необходимости. Следовательно, будет ли такое поведение незаконным внутри MDB? Что, если указанный API является нативным для JDK, это сделает его безопасным для реализации?

1 Ответ

1 голос
/ 30 декабря 2010

Как видно из API InputStream, для этого нет общего контракта. Однако некоторые потоки, такие как InputStream, который вы получаете из сокета, имеют поведение тайм-аута, но это должно быть настроено для сокета.

AFAIK. Вы можете попытаться прервать поток чтения вручную, вызвав для него interrupt (), и надеяться, что базовая реализация вашего Stream не поймает его, не перебрасывая его (распространенная ошибка при использовании wait () на мониторе ). Это, однако, должно быть сделано в дополнительном потоке или с использованием API будущего, который вы упомянули выше. Если вы перехватываете это InterruptedException и обрабатываете его соответствующим образом, у вас должно быть достаточно стабильное решение.

PS: что такое MDB? Я знаю эту аббревиатуру только для формата базы данных Microsoft, используемого Microsoft Access.

...