Как указали другие, File
, InputStream
и многие другие объекты, связанные с вводом-выводом, не сериализуются и поэтому не могут быть растянуты по соединению между клиентом и сервером (без дополнительной функциональности). В контексте J2EE контейнер должен завершать процессы как можно быстрее, чтобы минимизировать использование ресурсов и позволить параллельную обработку. До Java NIO операции ввода-вывода обычно блокировались (ожидание чтения или записи данных), что приводило к зависанию потоков (т. Е. Временно останавливалось в лучшем случае, в худшем случае постоянно).
Однажды я работал над проектом, в котором некоторые разработчики, которые были довольно новичками в Java, открывали FTP-соединения с удаленными серверами из EJBs & ndash; вопреки моим предупреждениям и тем из документации J2EE. Когда удаленный сервер не отвечал, единственным способом отсоединить наш сервер было убить и перезапустить его!
Поэтому: захватите содержимое файла на клиенте и отправьте его через соединение в виде большой строки, или символьного или байтового массива, или чего-то еще. Таким образом, ваш процесс EJB будет иметь все данные, готовые к обработке.
Если объем данных слишком велик, чтобы сделать это в разумном объеме памяти, то это не является жизнеспособным решением. В этом случае рекомендуемое решение для клиента - записать данные в базу данных (возможно, большой двоичный объект) и прочитать EJB из базы данных.