Изучаем Java EE 7 - [115]
>java:<область видимости>[/<имя приложения>]/<имя модуля>/<имя EJB-компонента>[!<полностью уточненное имя интерфейса>]
У каждого фрагмента JNDI-имени есть следующее значение:
• <область видимости> — определяет последовательность пространств имен, которые отображаются в разные области видимости приложения Java EE;
• global — префикс java: global позволяет компоненту, выполняющемуся вне приложения Java EE, получить доступ к глобальному пространству имен;
• app — префикс java: app позволяет компоненту, выполняющемуся в рамках приложения Java EE, получить доступ к пространству имен, специфичному для приложения;
• module — префикс java: module позволяет компоненту, выполняющемуся в рамках приложения Java EE, получить доступ к пространству имен, специфичному для модуля;
• comp — префикс java: comp — это закрытое пространство имен, специфичное для компонента и недоступное для других компонентов;
• <имя приложения> — требуется, только если сессионный EJB-компонент упакован в файл с расширением EAR или WAR. Если дело обстоит именно так, то в <имя приложения> автоматически будет указано имя файла EAR или WAR (без указания расширения);
• <имя модуля> — это имя модуля, в который упакован сессионный EJB-компонент. Это может быть EJB-модуль в отдельном файле с расширением JAR или веб-модуль в файле с расширением WAR. В <имя модуля> по умолчанию указывается базовое имя архива без расширения файла;
• <имя EJB-компонента> — имя сессионного EJB-компонента;
• <полностью уточненное имя интерфейса> — это полностью уточненное имя каждого определенного бизнес-интерфейса. В случае с представлением без интерфейса именем может быть полностью уточненное имя класса EJB-компонента.
Чтобы проиллюстрировать это соглашение об именовании, обратимся к примеру ItemEJB (определенному в листинге 7.5), который располагает удаленным интерфейсом, локальным интерфейсом и представлением без интерфейса (с помощью аннотации @LocalBean). Все эти классы и интерфейсы относятся к пакету org.agoncal.book.javaee7. ItemEJB — это <имя EJB-компонента>, а соответствующий EJB-компонент упакован в cdbookstore.jar (<имя модуля>).
>package org.agoncal.book.javaee7;
>@Stateless
>@Remote(ItemRemote.class)
>@Local(ItemLocal.class)
>@LocalBean
>public class ItemEJB implements ItemLocal, ItemRemote {
>··//…
>}
После развертывания контейнер сгенерирует три JNDI-имени, чтобы внешний компонент смог получить доступ к ItemEJB, используя следующие глобальные JNDI-имена:
>java: global/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemRemote
>java: global/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemLocal
>java: global/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemEJB
Следует отметить, что если бы ItemEJB был развернут в файле с расширением EAR (например, myapplication.ear), то вам пришлось бы указать в <имя приложения> следующее:
>java: global/myapplication/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemRemote
>java: global/myapplication/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemLocal
>java: global/myapplication/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemEJB
Контейнер также требуется для того, чтобы сделать JNDI-имена доступными при использовании пространств имен java: app и java: module. Таким образом, компонент, развернутый в том же приложении, что и ItemEJB, сможет осуществлять его поиск с использованием следующих JNDI-имен:
>java: app/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemRemote
>java: app/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemLocal
>java: app/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemEJB
>java: module/ItemEJB!org.agoncal.book.javaee7.ItemRemote
>java: module/ItemEJB!org.agoncal.book.javaee7.ItemLocal
>java: module/ItemEJB!org.agoncal.book.javaee7.ItemEJB
Такое переносимое JNDI-имя применимо ко всем сессионным EJB-компонентам: без сохранения состояния, с сохранением состояния и одиночным.
EJB-компоненты без сохранения состояния
EJB-компоненты без сохранения состояния — это самые популярные среди разработчиков приложений Java EE сессионные EJB-компоненты. Они простые, мощные, эффективные. Кроме того, они позволяют решать общую задачу, которая заключается в обработке бизнес-данных без сохранения состояния. Что означает словосочетание «без сохранения состояния»? Оно означает, что задача должна быть выполнена одним вызовом метода.
В качестве примера мы можем вернуться к корням объектно-ориентированного программирования, где объект инкапсулирует свое состояние и поведение. Чтобы обеспечить постоянство Book в базе данных при объектном моделировании, вы поступили бы примерно так: создали экземпляр объекта Book (с использованием ключевого слова new), задали кое-какие значения и вызвали метод, чтобы этот объект смог обеспечить свое постоянство в базе данных (book.persistToDatabase()). В приведенном далее коде вы можете видеть, что с самой первой и до последней строки объект Book вызывается несколько раз и поддерживает свое состояние:
>Book book = new Book();
>book.setTitle("Автостопом по Галактике");
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.