Часть вторая
Мы с вами уже обсудили некоторые проекты фонда Apache в материале, опубликованном недавно в "Компьютерных вестях". Но то была, образно выражаясь, только вершина айсберга. Потому что проектов у фонда, как я уже говорил, очень много. В этот раз сделаем уклон в "девелоперские" проекты, которые большей частью посвящены созданию инструментов для Java-разработчиков.
Apache Cayenne
Когда-то я рассказывал читателям "Компьютерных вестей" о замечательном Java-фреймворке Hibernate, предназначенном для работы с реляционными базами данных. Впрочем, наверное, такое определение достаточно плохо отражает сущность работы данного фреймворка. Он относится к разряду средств ORM (Object-Relational Mapping, что на русский язык часто переводится как "объектно-реляционная проекция"). Что делают эти средства? Если вкратце, то ORM-фреймворк позволяет прозрачным образом записывать объекты, которыми оперирует программа, в базу данных и извлекать их оттуда. К чему я вспоминаю здесь о Hibernate? К тому, что Apache Cayenne тоже относится к этой славной категории программных продуктов.
Почему популярны ORM-фреймворки? Потому что они позволяют сделать программный код проще и читабельнее, потому что благодаря им упрощается взаимодействие с реляционными базами данных, потому что при миграции с одной версии СУБД на другую (или даже просто с одной СУБД на другую - ведь бывает и такое!) нет необходимости переписывать заново все имеющиеся в программе SQL-запросы к базе данных... В общем, ORM-фреймворки реально упрощают жизнь программисту, почему их, собственно говоря, и существует такое количество. И, в общем-то, именно благодаря тому, что Apache Cayenne написан для Java, можно сказать, что Java-программистам вообще повезло достаточно крупно, потому что Cayenne - действительно мощный и многофункциональный программный продукт.
Что, кроме, собственно, объектно-реляционного "связывания", может Cayenne предложить своим пользователям? Если углубиться в список того, что именно поддерживает данный фреймворк, то окажется, что список этот отнюдь не маленький, и даже напротив - достаточно большой. Помимо создания новых проектов на базе фреймворка, Cayenne предоставляет возможности по реверсному инжинирингу уже существующих баз данных, что позволяет переводить на ORM-"рельсы" уже существующие проекты. Эта возможность, конечно, будет в норме использоваться не слишком часто, однако все-таки её наличие можно считать достаточно весомым плюсом для данного фреймворка. Ещё поддерживаются атомарные транзакции, SQL-"джойны", нативная XML-сериализация объектов (что делает этот фреймворк особенно полезным для создания web-сервисов), генерация классов в программе на основе возможностей фреймворка Velocity (то есть, как видите, наличествует достаточно тесная связь с данным популярным фреймворком - это ещё один плюс в копилку Cayenne). Что особенно приятно, для создателей приложений на основе Apache Cayenne доступен GUI-инструмент под названием CayenneModeler, который может использоваться при проектировании программ. Среди ещё не упомянутых возможностей стоит упомянуть кэширование, поддержку наследования объектов, высокую степень масштабируемости... Если вас Cayenne заинтересовал, то вы можете узнать подробности об этом фреймворке по следующему адресу: cayenne.apache.org.
Мало кто знает, но Apache Cayenne имеет белорусские корни. Основатель проекта, который до передачи его фонду Apache вела компания ObjectStyle, сам родом из нашей страны, и разработка проекта в настоящее время ведется усилиями белорусских разработчиков. Так что можно гордиться нашими земляками, которые сумели создать и продвинуть такой удобный и эффективный ORM-фреймворк.
Apache OpenJPA
Я уже неоднократно говорил, что в активе фонда Apache великое множество проектов, которые предназначены для решения самых разных задач. Впрочем, это вовсе не означает, что проекты Apache реализованы по принципу "одна задача - один проект". Потому что, как видите, очень многие их этих проектов фонду "достались в наследство" от других организаций, которые то ли не смогли найти для них финансирование, то ли просто не захотели их дальше развивать... Так что, в общем и целом, можно считать совсем не удивительным явлением тот факт, что для того же ORM у Apache есть несколько разных программных продуктов. Вот, к примеру, OpenJPA (openjpa.apache.org), который, на первый взгляд, может показаться очень и очень похожим на Cayenne... Но если приглядеться внимательнее, то отличия все-таки станут заметны.
OpenJPA - это свободная реализация стандарта Java Persistence API, которая позволяет как хранить в базе данных "одиночные" Java-объекты (POJO), так и выступать слоем хранения в таких фреймворках, как, скажем, Spring. Кстати говоря, OpenJPA - это тоже один из проектов, не "родных" для Apache. Когда-то разработкой фреймворка, из которого впоследствии был выделен проект OpenJPA, занималась компания SolarMetric, которую в 2005 году купила BEA Systems, решившая в ходе реструктуризации проектов поделиться частью кода с фондом Apache. В общем-то, думаю, что пользователи фреймворка от такого исхода только выиграли, потому что в руках Apache этому продукту наверняка светит достаточно стабильное и, может быть, даже безоблачное будущее, которое вряд ли могли бы обеспечить постоянно продающие друг друга сравнительно небольшие компании.
Apache Struts
Может сложиться впечатление, что в плане "девелоперских" проектов Apache специализируется исключительно на ORM-решениях. На самом деле впечатление это обманчивое. Среди достаточно известных в широком кругу проектов Apache есть немало таких, которые ни к базам данных, ни к привязке объектов к их содержимому не имеют ни малейшего отношения. И ярким примером этого является Apache Struts - проект, о котором я когда-то давно тому назад тоже рассказывал в "Компьютерных вестях". Впрочем, поскольку было это все-таки давно, полагаю, что сжатое повторение того рассказа вряд ли будет лишним.
Struts - это web-фреймворк, который позволяет сравнительно просто создавать web-приложения, основанные на шаблоне MVC (Model-View-Controller, модель-представление-контроллер). О сути шаблона MVC можно рассказывать долго и со вкусом, но, в целом, можно ограничиться пока что упоминанием о том, что данный шаблон сегодня фактически является стандартом в проектировании web-приложений, потому что позволяет весьма удобным образом разнести друг от друга логику работы приложения, схему взаимодействия с данными и представление этих данных для пользователя. Собственно, именно для того, чтобы создавать приложения, работающие на основе этой схемы, и используется фреймворк Struts, который позволяет программисту избавиться от написания рутинного MVC-кода и вместо этого делать ряд весьма интересных и полезных вещей.
Да, как-то забыл сказать... Struts - это фреймворк, предназначенный для разработки Java-приложений. Подробнее о нем можно почитать по адресу struts.apache.org, а также struts.ru. Последний сайт, как несложно догадаться, русскоязычный, и, хотя он менее информативен, чем официальный англоязычный сайт проекта, для тех, кто только "стартует" Struts'е, он может оказаться даже более предпочтительным.
Apache Velocity
Знаете, что по-английски означает название этого проекта? Думаю, что "Компьютерные вести" читают достаточно образованные люди, которые более-менее владеют английским языком, а потому все уже успели ответить, что velocity - это скорость. Проект с таким интригующим названием наверняка выполняет какие-то достаточно важные функции, которые значительно ускоряют разработку приложений. Что ж, это действительно так.
Как и все рассмотренные сегодня нами проекты Apache, Velocity (velocity.apache.org) предназначен для разработки приложений на Java. Но разработка Java-приложений - понятие более чем емкое. Для чего же именно предназначен этот фреймворк? По большому счету, для того же, для чего и Struts - для отделения логики работы web-приложения от представления, которое может увидеть пользователь. Только здесь это реализуется несколько другим образом. В Velocity программист работает с шаблонами, которые и являются святая святых этого фреймворка.
Как это работает на практике? Например, при создании web-приложения дизайнер оставляет место для динамически внедряемой на страницу информации. Когда сервлет обрабатывает такую страницу, то Velocity обращается непосредственно к объектам в Java-коде, что, с одной стороны, делает программирование сравнительно простым и удобным, а с другой, никоим образом не мешает построение приложений на основе шаблона Model-View-Controller.
Собственно говоря, применение Velocity в реальных проектах далеко не ограничивается Web-приложениями, хотя именно для них Velocity применяется наиболее часто. Этот фреймворк также часто находит свое применение в генерации исходного кода на Java, SQL, PostScript (да-да, все благодаря шаблонам), для автоматической рассылки писем по электронной почте (для уведомлений, хотя, надо думать, и для спама... впрочем, последнее особо не афишируется).
Что ж, вот и подошла к концу вторая часть нашего с вами разговора о проектах фонда Apache. Надеюсь, что вам было интересно с ними ознакомиться хотя бы вот в таком вот беглом режиме (потому что подробное рассмотрение займет едва ли не все полосы "Компьютерных вестей"). Возможно, мы еще вернемся с вами к разговору о проектах Apache Foundation (потому что их всё ещё, как ни крути, осталось немало).
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by
Горячие темы