Изучаем Java EE 7 | страница 18



>····bookList = bookEJB.findBooks();

>····return "listBooks.xhtml";

>··}

>··// Геттеры, сеттеры

>}

Компоненты EJB следуют той же модели. Как показано в листинге 1.4, если вам нужно обратиться к компоненту EJB локально, для этого достаточно простого аннотированного класса без интерфейса. Компоненты EJB могут также развертываться напрямую в файл WAR без предварительного упаковывания в файл JAR. Благодаря этому компоненты EJB являются простейшими транзакционными сущностями и могут быть использованы как в сложных корпоративных, так и в простых веб-приложениях.


Листинг 1.4. Компонент EJB без сохранения состояния

>@Stateless

>public class BookEJB {

>··@Inject

>··private EntityManager em;

>····public Book findBookById(Long id) {

>····return em.find(Book.class, id);

>··}

>··public Book createBook(Book book) {

>····em.persist(book);

>····return book;

>··}

>}

Веб-службы RESTful широко распространились в современных приложениях. Спецификация JAX-RS для Java EE 7 была усовершенствована с учетом нужд больших предприятий. Как показано в листинге 1.5, веб-служба RESTful является аннотированным Java-классом, соответствующим действиям HTTP (подробнее читайте в главе 15).


Листинг 1.5. Веб-служба RESTful (с сохранением состояния представления)

>@Path("books")

>public class BookResource {

>··@Inject

>··private EntityManager em;

>··@GET

>··@Produces({"application/xml", "application/json"})

>··public List getAllBooks() {

>····Query query = em.createNamedQuery("findAllBooks");

>····List books = query.getResultList();

>····return books;

>··}

>}

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

Java Standard Edition 7

Важно подчеркнуть, что Java EE — это расширенная версия Java SE. Это означает, что в Java EE доступны все возможности языка Java, а также API.

Официальный релиз платформы Java SE 7 состоялся в июле 2011 года. Она была разработана в рамках запроса на спецификацию JSR 336 и предоставляла много новых возможностей, обеспечивая простоту разработки платформ предыдущих версий. Напомню, что функционал Java SE 5 включал автобоксинг, аннотирование, дженерики (обобщенные сущности), перечисление и т. д. Новинками Java SE 6 стали инструменты диагностирования, управления, мониторинга и интерфейс JMX API, упрощенное выполнение сценарных языков на виртуальной машине Java. Java SE 7 объединяет запросы на спецификацию JSR 334 (чаще употребляется название Project Coin), JSR 292 (InvokeDynamic или поддержка динамических языков на виртуальной машине Java), JSR 203 (новый API ввода/вывода, обычно называемый NIO.2), а также несколько обновлений существующих спецификаций (JDBC 4.1 (JSR 221)). Даже если в этой книге не удастся подробно описать Java SE 7, некоторые из этих обновлений будут приведены в качестве примеров, поэтому я хочу предложить вам краткий обзор того, как они могут выглядеть.