blob: 42ff2745958cbc0c5ae5d56f6045bc94f275c2e1 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, 2011, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>Introduction to Support for Java EE Technology in IDE NetBeans</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta name="description" content="This document provides an introduction to the major concepts of the Java EE specifications and how they relate to your hands-on programming. ">
<link rel="stylesheet" href="../../../netbeans.css">
</head>
<body>
<h1>Introduction to Support for Java EE Technology in IDE NetBeans</h1>
<p>IDE NetBeans has been developed in close cooperation with the Java EE and GlassFish teams to provide the tightest integration and easiest possible use of the Java EE specification. IDE NetBeans is the best way to quickly learn and become productive in Java EE programming.</p>
<p>Данный документ представляет основные концепции спецификации Java ЕЕ и их влияние на практическое программирование. В нем освещены следующие темы:</p>
<img alt="Содержимое на этой странице применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0">
<ul>
<li><a href="#annotations">Аннотации вместо дескрипторов развертывания</a></li>
<li><a href="#ejb">Упрощение разработки программного обеспечения EJB</a></li>
<li><a href="#injection">Использование вставки зависимости для доступа к ресурсам</a></li>
<li><a href="#persistence">Модель интерфейса API сохранения состояния Java</a></li>
<li><a href="#webservice">Веб-службы </a></li>
</ul>
<p>Дополнительные сведения о разработке и развертывании приложений Java EE можно найти в <a href="http://download.oracle.com/javaee/7/tutorial/doc/">Руководстве по Java EE 7</a> и <a href="http://download.oracle.com/javaee/6/tutorial/doc/">Руководстве по Java EE 6</a>.</p>
<a name="annotations"></a>
<h2>Аннотации вместо дескрипторов развертывания</h2>
<p>Платформа Java ЕЕ упрощает развертывание, устраняя потребность в дескрипторах развертывания, помимо дескриптора, который требуется спецификации servlet, файла <tt>web.xml</tt>. Прочие дескрипторы развертывания, такие как <tt>ejb-jar.xml</tt>, а также записи, относящиеся к веб-службам в <tt>web.xml</tt>, теперь не нужны. Дескрипторы развертывания J2EE 1.4 часто отличались сложностью, и при их заполнении было легко допустить ошибку. В платформе Java ЕЕ вместо них используются &quot;аннотации&quot;. Аннотации &ndash; это модификаторы Java, указываемые в коде, подобные модификаторам <tt>public</tt> и <tt>private</tt>. Например, спецификация EJB 3, являющаяся подмножеством спецификации Java EE, определяет аннотации для типа компонента, типа интерфейса, ссылок на ресурсы, атрибутов транзакций, безопасности и прочего. Похожий набор аннотаций предоставляется для веб-служб спецификацией JAX-WS 2.0. Некоторые аннотации используются для создания артефактов. Другие используются для документирования кода. Третьи предоставляют расширенные возможности, скажем безопасность или логику на этапе выполнения. В целом, платформа Java ЕЕ предоставляет аннотации для следующих задач, помимо прочих:</p>
<ul>
<li>Определение и использование веб-служб.</li>
<li>Разработка программных приложений EJB.</li>
<li>Сопоставление классов технологии Java с XML.</li>
<li>Сопоставление классов технологии Java с базами данных.</li>
<li>Сопоставление методов с операциями.</li>
<li>Указание внешних зависимостей.</li>
<li>Указание сведений для развертывания, в т. ч. атрибутов безопасности.</li>
</ul>
<p>Аннотации помечаются символом <tt>@</tt>. При создании типа, в котором используются аннотации Java EE, в среде IDE в создаваемом коде предоставляются соответствующие метки-заполнители. Например, при создании в среде IDE сеансного компонента без сохранения состояния создается следующий код, в который входит аннотация <tt>@Stateless()</tt>:</p>
<pre class="examplecode">package mypackage;
import javax.ejb.*;
@Stateless()
public class HelloWorldSessionBean implements mypackage.HelloWorldSessionLocal {
}</pre>
<p>Автозавершение кода предоставляет доступ к атрибутам аннотации конкретного элемента под курсором. Например, при нажатии Ctrl-Space в скобках аннотации <tt>@WebService()</tt>, выводится следующее:</p>
<img alt="аннотация в ws" class="margin-around" src="../../../images_www/articles/72/javaee/javaee-intro/jax-ws-annotate.png" />
<p>У каждого атрибута имеются значения по умолчанию. Следовательно, указывать атрибуты не требуется, если не планируется использовать значение, отличное от значения по умолчанию. В простых случаях достаточно значения по умолчанию, то есть атрибуты можно вообще не указывать.</p>
<a name="ejb"></a>
<h2>Упрощение разработки программного обеспечения EJB</h2>
<p>Новый интерфейс API EJB 3.0 позволяет упростить процесс разработки путем сокращения и упрощения списка задач разработчика. Другими словами, меньше классов и меньше кода. Это возможно благодаря тому, что значительная часть работы теперь выполняется контейнером. Ниже приведен список некоторых функциональных возможностей и преимуществ EJB 3.0:</p>
<ul>
<li><b>Требуется меньшее число классов и интерфейсов.</b> Для компонентов EJB более не требуются домашняя страница и интерфейсы объектов, поскольку контейнер теперь обеспечивает предоставление необходимых методов. Достаточно указать бизнес-интерфейс. Для объявления компонентов EJB можно пользоваться аннотациями, причем управление транзакциями в таком случае выполняется контейнером.</li>
<li><b>Больше не требуются дескрипторы развертывания.</b> Аннотации можно использовать напрямую в классе для уведомления контейнера о зависимостях и конфигурации, ранее определенной в дескрипторах развертывания. При отсутствии особых указаний для управления контейнер использует правила по умолчанию для разрешения большинства обычных ситуаций.</li>
<li><b>Простые поисковые запросы.</b> <code>EJBContext</code> обеспечивает возможность выполнения поиска объектов в пространстве имен JNDI напрямую в классе.</li>
<li><b>Упрощенное объектно-реляционное сопоставление.</b> Новый интерфейс API сохранения состояния Java значительно упрощает объектно-реляционные сопоставления и делает их более прозрачными, что позволяет использовать аннотации в POJO для сопоставления объектов Java с реляционными базами данных.</li>
</ul>
<p>В среде IDE можно создавать компоненты корпоративного уровня так же, как и другие классы Java, причем для реализации необходимых методов и поддержания синхронизации классов с интерфейсами используется автозавершение кода и подсказки редактора. Для создания бизнес-методов или операций веб-службы не требуется использование специальных команд или диалоговых окон, однако эти команды могут применяться для упрощения знакомства с синтаксисом Java EE.</p>
<a name="injection"></a>
<h2>Использование вставки зависимости для доступа к ресурсам</h2>
<p><i>Вставка зависимости</i> позволяет объекту напрямую запрашивать внешние ресурсы с помощью аннотаций. В результате исходный код становится чище, поскольку исчезает необходимость в коде создания или поиска ресурсов Вставку ресурсов можно использовать в компонентах EJB, веб-контейнерах и клиентах. </p>
<p>
Для запроса вставки ресурса в компоненте используется аннотация <code>@Resource</code> или, в случае некоторых специализированных ресурсов, аннотации <code>@EJB</code> и <code>@WebServiceRef</code>. В число ресурсов, которые могут быть вставлены, входят следующие:
</p>
<ul>
<li>Объект <code>SessionContext</code></li>
<li>Объект <code>DataSources</code></li>
<li>Интерфейс <code>EntityManager</code></li>
<li>Другие компоненты корпоративного уровня</li>
<li>Веб-службы</li>
<li>Очереди и темы сообщений</li>
<li>Фабрики подключений для адаптеров ресурсов</li>
</ul>
<p>Редактор исходного кода в среде IDE обеспечивает полное автозавершение кода для аннотаций вложения ресурсов, предоставляемых платформой Java EE. Кроме того, среда IDE позволяет автоматически вкладывать ресурсы в файлы при запуске команд вроде Call EJB или Use Database.
</p>
<a name="persistence"></a>
<h2>Модель интерфейса API сохранения состояния Java</h2>
<p>
В платформе Java EE 5 введен новый интерфейс API сохранения состояния Java, разработанный в рамках <a href="http://jcp.org/en/jsr/detail?id=220" target="_blank">JSR-220</a>. Интерфейс API сохранения состояния Java также может использоваться вне компонентов EJB, например, в веб-приложениях и в клиентах приложений, а также вне платформы Java EE &ndash; в приложениях Java SE.</p>
<p> Интерфейс API сохранения состояния Java обладает следующими главными особенностями: </p>
<ul>
<li><b>Сущности являются POJO.</b> В отличие от EJB компонентов, которые используют сохранение состояния, управляемое контейнерами (CMP), объекты сущностей, использующие новые API, более не являются компонентами и они более не требуются в модулях EJB.</li>
<li><b>Стандартизованное объектно-реляционное сопоставление.</b> В новой спецификации стандартизирован способ обработки объектно-реляционных сопоставлений, что избавляет разработчика от необходимости глубокого изучения стратегий конкретных производителей. В интерфейсе API сохранения состояния Java для указания сведений объектно-реляционного сопоставления используются аннотации, однако поддержка дескрипторов формата XML сохранена.</li>
<li><b>Именованные запросы.</b> Теперь именованный запрос представляет собой статический запрос, выраженный в метаданных. Они могут быть либо запросами интерфейса API сохранения состояния Java, либо запросами на чистом SQL. Это весьма упрощаем многократное использование запросов. </li>
<li><b>Простые правила упаковки.</b> Поскольку компоненты сущностей являются простыми классами технологии Java, они могут быть упакованы практически в любой точке приложений Java EE. Например, компоненты сущностей могут быть частью файла <code>JAR</code> EJB, файла <code>JAR</code> клиента приложения, <code>WEB-INF/lib</code>, <code>WEB-INF/classes</code> или даже частью<code>JAR</code> служебной программы в файле архива приложения корпоративного уровня (enterprise application archive &ndash; EAR). Благодаря этим простым правилам пакетирования теперь отсутствует необходимость в создании файла EAR для использования компонентов сущностей из веб-приложения или клиента приложения. </li>
<li><b>Отключенные сущности.</b> Поскольку компоненты сущностей являются POJO, они могут быть сериализованы и переданы по сети в другое адресное пространство и использованы в не поддерживающей сохранение состояния среде. В результате использование объектов передачи данных (DTO) больше не требуется. </li>
<li><b>API EntityManager.</b> Разработчики приложений теперь используют стандартный API EntityManager для выполнений операций <code>Создания. чтения, обновления и удаления</code> (CRUD), в которых задействованы сущности. </li>
</ul>
<p>В среду IDE входят средства для работы с новым интерфейсом API сохранения состояния Java. Классы объектов можно создавать автоматически из базы данных или создавать для них код вручную. В среде IDE также предусмотрены шаблоны и графические редакторы для создания и управления блоками сохранения состояния. Дополнительные сведения об использовании Java Persistence API см. в разделе <a href="javaee-gettingstarted.html">Общие сведения о приложениях Java EE</a>.</p>
<a name="webservice"></a>
<h2>Веб-службы</h2>
<p>
Использование аннотаций в платформе Java ЕЕ существенно улучшило и упростило поддержку веб-служб. В этом отношении необходимо упомянуть следующие спецификации: JSR 224, &quot;API Java для веб-служб на основе XML (JAX-WS) 2.0&quot;; JSR 222, &quot;Архитектура для привязки XML (JAXB) 2.0&quot;; и JSR 181, &quot;Метаданные веб-служб для платформы Java&quot;.
</p>
<div class="indent">
<h3 class="tutorial">JAX-WS 2.0</h3>
<p>
AX-WS 2.0 представляет собой новый интерфейс API платформы Java EE для веб-служб. JAX-WS 2.0, являющийся преемником JAX-RPC 1.1, сохраняет естественную модель программирования RPC, усовершенствованную по нескольким направлениям: привязка данных, независимость от протокола и транспорта, поддержка стиля веб-служб <code>REST</code> и простота разработки.
</p>
<p>
Важнейшее отличие от JAX-RPC 1.1 заключается в том, что все привязки данных теперь делегированы JAXB 2.0. Благодаря этому для веб-служб на основе JAX-WS обеспечивается возможность использования схем XML на 100%, что приводит к повышению уровню взаимодействия и простоте использования. Эти две технологии отлично интегрированы, так что отпадает необходимость в жонглировании двумя наборами средств. При начале работы с классов технологии Java JAXB 2.0 позволяет создавать документы схемы XML, автоматически внедренные в документ WDSL (язык описания веб-служб), в результате чего пользователи избавлены от выполнения вручную этой подверженной ошибкам процедуры интеграции.
</p>
<p>
В JAX-WS 2.0 без дополнительной настройки поддерживаются протоколы SOAP 1.1, SOAP 1.2 и XML/HTTP. Расширяемости протоколов с самого начала уделялось огромное внимание, и JAX-WS 2.0 позволяет поставщикам поддерживать дополнительные протоколы и кодировки для повышения производительности &ndash; например, FAST Infoset &ndash; или для специализированных приложений. Веб-службы, в которых используются вложения для оптимизации передачи и приема крупных объемов двоичных данных, выигрывают от использования стандарта MTOM/XOP (механизм оптимизации передачи сообщений/упаковка XML с оптимизацией для двоичных данных) от W3C без отрицательного воздействия на модель программирования. (Сведения о <a href="http://www.w3.org/TR/2005/REC-soap12-mtom-20050125/" target="_blank">MTOM/XOP</a> приведены на данной странице.) До технологии Java EE 5 для определения веб-служб требовались длинные, громоздкие дескрипторы. Теперь достаточно разместить аннотацию <code>@WebService</code> в классе технологии Java. Все общедоступные методы класса автоматически публикуются в виде операций веб-службы, и все их аргументы привязываются к типам данных схемы XML с помощью JAXB 2.0.
</p>
<h3 class="tutorial">Асинхронные веб-службы</h3>
<p>
Поскольку вызовы веб-служб производятся по сети, время их исполнения предсказать невозможно. Производительность многих клиентов, особенно интерактивных, таких как настольные приложения на базе JFC/Swing, значительно снижается из-за необходимости ожидания ответа сервера. Во избежание снижения производительности в JAX-WS 2.0 предусмотрен новый асинхронный интерфейс API клиента. Этот интерфейс API позволяет прикладным программистам обойтись без самостоятельного создания потоков. Вместо этого управление удаленными вызовами с длительным временем выполнения возлагается на JAX-WS.
</p>
<p>
Асинхронные методы можно использовать в сочетании с любыми интерфейсами, создаваемыми WSDL, а также с более динамичным интерфейсом API <code>Dispatch</code>. Для удобства программиста при импорте документа WSDL можно запросить создание асинхронных методов для любых операций, определенных веб-службой.
</p>
<p>Существуют две модели использования:</p>
<ul>
<li>В модели опроса сначала выполняется вызов. Затем, по мере готовности, запрашиваются результаты.<br></li>
<li>В модели обратного вызова сначала регистрируется обработчик. По мере прибытия ответов выдается оповещение.</li>
</ul>
<p>Следует отметить, что поддержка асинхронных вызовов реализована полностью на стороне клиента, таким образом, каких-либо изменений целевой веб-службы не требуется.</p>
<p>В среду IDE входят средства для работы с JAX-WS. Для создания артефактов JAX-WS можно использовать шаблоны в мастере создания файлов. Асинхронные веб-службы можно создавать с помощью редактора настройки веб-служб. В функциональные возможности дополнения кода входят аннотации, пригодные для веб-служб.
</div>
<br>
<div class="feedback-box" ><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Intro%20to%20Java%20EE%205%20Technology">Отправить отзыв по этому учебному курсу</a></div>
<br style="clear:both;" />
<!-- ======================================================================================= -->
<h2><a name="nextsteps"></a>Что дальше?</h2>
<p>For more information about using IDE NetBeans to develop Java EE applications, see the following resources:</p>
<ul>
<li><a href="javaee-gettingstarted.html">Начало работы с приложениями Java EE</a></li>
<li><a href="../websvc/jax-ws.html">Начало работы с веб-службами JAX-WS</a></li>
<li><a href="../../trails/java-ee.html">Учебная карта по Java EE и Java Web</a></li>
</ul>
<p>To send comments and suggestions, get support, and keep informed on the latest developments on the IDE NetBeans Java EE development features, <a href="../../../community/lists/top.html">join the nbj2ee@netbeans.org mailing list</a>.</p>
</body>
</html>