<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-356529059087180550</atom:id><lastBuildDate>Tue, 09 Jul 2013 23:13:38 +0000</lastBuildDate><category>Tomcat</category><category>корпоративное приложение</category><category>JDK</category><category>JVM</category><category>архитектура</category><category>Agile</category><category>Java EE</category><category>Ruby</category><category>Rich Internet Applications</category><category>развитие Java</category><category>Java 7</category><category>XML</category><category>open source</category><category>компоненты</category><category>Java</category><category>Android</category><category>сервер приложений</category><category>Unit тестирование</category><category>RIA</category><category>Google</category><category>Groovy</category><category>веб-сервер</category><category>JavaFX</category><title>Feel Java</title><description>Добро пожаловать в мир Java!</description><link>http://feeljava.blogspot.com/</link><managingEditor>noreply@blogger.com (Andriy Sholokh)</managingEditor><generator>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-356529059087180550.post-7115789068632708451</guid><pubDate>Sat, 01 Mar 2008 16:08:00 +0000</pubDate><atom:updated>2008-03-01T10:00:30.720-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>XML</category><title>Области применения XML.</title><description>&lt;span style=";font-family:georgia;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;XML – это формат обмена данными... И ничего более.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;font-family:georgia;" &gt;Ни для кого не секрет, что XML является одной из наиболее популярных технологий, появившихся за последние 10 лет. Но для каких целей все-таки целесообразно ее использование? Д&lt;span style="font-family:georgia;"&gt;ля описания конфигурационных данных? Для передачи данных? Как средство хранения данных? Для решения каких задач следует применять XML? Данная статья дает пищу для размышления и позволит Вам сформулировать свой ответ на данный вопрос.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;Хранение конфигурационных данных.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-family:georgia;"&gt;Одним из первых вариантов применения формата XML, и до сих пор одним из наиболее популярных, являет&lt;/span&gt;ся его применение для хранения конфигурационных данных. Практически сразу, как только XML стал популярен, разработчики стали заменять созданные ими ранее конфигурационные файлы файлами в формате XML. Файлы настроек, текстовые файлы, содержащие пары имя-значение, значения разделенные запятыми, собственные форматы файлов, были вытеснены XML документами, состоящими из тегов, элементов, атрибутов и текстовых данных.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;Избыточный формат данных.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Наиболее очевидной проблемой такого применения XML является его громоздкость. Другими словами, данные, представленные в формате XML, имеют очень большой объем. К примеру, вот простой фрагмент файла, содержащего пары имя-значение:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;firstName=Brett&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;lastName=McLaughlin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;email=brett@newInstance.com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Сравним его с абсолютно такими же данными в формате XML:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style='font-family: Courier New;'&gt;&lt;span style=' color: Blue;'&gt;&amp;lt;?&lt;/span&gt;&lt;span style=' color: Maroon;'&gt;xml&lt;/span&gt;&amp;nbsp;&lt;span style=' color: Red;'&gt;version&lt;/span&gt;="&lt;span style=' color: Blue;'&gt;1.0&lt;/span&gt;"&lt;span style=' color: Blue;'&gt;?&amp;gt;&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Blue;'&gt;&amp;lt;&lt;/span&gt;&lt;span style=' color: Maroon;'&gt;config-data&lt;/span&gt;&lt;span style=' color: Blue;'&gt;&amp;gt;&lt;/span&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;&amp;lt;&lt;/span&gt;&lt;span style=' color: Maroon;'&gt;firstName&lt;/span&gt;&lt;span style=' color: Blue;'&gt;&amp;gt;&lt;/span&gt;Brett&lt;span style=' color: Blue;'&gt;&amp;lt;&lt;/span&gt;/&lt;span style=' color: Maroon;'&gt;firstName&lt;/span&gt;&lt;span style=' color: Blue;'&gt;&amp;gt;&lt;/span&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;&amp;lt;&lt;/span&gt;&lt;span style=' color: Maroon;'&gt;lastName&lt;/span&gt;&lt;span style=' color: Blue;'&gt;&amp;gt;&lt;/span&gt;McLaughlin&lt;span style=' color: Blue;'&gt;&amp;lt;&lt;/span&gt;/&lt;span style=' color: Maroon;'&gt;lastName&lt;/span&gt;&lt;span style=' color: Blue;'&gt;&amp;gt;&lt;/span&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;&amp;lt;&lt;/span&gt;&lt;span style=' color: Maroon;'&gt;email&lt;/span&gt;&lt;span style=' color: Blue;'&gt;&amp;gt;&lt;/span&gt;brett@newInstance.com&lt;span style=' color: Blue;'&gt;&amp;lt;&lt;/span&gt;/&lt;span style=' color: Maroon;'&gt;email&lt;/span&gt;&lt;span style=' color: Blue;'&gt;&amp;gt;&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Blue;'&gt;&amp;lt;&lt;/span&gt;/&lt;span style=' color: Maroon;'&gt;config-data&lt;/span&gt;&lt;span style=' color: Blue;'&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;email&gt;&lt;/email&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Как видим, XML файл содержит значительное количество вспомогательных данных, введенных для удобства XML. Это означает, что в этом случае мы предпочли XML технологию производительности (чтение меньшего объема данных занимает меньше времени и наоборот). &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;API для обработки XML.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;В дополнение к значительному объему служебных данных в XML файле вам потребуется дополнительное программное обеспечение для его обработки и чтения. Для этого вы можете написать свой XML парсер или же использовать один из многих уже реализованных для разных платформ. Таким образом, вам потребуется добавить одну или несколько дополнительных библиотек к вашему проекту и изучить их API.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Хотя изучение новых API никогда не помешает, представьте, что вам придется заменить существующий, хорошо протестированный код обработки текстовых конфигурационных файлов, новым кодом, использующим дополнительные библиотеки, которые потребуется включить в проект. Другими словами, вам придется заменить рабочий код новым, вводя при этом дополнительные зависимости.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;Цена гибкости&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Цена использования XML для описания конфигурационных файлов действительно высока.  Я лишь упомянул об избыточности и дополнительных зависимостях, однако существует еще масса негативов. Главное преимущество использования XML, если не считать преимуществом осознание того, что ты крутой парень, который научился использовать XML, это гибкость. Если вы уже используете XML или имеете несколько приложений, возможно реализованных на разных языках, которые используют общие данные, тогда применение XML является правильной стратегией хранения конфигурационных данных.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;Вполне вероятно, что существуют и другие веские причины использования XML файлов для описания конфигурационных данных, однако я не буду излагать здесь размышления о них. Взамен предлагаю вам обратиться к &lt;span style="font-weight: bold;"&gt;[Ресурсам]&lt;/span&gt;, посетить форум по Java XML технологиям и поделится своими мыслями о возможных преимуществах использования XML для представления конфигурационных данных. Мне будет интересно послушать вас.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=";font-family:georgia;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;XML как формат передачи данных.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Кроме как формат описания конфигурационных данных, XML стал популярен для обмена данными между компонентами или уровнями приложения. Хотя такой подход к использованию XML более сложен технически он стал очень популярен как и технологии, основанные на нем, такие как SOAP, веб-сервисы.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;Передача данных внутри приложения.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Одним из наиболее популярных вариантов использования XML является его использование в качестве формата передачи данных между компонентами приложения. К сожалению, в то же время этот вариант является одним из худших примеров использования XML для передачи данных.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;При передаче данных в одном и том же приложении вы сталкиваетесь с теми же недостатками, которые описывались при рассмотрении XML как формата описания конфигурационных данных: избыточность, большие объемы файлов, необходимость использования дополнительных библиотек. При этом выгода от использования XML не велика. В большинстве случает, более эффективным решением является отправка сериализованых данных или объектов. Этот подход, как правило, более быстрый, так как объем передаваемых данных меньше, декодирование данных при получении достаточно просто.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;Обмен данными между приложениями.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Намного более эффективным вариантом использования XML является представление с помощью него данных для обмена между независимыми приложениями. Например, в вашем приложении, имеется компонент, отравляющий данные другому компоненту в приложении бизнес-партнера. Данные при этом представляются в формате XML.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Данный вариант имеет ряд преимуществ, так как вам не требуется знать язык реализации другого приложения, неважно как переданные данные будут в нем использоваться. И напротив, когда вы получаете данные, вам совершенно не требуются знания о приложении-отправителе. В данном случае гибкость, которую вы получаете, перевешивает избыточность XML, потому что требуется лишь кодировать данные в стандартном XML формате без надобности изучения специфики и технологий, используемых в приложении другой компании. &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;Заключение.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Тогда как большинство статей предлагают конкретные решения специфических проблем, автор данной публикации предлагает вам самим принимать решение. В общем случае для приложений нет единственно правильного варианта «за» или «против». В некоторых случаях XML является лучшим выбором среди альтернатив, иногда вполне определенно это не лучший вариант. Но в любом конкретном случае есть правильное решение. Ваша задача, рассмотрев примеры использования XML для общих вариантов приложений, взвесив все особенности вашего приложения и требования к нему, выбрать правильный подход к решению стоящей перед вами задачи. &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;Ресурсы.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;a href="http://www.ibm.com/developerworks/forums/dw_forum.jsp?forum=262&amp;amp;cat=11"&gt;Дискуссионный форум по XML&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;a href="http://www.ibm.com/developerworks/views/xml/library.jsp"&gt;DeveloperWors&lt;/a&gt; - широкое разнообразие статей, заметок, руководств, стандартов по XML.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:georgia;" &gt;(Автор: Бреет МакЛокхин, 20 февраля 2007 года. Оригинал сатьи: «XML and Java technology: What's XML really good for?»)&lt;/span&gt;</description><link>http://feeljava.blogspot.com/2008/03/xml.html</link><author>noreply@blogger.com (Andriy Sholokh)</author><thr:total>24</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-356529059087180550.post-4117121543104585204</guid><pubDate>Sun, 24 Feb 2008 10:45:00 +0000</pubDate><atom:updated>2008-02-24T03:19:10.419-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>сервер приложений</category><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>корпоративное приложение</category><category domain='http://www.blogger.com/atom/ns#'>архитектура</category><category domain='http://www.blogger.com/atom/ns#'>компоненты</category><category domain='http://www.blogger.com/atom/ns#'>веб-сервер</category><category domain='http://www.blogger.com/atom/ns#'>Java EE</category><category domain='http://www.blogger.com/atom/ns#'>Tomcat</category><title>Что такое Tomcat?</title><description>&lt;span style="font-style: italic;font-family:georgia;" &gt;Что такое Tomcat и к какой категории сред для разворачивания Java приложений он относится.&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Когда Java разработчики рассматривают серверы приложений, одним из первых упоминается Tomcat. Он применяется как достаточно простая среда для разворачивания Java приложений, и в большинстве своем подпадает под критерии сервера приложений, хотя реально является Web-сервером. В данной статье Джеф Хенсон затрагивает вопрос о том, является ли Tomcat сервером приложений. Для начала, объясняется разница между сервером приложений, веб-сервером и контейнером Java EE. После этого определяется, к какой из категорий сред разворачивания Java приложений относится Tomcat.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Путаница относительно того, является ли Tomcat сервером приложений, порождает горячие дискуссии среди Java разработчиков - одни утверждают, что Tomcat является таковым, другие категорически отвергают это. По правде говоря, Tomcat часто используется как сервер приложений, в некоторых случаях он отлично подходит для этой роли. Для разработчиков, использующих Tomcat как сервер приложений, он является таковым, несмотря на формальное определение.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;В этой статье я попытаюсь ответить на вопрос, является все же Tomcat сервером приложение или нет. Начну с пояснения различий между сервером приложений, веб-сервером и контейнером Java EE, после чего рассмотрю несколько сценариев, при которых веб-сервер Tomcat может быть использован как сервер приложений.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;Java Enterprise Edition&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Платформа Java Enterprise Edition, или Java EE, де-факто является стандартом разработки серверных Java приложений. Соответствие стандарту Java EE является основным фактором, определяющим разницу между веб-сервером и сервером приложений.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Стандарт Java EE расширяет платформу Java Standard Edition (Java SE) добавляя поддержку веб-сервисов, модели бизнес компонентов, API управления, коммуникационных протоколов, распределенных и веб-приложений. Замечу, что веб-приложения являются лишь частью того, что описывает Java EE.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Стандартный Java EE сервер приложений должен поддерживать такие технологии как EJB (сервер и контейнер), JNDI, JMS (Java Message Service), JTA (Java Transaction API), архитектуру J2EE Connector. Java EE задает контейнеры для серверных приложений, сервлетов, EJB компонентов. Такие контейнеры предоставляют функциональность, позволяющую устанавливать, сохранять и выполнять поддерживаемые компоненты.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Java EE также предоставляет стандартную архитектуру для взаимодействия Java EE приложений и серверов приложений с гетерогенными корпоративными информационными системами, такими как ERP-системы, мейнфреймы, системы баз данных и т.д. Архитектура Java EE Connector предоставляет средства взаимодействия с  корпоративными системами используя стандартный интерфейс, известный как адаптер ресурсов (Resource adapter).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;На рисунке 1 показаны уровни и компоненты типичной архитектуры Java EE приложения.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_u7tmaAntWdU/R8FNRadXNAI/AAAAAAAAAAo/71pkVRsuivk/s1600-h/tomcat6_1_thumb.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_u7tmaAntWdU/R8FNRadXNAI/AAAAAAAAAAo/71pkVRsuivk/s320/tomcat6_1_thumb.jpg" alt="" id="BLOGGER_PHOTO_ID_5170498808753632258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 1 - Типичная архитектура Java EE приложения.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Сервер приложений Java EE должен поддерживать некоторые, но не все компоненты, показанные на рисунке 1. Использование сервера приложений Java EE дает удобство размещения системы в отлаженном окружении, которое предоставляет все сервисы корпоративной разработки Java. В некоторых случаях, однако, Java EE сервер содержит избыточный набор сервисов, когда необходимы лишь некоторые из них.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Например, большинству Java веб-приложений необходим для работы лишь ограниченный набор технологий, таких как сервлеты, JSP, JDBC. Именно поэтому многие разработчики выбирают Tomcat как сервер приложений Java EE, поддерживающий указанные технологии.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Часто выбор того, использовать сервер приложений или веб-сервер, зависит от того, какие коммуникации требуются для связи компонентов приложений. Рассмотрим варианты. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;EAR, WAR, JAR и Java EE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Приложение Java EE может состоять из нескольких компонентов, таких как, например, EJB, веб-модули, адаптеры ресурсов, клиентские модули J2EE. Каждый из компонентов может иметь свой дескриптор развертывания – XML файл, описывающий компонент. Для разворачивания Java EE компонентов применяется файл в формате «Java архив» (JAR), который расширяется несколькими дополнительными форматами в зависимости от того или иного типа компонента. Формат JAR основан на формате ZIP.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;JAR файл может содержать Java классы, XML файлы, вспомогательные ресурсы, статические HTML файлы и другие. Стандартное Java веб-приложение разворачивается в WAR (Web Application Archive) файле, который является JAR файлом с расширением WAR. Стандартное Java EE приложение разворачивается в EAR (Enterprise Application Archive) файле, который является JAR файлом с расширением EAR.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;WAR файл - это специализированный JAR файл, содержащий такие компоненты веб-приложения как сервлеты, JSP файлы, HTML файлы, дескрипторы развертывания, библиотеки классов и тому подобное. WAR файл может быть развернут на веб-сервере, таком как Tomcat.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;EAR файл – это специализированный JAR файл, содержащий компоненты Java EE приложения, такие как веб-приложения (WAR), EJB, адаптеры ресурсов и так далее. Файл EAR может быть развернут на сервере приложений Java EE, таком как JBoss, WebLogic или WebSphere. Сервер приложений Java EE загружает EAR файлы в процессе выполнения и устанавливает обнаруженные в нем компоненты на основе инструкций, описанных в дескрипторе развертывания каждого компонента.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;На рисунке 2 показаны компоненты, часто встречающиеся в Java EE приложении.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_u7tmaAntWdU/R8FNY6dXNBI/AAAAAAAAAAw/v1cphNr-e5M/s1600-h/tomcat6_2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_u7tmaAntWdU/R8FNY6dXNBI/AAAAAAAAAAw/v1cphNr-e5M/s320/tomcat6_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5170498937602651154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 2 - Компоненты типичного Java EE приложения.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;В окружении Java EE имеются специализированные контейнеры для управления изоляцией компонентов и совместного использования ресурсов. Эти контейнеры в свою очередь управляются сервером приложений. Контейнеры предоставляют контекст, в котором Java EE компоненты разворачиваются и выполняются.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;Веб-приложения и корпоративные приложения&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Очень часто определение того, что такое Tomcat, связано с вопросом о том, в чем разница между корпоративным приложением и веб-приложением. Традиционно, корпоративное Java EE приложение определяется как набор следующих компонентов и технологий:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    EAR файлы&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Java сервлеты&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    JavaServer Pages или JavaServer Faces&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Enterprise JavaBeans (EJB)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Сервисы аутентификации и авторизации (JAAS)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Архитектура J2EE Connector&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    JavaBeans Activation Framework (JAF)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    JavaMail&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Java Message Service (JMS)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Java Persistence API (JPA)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;Java Transaction API (JTA)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    The Java Management Extensions (JMX) API&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Java API for XML Processing (JAXP)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    The Java API for XML-based RPC (JAX-RPC)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    The Java Architecture for XML Binding (JAXB)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    The SOAP with Attachments API for Java (SAAJ)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Java Database Connectivity (JDBC) framework&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:georgia;"&gt;В свою очередь, веб-приложение Java объединяет подмножество компонентов и технологий корпоративного приложения, таких как:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    WAR файлы&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Java сервлеты&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    JavaServer Faces или JavaServer Pages&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;    Java Database Connectivity (JDBC) framework&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:georgia;"&gt;Популярные Фреймворки, такие как Apache Struts, Spring, Hibernate и другие стирают традиционную грань между корпоративными приложениями и веб-приложениями. Каждый фреймворк предлагает свою точку зрения на то, как решить ту или иную задачу. Каждый фреймворк пытается более эффективно решить те или иные сложности, возможно используя набор дополнительных технологий.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Прояснить ситуацию поможет рассмотрение сценариев взаимодействия компонентов корпоративных или веб-приложений. Такие сценарии обсуждаются далее.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;Сценарии Java EE приложения&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;В типичном Java EE веб-приложении HTML клиент отправляет запрос серверу, где этот запрос обрабатывается веб-контейнером сервера приложений. Веб-контейнер вызывает сервлет, который сконфигурирован для обработки определенного контекста запроса.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Начальный запрос HTML клиента проиллюстрирован на рисунке 3.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_u7tmaAntWdU/R8FNmKdXNCI/AAAAAAAAAA4/M0nL1qARH-g/s1600-h/tomcat6_3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_u7tmaAntWdU/R8FNmKdXNCI/AAAAAAAAAA4/M0nL1qARH-g/s320/tomcat6_3.jpg" alt="" id="BLOGGER_PHOTO_ID_5170499165235917858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 3 – Начальный запрос HTML клиента.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Как только сервлет получает начальный запрос, инициируется выполнение определенной бизнес логики для завершения запроса. При этом вызывается один или несколько бизнес сервисов или компонентов как показано на рисунке 4.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_u7tmaAntWdU/R8FNsKdXNDI/AAAAAAAAABA/cZ1-SgMZs4o/s1600-h/tomcat6_4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_u7tmaAntWdU/R8FNsKdXNDI/AAAAAAAAABA/cZ1-SgMZs4o/s320/tomcat6_4.jpg" alt="" id="BLOGGER_PHOTO_ID_5170499268315132978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 4 – Бизнес сервисы или компоненты в JEE архитектуре.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Некоторым бизнес сервисам или компонентам требуется доступ к хранилищам данных или информационным системам. Как правило, для этих целей вводится дополнительный слой абстракции между бизнес-сервисами и хранилищем данных, что позволяет сделать максимально безболезненным возможное изменение источника данных в будущем. При этом объекты доступа к данным (DAO) представляются отдельными компонентами (рисунок 5).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_u7tmaAntWdU/R8FN0adXNEI/AAAAAAAAABI/WKxgOutbzLA/s1600-h/tomcat6_5_thumb.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_u7tmaAntWdU/R8FN0adXNEI/AAAAAAAAABI/WKxgOutbzLA/s320/tomcat6_5_thumb.jpg" alt="" id="BLOGGER_PHOTO_ID_5170499410049053762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 5 – Использование DAO объектов бизнес сервисами для доступа к хранилищу данных.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Когда обработка запроса на сервере завершена, HTML клиенту возвращается ответ в определенном формате. Этот процесс показан на рисунке 6.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_u7tmaAntWdU/R8FO1qdXNJI/AAAAAAAAABw/yHRX4XAT9gA/s1600-h/tomcat6_6_thumb.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_u7tmaAntWdU/R8FO1qdXNJI/AAAAAAAAABw/yHRX4XAT9gA/s320/tomcat6_6_thumb.jpg" alt="" id="BLOGGER_PHOTO_ID_5170500531035518098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 6 – Ответ возвращается HTML клиенту.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Сценарий, проиллюстрированный на рисунке 6, может быть реализован с использованием ограниченного набора Java EE технологий, таких как, например, сервлеты, JDBC, JSP и тому подобные. Tomcat как и другие веб-серверы, предоставляющие среду выполнения сервлетов и JSP, вполне могут быть использованы как серверы приложений для данного сценария.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;Увеличение сложности&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Теперь предположим, что добавляется новое требование к приложению, которое заключается в необходимости реализации асинхронного обмена сообщениями между бизнес компонентами. В Java системах это как правило реализуется средствами Java Message Service (JMS) как показано на рисунке 7.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_u7tmaAntWdU/R8FOJKdXNGI/AAAAAAAAABY/g2SYpLH5218/s1600-h/tomcat6_7_thumb.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_u7tmaAntWdU/R8FOJKdXNGI/AAAAAAAAABY/g2SYpLH5218/s320/tomcat6_7_thumb.jpg" alt="" id="BLOGGER_PHOTO_ID_5170499766531339362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 7 – Управление асинхронным обменом сообщениями между бизнес компонентами средствами JMS.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Большинство веб-серверов не предоставляют JMS как стандартный элемент, однако достаточно просто добавить реализацию JMS на веб-сервер. Таким образом, сценарий приложения, проиллюстрированный на рисунке 7, может быть реализован, опять таки, лишь средствами веб-сервера с задействованием дополнительных сервисов.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Далее, предположим, появляется требование по реализации взаимодействия бизнес компонентов приложения со сторонними корпоративными информационными системами. Java EE предлагает архитектуру Java Connector, являющуюся общим стандартом для решения подобных задач. Используя архитектуру Java Connector, архитектура приложения приобретает вид, показанный на рисунке 8.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_u7tmaAntWdU/R8FOV6dXNHI/AAAAAAAAABg/LD663QgTdpY/s1600-h/tomcat6_8_thumb.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_u7tmaAntWdU/R8FOV6dXNHI/AAAAAAAAABg/LD663QgTdpY/s320/tomcat6_8_thumb.jpg" alt="" id="BLOGGER_PHOTO_ID_5170499985574671474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 8 – JCA предоставляет средства взаимодействия между бизнес компонентами и корпоративными информационными системами.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Теперь архитектура по сложности подходит для сервера приложений JAVA EE. Веб-сервер такой как Tomcat мог быть применен для данной ситуации при использовании дополнительных средств. Однако сложности управления и мониторинга такой сложной смешанной системы, не позволяют судить о целесообразности такого подхода.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;В конце концов, на рисунке 9 представлена сервис-ориентированная архитектура средней сложности, использующая, наряду с уже рассмотренными технологиями, такие технологии как EJB и веб-сервисы.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_u7tmaAntWdU/R8FOg6dXNII/AAAAAAAAABo/g7M1asmbKyo/s1600-h/tomcat6_9_thumb.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_u7tmaAntWdU/R8FOg6dXNII/AAAAAAAAABo/g7M1asmbKyo/s320/tomcat6_9_thumb.jpg" alt="" id="BLOGGER_PHOTO_ID_5170500174553232514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Рисунок 9 - Сервис-ориентированная архитектура средней сложности.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Архитектура, представленная на рисунке 9, достигает сложности, требующей использования проверенного, расширяемого, управляемого сервера корпоративных приложений Java EE. Однако еще раз повторюсь, что разработчики с достаточным уровнем мастерства могут использовать Tomcat для веб-уровня приложения при этом применяя вспомогательные технологии и системы для поддержки уровня бизнес логии и уровня данных. Но этот подход достаточно сомнителен, если имеется возможность использования полнофункционального сервера приложений.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;Использование Tomcat как сервера приложений&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Как показывает рассмотренный выше пример, Apache Tomcat может быть использован как сервер приложений, особенно для несложных Java EE веб-приложений. Tomcat в большинстве своем применяется Java разработчиками. Свою популярность он завоевал благодаря простоте использования и поддержке различных технологий, принятых считаться стандартными для окружения Java веб-приложений. Среди таких технологий: JNDI ресурсы, источники данных JDBC, поддержка JSP, репликация сессий, поддержка виртуального хостинга, поддержка кластеризации, JMX и мониторинг. Tomcat также популярен среди Java разработчиков тем, что имеет достаточно конкурентоспособную производительность как сервер.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;В Tomcat версии 6 добавлены некоторые новые возможности, такие как обработка асинхронных HTTP запросов, разделение потоков, улучшенное JMX управление и мониторинг, сервлеты версии 2.5 и JSP 2.1.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Но даже, несмотря на новые возможности, Tomcat не в полной мере поддерживает стандарты Java EE. В нем всё еще отсутствует поддержка распределенных транзакций, EJB, JMS. Для приложений, требующих эти компоненты, требуется разворачивание таких серверов как JBoss, Geronimo, WebLogic, WebSphere или Glassfish. Следует отметить, что многие серверы приложений Java EE используют Tomcat как веб-контейнер.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;З&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;аключение&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Формальные различия между серверами приложений Java EE и веб-серверами понятны, но реальные различия менее очевидны. Хотя Tomcat нельзя в полной мере назвать сервером приложений, он, как показала эта статья, до определенной степени успешно применим в данной роли.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;При выборе окружения для конкретного приложения или системы следует проанализировать требования, определить, поддержка каких Java EE компонентом будет необходима. Для простых, не масштабируемых веб-приложений Tomcat применим как быстрое, надежное, легковесное решение. Для разворачивания более сложных корпоративных приложений, сервис-ориентированных архитектур или масштабируемых веб-приложений использование полнофункционального сервера приложений Java EE будет более целесообразным.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;Об авторе&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Джеф Хенсон (jeff@jeffhanson.com) &lt;span style="font-family:georgia;"&gt;обладает более чем 20-летним опытом разработки программного обеспечения, включая работу ведущим разработчиком проекта Windows OpenDoc и главным архитектором платформы Zareus SOA. Автор большого числа статей, книг, он является главным архитектором компании Max Software Inc., где руководит командами разработчиков клиентского и серверного программного обеспечения на языках C++, PHP и J2EE.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:georgia;" &gt;(Автор: Джеф Хэнсон, Дата: 22/01/2008. Оригинал статьи: «Is Tomcat an application server?. By Jeff Hanson»).&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-style: italic;font-family:georgia;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-family:georgia;" &gt;&lt;/span&gt;</description><link>http://feeljava.blogspot.com/2008/02/tomcat.html</link><author>noreply@blogger.com (Andriy Sholokh)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_u7tmaAntWdU/R8FNRadXNAI/AAAAAAAAAAo/71pkVRsuivk/s72-c/tomcat6_1_thumb.jpg' height='72' width='72'/><thr:total>17</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-356529059087180550.post-3473252188235404945</guid><pubDate>Thu, 14 Feb 2008 21:34:00 +0000</pubDate><atom:updated>2008-03-01T09:55:57.322-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Java</category><category domain='http://www.blogger.com/atom/ns#'>JavaFX</category><category domain='http://www.blogger.com/atom/ns#'>Rich Internet Applications</category><category domain='http://www.blogger.com/atom/ns#'>Agile</category><category domain='http://www.blogger.com/atom/ns#'>JDK</category><category domain='http://www.blogger.com/atom/ns#'>Android</category><category domain='http://www.blogger.com/atom/ns#'>Groovy</category><category domain='http://www.blogger.com/atom/ns#'>Java 7</category><category domain='http://www.blogger.com/atom/ns#'>JVM</category><category domain='http://www.blogger.com/atom/ns#'>open source</category><category domain='http://www.blogger.com/atom/ns#'>развитие Java</category><category domain='http://www.blogger.com/atom/ns#'>Unit тестирование</category><category domain='http://www.blogger.com/atom/ns#'>RIA</category><category domain='http://www.blogger.com/atom/ns#'>Ruby</category><category domain='http://www.blogger.com/atom/ns#'>Google</category><title>Будущее - это настоящее. Java разработка в 2008 году.</title><description>&lt;div  style="text-align: justify;font-family:georgia;"&gt;&lt;span style="font-style: italic;"&gt;Что прошедшие 12 месяцев говорят о грядущем годе?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Прошедший 2007-й год был отмечен развитием динамических языков, эволюцией JVM в сторону открытия исходного кода, ростом компании Google, являющейся стратегическим участником сообщества Java. Вопрос в том, что всё это может нам сказать о наступившем годе? Эндрю Гловер имеет несколько ответов для Java разработчиков, желающих знать уже сейчас, что готовит нам новый, 2008-й год.&lt;br /&gt;&lt;br /&gt;Французский поэт Пол Валери однажды сетовал на то, что "проблема наших времен в том, что будущее не является тем, чем принято его осознавать". Этот комментарий Валери был произнесен много лет назад, но он всё еще актуален для тех из нас, кто живет в эпоху Интернета, движимого развитием платформы Java.&lt;br /&gt;&lt;br /&gt;Немногим более чем за одно десятилетие ми увидели развитие и закат Java-апплетов. Стали свидетелями появления таких технологий как JSF, Spring, Struts, и переопределения Java одновременно в язык программирования и платформу. Платформа Java разделилась на три составляющие: Standard, Enterprise и Micro, а JDK была представлена сообществу разработчиков свободно распространяемого программного обеспечения. Язык Java был расширен аннотациями, перечислениями, развитыми коллекциями и многим другим. Его ядро, Java Runtime Edition (JRE), используется новыми динамическими языками, такими как Groovy, JRuby, Rhino и другими. Фактически, если проследить тенденции в особенности последних лет, можно отметить, что Java трансформировалась из языка программирования в настоящую платформу.&lt;br /&gt;&lt;br /&gt;Что мы узнали за последнее десятилетие, так это то, что Java представляет собой намного большее, нежели язык программирования или платформу – это сообщество. Это экономическая экосистема. Это живущая, дышащая сущность, которая повзрослела и выросла в истинное эльдорадо для приложений различного уровня и сложности. Вместо того чтобы пытаться предсказать будущее развития Java, я предлагаю взглянуть на основные события и тенденции прошедшего года, обобщив которые мы сможем узнать, что же нас ждет в новом 2008 году.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=";font-family:georgia;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;Безмятежные дни.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div  style="text-align: justify;font-family:georgia;"&gt;Год 2007-й выдался чем-то вроде американских горок, где наиболее впечатляющими моментами были: возрастающий интерес к динамическим языкам, эволюция JVM в сторону открытия исходного кода, ростом корпорации Google, являющейся стратегическим участником сообщества Java. Кроме того, отмечалось более широкое применение Unit-тестирования, непрерывной интеграции (Continuous integration) и других техник быстрой разработки, что говорит о том, что Java-разработчики всё чаще видят свое ремесло как профессию, требующую подотчетности и результативности. Мы, в конце концов, начинаем обращать наше внимание на качество нашего кода и его жизнеспособность.&lt;br /&gt;&lt;br /&gt;Другими словами, 2007-й год стал годом, как настоящих триумфов, так и некоторых разочарований и разногласий. Рассмотрим нижеследующие основные факторы, на которых было акцентировано внимание в прошедшем году.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;font-size:130%;"  &gt;Динамические языки достигли совершеннолетия.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Важной вехой развития языка Groovy стал 2007-й год, когда увидели свет его версии 1.0 и 1.5. Пройдя путь продолжительностью в 5 лет, Groovy позиционировался как дополнительный язык к JRE, но не замена Java.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Основным преимуществом Groovy является лаконичность его синтаксиса, который упрощает каждодневные задачи программирования. К примеру, открытие и чтение файла является достаточно громоздкой конструкцией, описанной на языке Java:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div  style="font-family:Courier New;"&gt;&lt;span style="color:Blue;"&gt;try&lt;/span&gt; {&lt;br /&gt;   BufferedReader in = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; BufferedReader(&lt;br /&gt;      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; FileReader(path));&lt;br /&gt;   String line;&lt;br /&gt;   while((line = in.readLine()) != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;){&lt;br /&gt;      System.out.println(line);&lt;br /&gt;   }&lt;br /&gt;   in.close();&lt;br /&gt;}&lt;span style="color:Blue;"&gt;catch&lt;/span&gt;(IOException e){&lt;br /&gt;   System.err.println(&lt;span style="color:Maroon;"&gt;"Exception reading"&lt;/span&gt;);&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Та же самая функциональность в Groovy может быть реализована значительно проще:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;new File(path).eachLine{ line -&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     println line&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;В общем, Groovy (как и другие динамические языки) позволяет уйти от обработки исключений, типов и даже допускает более лаконичные конструкции, которые позволяют делать программный код чрезвычайно простым для чтения.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Язык Groovy был не единственным игроком среди динамических языков в 2007 году. Платформа Java 6, выпущенная в 2006 году, представила стандартные API для взаимодействия с динамическими языками. Наиболее популярной реализацией данного API стал язык Rino. Хотя новшества и заинтересовали разработчиков, дальнейшее развитие этого подхода будет после выхода в свет Java 7.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Следует также отметить язык JRuby. Как и Groovy, JRuby (который позволяет Ruby программам выполнятся на JVM и взаимодействовать с Java объектами) упрощает Java разработку, позволяя применять более гибкий и изысканный синтаксис. К примеру, Ruby позволяет усовершенствовать существующие объекты. В Java проверка того, является ли строка пустой, может быть реализована следующим образом (показана реализация метода isBlank() в библиотеке Apache commons-lang):&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style='font-family: Courier New;'&gt;&lt;span style=' color: Blue;'&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=' color: Blue;'&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=' color: Blue;'&gt;boolean&lt;/span&gt;&amp;nbsp;isBlank(String&amp;nbsp;str)&amp;nbsp;{ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;int&lt;/span&gt;&amp;nbsp;strLen; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;if&lt;/span&gt;&amp;nbsp;(str&amp;nbsp;==&amp;nbsp;&lt;span style=' color: Blue;'&gt;null&lt;/span&gt;&amp;nbsp;||&amp;nbsp;(strLen&amp;nbsp;=&amp;nbsp;str.length())&amp;nbsp;==&amp;nbsp;&lt;span style=' color: Maroon;'&gt;0&lt;/span&gt;)&amp;nbsp;{ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=' color: Maroon;'&gt;true&lt;/span&gt;; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=' color: Blue;'&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;0&lt;/span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;if&lt;/span&gt;&amp;nbsp;((Character.isWhitespace(str.charAt(i))&amp;nbsp;==&amp;nbsp;&lt;span style=' color: Maroon;'&gt;false&lt;/span&gt;))&amp;nbsp;{ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=' color: Maroon;'&gt;false&lt;/span&gt;; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=' color: Maroon;'&gt;true&lt;/span&gt;; &lt;BR /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;span style=";font-family:times new roman;font-size:100%;"  &gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=";font-family:times new roman;font-size:100%;"  &gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;Класс String в Java является final и потому не может быть переопределен для модификации или добавления новой функциональности (например, добавления метода isBlank()). Поэтому приходится полагаться на стороннюю библиотеку, такую как common-lang. В Ruby Вы можете определить нужный метод isBlank() в самом объекте String:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; def blank?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  empty? || strip.empty?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div face="georgia" style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;Динамический стиль, предлагаемый Ruby, позволяет наращивать либо модифицировать функциональность стандартных библиотек.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Открывая сердце.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;Развитие Java в сторону открытия исходного кода означает то, что эволюция Java платформы больше не зависит только от инженеров Sun. Теперь каждый из нас может внести свою посильную лепту в развитие проекта OpenJDK, создаваемого по GPL лицензии, охватывающего библиотеки классов Java, компилятор и даже виртуальную машину.&lt;br /&gt;&lt;br /&gt;Открытость Sun, на самом деле, началась не с проекта OpenJDK. Glassfish – сервер приложений с открытым кодом от Sun, в 2007 году продолжил расширение своей аудитории. За последнее время невозможно не упомянуть приобретение компанией Sun компании, стоящей за MySQL, которая возможно доминирует среди СУБД с открытым кодом.&lt;br /&gt;&lt;br /&gt;Все эти шаги могут говорить о всеобъемлющей бизнес модели, предложенной компанией Sun, которая подразумевает развитие программного обеспечения в сторону открытия исходного кода. На основании этого можно сделать вывод, что в 2008 году нас ожидают последующие шаги в сторону открытости Java платформы.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Развитие Google.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;В конце 2007 года мобильные технологии Java от Google, которые уже, казалось, достигли апогея своего развития, получили новый импульс в виде представленной платформы Android. Ее целью является превознести на новый более качественный уровень программные приложения, выполняемые на мобильных устройствах, работающих на основе операционной системы с открытым кодом. Так как Android представляет собой целостную платформу (как Java), SDK для разработки приложений на его основе реализовано на Java.&lt;br /&gt;&lt;br /&gt;Кроме того, Android Java значительно отличается от Java платформы J2ME. JVM для Android является уникальной: она выполняет не обычный байт-код, а высоко оптимизированный формат, разработанный специально для Android. Наличие различных реализаций Java для мобильных устройств приводит к созданию широкого разнообразия приложений, что закрепляет вездесущность Java платформы.&lt;br /&gt;&lt;br /&gt;Однако влияние Google на Java началось немногим ранее создания мобильных платформ. Особенный интерес вызвал проект Guice, фреймворк, являющийся аналогом Spring, построенный на аннотациях и обобщених Java 5. В отличии от Spring Guice предложил новшество отказавшись от XML файлов, используя при этом аннотации и собственные типы Guice – Modules.&lt;br /&gt;&lt;br /&gt;В новом 2008 году следует ожидать дальнейшего развития этого IOC-фреймворка нового поколения от Google.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Развитие Agile разработки. Тестирование.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;Термин Agile не нов, ровно как не новы unit-тестирование и непрерывная интеграция (continuous integration). Однако 2007 год стал годом, когда эти практики получили еще более широкое распространение. Практически ни одна конференция не обходилась без хотя бы одной или двух презентаций, посвященных Agile разработке. Всё чаще разработчики программного обеспечения обращают внимание на то, насколько созданная ими архитектура доступна для тестирования. Можно сказать, что наконец-то, тестирование разработчиками имеет место быть.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Растущие достижения Java.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;Наряду с тем, что Java становится больше платформой, нежели языком, сам язык Java продолжает усовершенствоваться и расширяться. Хорошо это или плохо, но дополнительные возможности добавляются, и будут добавляться по мере возникновения необходимости в них у сообщества разработчиков.&lt;br /&gt;&lt;br /&gt;Однако некоторые возможности приветствуются, а некоторые нет. К примеру, аннотации стали очень популярны среди разработчиков – их используют такие фреймворки как JUnit4, TestNG, Spring. Иначе обстоят дела с обобщениями (generics), которые не завоевали достаточной популярности.&lt;br /&gt;&lt;br /&gt;В ожидаемом релизе Java 7 ожидается наличие пакетов java.util.concurent в задачи которого входит поддержка параллелизма на аппаратном уровне. Хотя Java всегда поддерживала потоки, поддержка их на аппаратном уровне оставалась нереализованной. Поэтому развитие Java направлено в сторону решения этой задачи.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Путь к RIA.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;В прошедшем году большой интерес разработчиков продолжили вызывать RIA (Rich Internet Applications), особенно после того как компания Sun презентовала семейство программных продуктов JavaFX, включающее в себя на данный момент JavaFX Script и JavaFX Mobile компоненты.&lt;br /&gt;&lt;br /&gt;Многие представители Java сообщества высказывали мнения, что выпуск JavaFX выдался поспешным и будущее у этого продукта отсутствует. Однако компания Sun дала уверенные сигналы о том, что имеется четкая долгосрочная стратегия развития RIA JavaFX, а это в свою очередь повысило оптимизм по отношению к данному продукту.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Заключение.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify; font-family: georgia;"&gt;Африканская пословица гласит о том, что «завтра принадлежит тем, кто готовится к нему сегодня». Таким образом, можно сказать, что будущее Java по крайней мере на ближайший год уже сформировано. Обещание применения Java технологий для разработки мобильных приложений видится достаточно правдоподобным ввиду появления на свет таких продуктов как Android от Google и JavaFX Mobile от Sun. Многие из нас также с нетерпением ожидают Java 7 и ее поддержки мультипроцессорных систем на аппаратном уровне. Наконец, развитие Java как продукта с открытым исходным кодом приведет к дальнейшему росту бизнес моделей, основанных на данной концепции.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(Автор: Эндрю Гловер, Дата: 24/01/2008. Оригинал статьи: «The future is now -- Java development in 2008. By Andrew Glover»).&lt;/span&gt;&lt;/div&gt;</description><link>http://feeljava.blogspot.com/2008/02/java-2008.html</link><author>noreply@blogger.com (Andriy Sholokh)</author><thr:total>66</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-356529059087180550.post-4919119091143372663</guid><pubDate>Sun, 10 Feb 2008 21:06:00 +0000</pubDate><atom:updated>2008-02-10T13:08:11.523-08:00</atom:updated><title>Добро пожаловать в мир Java.</title><description>&lt;div style="text-align: justify;"&gt;Доброе время суток. Вы посетили блог, посвященный технологиям Java, занимающим одно из первых мест среди технологий разработки современного программного обеспечения, веб-приложений, корпоративных систем.&lt;br /&gt;&lt;br /&gt;На сегодняшний день существует немалое количество ресурсов, посвященных Java, и данный блог не претендует на уникальность. Однако автор попытается в полной мере отобразить основные тенденции развития, новости, события связанные с Java технологиями, что, есть надежда, позволит русскоязычным пользователям держать руку на пульсе всего что происходит в мире Java.&lt;/div&gt;</description><link>http://feeljava.blogspot.com/2008/02/java.html</link><author>noreply@blogger.com (Andriy Sholokh)</author><thr:total>2</thr:total></item></channel></rss>