JDK 5 File/Stream Read Timeout API в MDB

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

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


person TheWolf    schedule 29.12.2010    source источник


Ответы (1)


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

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

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

person Daniel    schedule 30.12.2010
comment
Спасибо, MDB — это компонент, управляемый сообщениями, типа EJB (Enterprise Java Bean), который обрабатывает асинхронную связь. Он используется в качестве оболочки для бизнес-логики, запускаемой асинхронными сообщениями. Однако в MDB и в любом контейнере J2EE незаконно создавать потоки, поскольку это может помешать жизненному циклу EJB; поэтому я искал собственный API JDK, который бы внутренне обрабатывал потоки. - person TheWolf; 30.12.2010
comment
Пожалуйста, отмените голосование... Мне нужен только один вопрос, не проголосовавший за моего невоспетого героя :))!! - person Daniel; 04.02.2011