Windows Azure & Java. Основы хранилища. Блобы. Доступ из локального приложения. (ru-RU)Цикл "Windows Azure & Java": Для доступа к сервисам хранилищ Windows Azure из Java-приложений существует клиентская библиотека под названием Storage Client for Java. Естественно, что данная библиотека обладает основной функциональностью по доступу ко всем сервисам хранилища, включающих блобы, очереди и таблицы. В этой статье приводятся сведения по доступу к хранилищу блобов из Java-приложения. Для введения в технологию сервиса хранилища блобов можно прочитать статью “Основы хранилища Windows Azure. Блобы” по адресу https://social.technet.microsoft.com/wiki/contents/articles/8093.windows-azure-ru-ru.aspx . Для того, чтобы продолжить разработку, создадим новый Java-проект и внесем в него некоторые изменения в Java-проект: 1. Добавьте новый класс TestJavaStorage в Java-проект. Для этого необходимо щелкнуть правой кнопкой мыши на проекте и нажать New, после чего нажать Class (рис.1). Рис.1. Добавление Java-класса. 2. Добавьте директивы импорта в созданный класс.
3. Настройте строку подключения к хранилищу Windows Azure. Строка подключения к хранилищу следует стандартным конвенциям и синтаксису. Замените значения AccountName и AccountKey на соответcтвующие значения, взятые с портала управления Windows Azure.
Либо, если вы хотите использовать правильный подход к архитектуре приложения, добавьте следующий код, получающий строку подключения из файла конфигурации сервиса ServiceConfiguration.cscfg.
В этом случае добавьте также одним из двумя способов – вручную либо с помощью XML Editor в Eclipse – соответствующий элемент в файл ServiceConfiguration.cscfg. Ваш файл должен иметь в секции ConfigurationSettings следующий код.
В данном примере используется первый подход и используется локальный эмулятор хранилища, однако вам ничего не мешает использовать этот код для доступа к облачному хранилищу – достаточно лишь поменять значение параметра строки подключения. Код, предназначенный для управления блобами, аналогичен коду, используемому в C#. Подробнее про управление блобами и контейнерами можно почитать по следующей ссылке –https://social.technet.microsoft.com/wiki/contents/articles/8093.windows-azure-ru-ru.aspx . Поскольку используемые конструкции достаточно подробно рассмотрены по приведенной ссылке, останавливаться подробно на этих моментах не будем – приведу общий код с комментариями.
Обратите внимание на то, что в коде много раз выбрасывается набор исключений FileNotFoundException (может произойти с конструкторами FileInput(Output)Stream), StorageException (типичное исключение для клиентской библиотеки Windows Azure), URISyntaxException (выбрасывается методом getUri()). В приведенном коде выбрасываемые исключения никак не обрабатываются. Избегайте подобного подхода, так как это ведёт к непредсказуемому поведению вашего приложения. Далее просто запустите ваше приложение. Для этого нажмите ALT+Shift+X либо нажмите соответствующую кнопку в меню в Eclipse (рис. 2). Рис.2. Запуск простого Java-проекта. В консоли вы должны увидеть результат (рис.3). Рис.3. Ожидаемый результат выполнения программы. Для того, чтобы просмотреть содержимое хранилища, вы можете воспользоваться либо Server Explorer в Visual Studio 2010 либо специальной утилитой Windows Azure Storage Explorer (рис. 4). Рис. 4. Использование Windows Azure Storage Explorer. К дополнительной функциональности, которая была реализована в последних версиях клиентской библиотеки для доступа к сервисам хранилища Windows Azure, относятся работа с MD5 и разреженные страничные блобы (Sparse Page Blob). Коды взят с официального руководства по клиентской библиотеке для хранилища Windows Azure для Java, который можно посмотреть тут – https://blogs.msdn.com/b/windowsazurestorage/archive/2012/03/05/windows-azure-storage-client-for-java-blob-features.aspx MD5 Есть два подхода к использованию Content-MD5 при работе с сервисом блобов: транзакционный MD5, который используется для обеспечения целостности данных во время передачи блоков или страниц блобов, и полный MD5 для блоба, который хранится вместе с блобом и возвращается с соответствующими операциями GET.
Sparse Page BlobНаиболее типичным способом для использования страничных блобов в облачных приложениях является их использование для образов VHD (Virtual Hard Drive): при создании страничного блоба он создается “забитым” нулями. Сервис хранилища Windows Azure предоставляет возможность инкрементальной записи 512-байтных страниц и отслеживания того, какие страницы были записаны, а также отслеживания того, какие страницы все еще содержат нули в качестве значений и какие страницы содержат записанные данные. В клиентской библиотеке для Java разработчиками была внесена возможность скачивания только полезных данных без задействования кусков, которые заполнены нулями. Во время скачивания, когда библиотека обнаруживает, что текущие данные равны нулю в страничном блобе, происходит генерация нулей вместо дополнительных запросов.
Кроме этого, разработчиками отдельно отмечена дополнительная функциональность в виде продолжения загрузки (Download Resume). Одной из новых возможностей в библиотеке является возможность продолжения загрузки в случае обрыва связи или появления исключения. Наиболее эффективным путем для скачивания конкретного блоба является использование одного вызова REST GET, однако, если вы скачиваете большой блоб (несколько гигабайт), могут возникать проблемы и вопросы того, как правильно обрабатывать обрывы связи и ошибки без пребуферизации или перекачивания всего блоба. . Для разрешения этой проблемы функциональность скачивания блоба должна быть дополнена политиками повторения (retry policies), указанными пользователем. Если операция не должна быть повторена, она просто будет закончена как ожидалось, однако, если политика повторения указывает на то, что операция должна быть повторена процесс скачивания будет “откатан” назад к использованию BlobInputStream . Это позволяет пользователю просто продолжить скачивание. Эта функция работает со всеми скачивания с помощью методаCloudBlob.download. |