Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Работа с файлами в CORBA средствами Java


Автор: kaa2006 11.11.2006, 01:21
Всем привет.
Вот собираюсь писать программу в которой должна использоваться технология распределенных приложений CORBA.
Необходимо в ней реализовать работу с файлами, т.е. передачу и прием файлов в сети через CORBA, но вот с текстовыми данными проблем не, а вот с файлами не понятно? Возможно реализовать работу с файлами через CORBA, если возможно то как или где можно посмотреть.
Зараннее всем спасибо. smile  

Автор: Stampede 11.11.2006, 04:03
Да в принципе там, где можно послать текст, можно послать все что угодно - вопрос оформления. В частности, двоичный файл можно всегда представить как массив байтов и переслать в виде той или иной закодирванной строковой последовательности: Base64 или Hex, например. Скорее всего, в CORBA байтовый массив можно передать в качестве парамтра и напрямую. Так что с этим проблем быть не должно. Пробема тут на самом деле вот какого рода: если передавать файл за один вызов, то время выполнения файловой операции может оказаться очень, в общем случай - просто опупительно очень большим. Кто когда-нибудь утягивал кинушки с файлообменников, тот знает, что один фильм может качаться и по полдня, и больше. Самое неприятное при этом - это то, что у пользователя данной функции не будет абсолютно никакого контроля за тем, что происходит. Сколько уже байт переслано? Сколько осталось? Сколько примерно времени еще ждать.? А представь ужас ситуации, когда после пяти часов ожидания  в потемках тебе вываливается сообщение: связь отвалилась, запускайте заново.

Поэтому в реальной проге такого рода жизненно важно обеспечить возможность делать по крайней мере следующие вещи:
  • отслеживать ход закачки;
  • возобновлять выполнение с оборванного места.

Возникает вопрос: как это реализовать? Тут я могу предложить одно достаточно простое решение: надо реализовать свой программный протокол, который пересылает файлы небольшими порциями. Например, внешний программный интерфейс такого компонента мог бы выглядеть следующим образом:

Код

public interface Transfer {
    // возвращаемый int - это некий серверный ID, идетифицирующий
    // данную конкретную пересылку
    public int initTransfer(String fileName, String destinationPath);

    public void sendBlock(int transferID, int blockNumber, byte[] blockBytes, int CRC);

    public void completeTransfer(int transferID, int CRC);
}


На сервере под этот интерфейс надо будет написать реализацию, а на клиенте - трансферного агента, который скрывает последовательность серверных вызовов, предоставляя прикладному программисту простую локальную сигнатуру: public void sendFile(File file) throws IOException.

Можно, конечно, сделать и без всех этих заморочек, но в этом случая я бы старался в будущем избегать личной встречи с пользователями своего сервиса - для здоровья будет полезнее smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)