вторник, 27 апреля 2010 г.

Сервлеты и OSGi: будь проще и люди к тебе потянутся


Данную заметку можно рассматривать как продолжение предыдущей - О любви и дружбе между сервлетами и OSGi. Рассмотрим еще один способ регистрации сервлета в OSGi-контейнере - использование декларативных сервисов.

Использование декларативных сервисов обеспечивает следующее преимущество по сравнению с использованием точек расширения и сервис-трекера: OSGi контейнер в этом случае сам управляет жизненным циклом бандла. Имеется ввиду следующее: в декларативном сервисе определяются методы регистрации зависимостей и старта/останова сервиса. Пока все зависимости не будут удовлетворены - сервис не будет запущен. Таким образом гарантируется, что в момент запуска декларативного сервиса регистрации сервлета, сервис HttpService будет доступен. Данное обстоятельство позволяет существенно упростить код регистрации сервлета, сделать его короче и понятнее. К тому же, в случае использования декларативных сервисов, нам не нужен активатор бандла.

воскресенье, 25 апреля 2010 г.

ECF: Пишем SOAP-клиента на примере использования веб-сервиса "Аэрофлота"


В версии 3.2 Eclipse Communication Framework появилась возможность разрабатывать клиенты к SOAP-сервисам (до этого была возможность использовать только REST-сервисы), используя Remote Services API. Инкапсулирована данная возможность в бандле org.eclipse.ecf.remoteservice.soap.

Есть одно радикальное отличие в реализации ECF-клиента к SOAP веб-сервису от реализации клиентов к другим типам удаленных сервисов. Дело в том, что бандл org.eclipse.ecf.remoteservice.soap содержит лишь набор неких базовых классов, конкретный же контейнер, представляющий собой клиента к конкретному веб-сервису, придется писать самостоятельно. Точно так же самостоятельно придется реализовывать непосредственно логику обращения к веб-сервису, используя для этого такие библиотеки, как Axis, Axis 2 или XFire.

Давайте рассмотрим пример - реализуем бандл, name.samolisov.ecf.webservices.demo, который будет содержать удаленный сервис, инкапсулирующий обращение к некоторым методам веб-сервиса компании "Аэрофлот". WSDL-описание веб-сервиса компании "Аэрофлот" расположено здесь. Данный сервис предоставляет информацию об аэропортах, рейсах, предоставляет табло прилетов и табло вылетов. Мы реализуем обращение к следующим методам: AirportList - предоставляет список аэропортов, в/из которые/ых летают самолеты "Аэрофлота", AirportInfo - возвращает информацию об аэропорте по его коду и метод Arrival - принимает код эропорта, дату, поле по которому будет осуществляться сортировка и направление сортировки и возвращает табло прилетов для данного аэропорта на данную дату, отсортированное по указанным критериям. Мы реализуем обращение к данному методу, с сортировкой по аэропорту по возрастанию.

суббота, 17 апреля 2010 г.

Параллельный Reduce: математические основы и пример реализации на Java


В данной статье рассмотрены понятия свертки и ссылочного гомоморфизма, их взаимосвязь, приведен пример построения многопоточного Reduce и сравнение его скорости работы с однопоточным вариантом на примере анализа данных с сервера РТС. В дальнейшем планирую развить данную работу и реализовать MapReduce с помощью R-OSGi.

понедельник, 12 апреля 2010 г.

Сервлеты и OSGi: о любви и дружбе между сервлетами и OSGi


Как известно, одной из основных областей применения языка и платформы Java является разработка веб-приложений, по крайней мере в России, если ищут программиста на данном языке, то в описании вакансии как правило указывают J2EE, Servlets, JSP, JSF и прочие умные слова. В сферу моих интересов входит разработка модульных приложений с использованием технологии OSGi и у меня есть хорошая новость: сервлеты тоже могут быть модульными и могут интегрироваться с данной технологией.

В такой реализации OSGi, как Equinox присутствует сервлет-контейнер (Jetty) и специальные сервисы, предназначенные для регистрации сервлетов и управления их жизненным циклом. Строго говоря, для Equinox разработаны средства интеграции и с другими сервлет-контейнерами и серверами приложений, но в данной заметке будет рассмотрено только использование Jetty.

воскресенье, 11 апреля 2010 г.

Об использовании динамических Proxy-классов в Java


Динамические прокси-классы


Сегодня мы поговорим о такой интересной особенности JVM, как динамические прокси-классы. Предположим, что у нас есть класс A, реализующий некоторые интерфейсы. Java-машина во время исполнения может сгенерировать прокси-класс для данного класса A, т.е. такой класс, который реализует все интерфейсы класса A, но заменяет вызов всех методов этих интерфейсов на вызов метода InvocationHandler#invoke, где InvocationHandler - интерфейс JVM, для которого можно определять свои реализации.

воскресенье, 4 апреля 2010 г.

Работаем с F# в Emacs


Сегодня мы поговорим о том, как использовать замечательный редактор Emacs для разработки на языке F# от одной небезызвестной корпорации.

Не секрет, что синтаксис языка программирования F# был чуть менее, чем целиком позаимстован с синтаксиса OCaml, поэтому, чтобы на нем было удобно программировать в Emacs - достаточно адаптировать режим для OCaml, добавив работу с отступами, потому что в F# как и в Python отступы имеют значение, и с интерпретатором fsi. К счастью работа по адаптации уже проведена: Laurent Le Brun создал fsharp-mode, который хостится на SourceForge. Проект сейчас находится в стадии alpha, однако умеет следующее:

1. Подсветку синтаксиса.
2. Работу с отступами: автоматическую расстановку отступов, сдвиги блоков кода влево-вправо и т.д.
3. Работу с интерпретатором F# - fsi.exe. Можно отправлять произвольные блоки кода на интерпретацию нажатием комбинации клавиш и видеть результат интерпретации в отдельном интерактивном буфере.

Рассмотрим подключение режима, его настройку и использование подробнее.