Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

JAVA. Серверные приложения

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Часть 4. Распределенные компненты EJB 191
Поскольку EJB являются элементами, непосредственно работающи­ми с данными, расположенными в базе данных и к тому же использую­щими транзакционные механизмы, важно знать основные свойства транзакций. Все транзакции характеризуются следующими свойствами:
атомарность (Atomicity);
связность (Consistency);
изолированность (Isolation);
сохраняемость (Durability).
1. Атомарность подразумевает, что для завершения транзакции не­обходимо успешное выполнение всех ее операций. Если хотя бы одна из операций не выполнена, не должны быть выполнены все остальные.
2. Под связностью понимается связность информации в базе данных. Транзакции должны переводить базу данных из одного связного (устой­чивого) состояния в другое. Транзакция должна обеспечивать семанти­ческую и физическую связность данных в БД. Изолированность требу­ет, чтобы каждая транзакция рассматривала себя как единственную транзакцию, выполняемую в настоящий момент над базой данных. Па­раллельно с ней могут выполняться и другие транзакции, но текущая транзакция не должна видеть промежуточные изменения, внесенные другими транзакциями, до тех пор, пока они не подтвердили (commit) свои действия. Вследствие независимости вносимых изменений, тран­закции могли бы видеть некорректные результаты, являющиеся только подмножеством изменений, вносимых другими транзакциями. Изолиро­ванность транзакции позволяет избежать такого рода проблем.
3. Понятие изолированности тесно связано с понятием совместного доступа. Существует понятие уровня изоляции, и чем он выше, тем бо­лее ограничены возможности внесения параллельных изменений. Наи­более высокий уровень изоляции транзакций подразумевает выполне­ние всех транзакций в порядке очереди (сериализация). Другими слова­ми, содержимое базы данных меняется так, как если бы новая транзакция могла начаться только после завершения предыдущей. Тем не менее многие приложения способны работать с более низким уров­нем изоляции транзакций и соответственно с большими возможностями параллельного доступа к данным. Как правило, такие приложения по­зволяют использовать большое количество одновременных транзакций, даже если некоторые из них выполняют чтение данных, которые час­тично изменены другими транзакциями.
4. И наконец, сохраняемость означает, что изменения, внесенные подтвержденными транзакциями, остаются в базе данных независимо от последующих сбоев. Сохраняемость гарантирует, что подтвержден­ные изменения сохраняются в базе данных, даже если произошел сбой после завершения транзакции и что база данных может быть восста­новлена после такого сбоя.
Прикладные программисты пользуются многими преимуществами, разрабатывая свои приложения на платформах, подобных Java 2 Enter­prise Edition (J2EE), которые поддерживают транзакции. Ориентирован­ные на использование транзакций, системы разработки существенно упрощают процесс создания приложений, так как они освобождают разработчика от необходимости заботиться об обеспечении устойчиво-
192 Часть 4. Распределенные компненты EJB
сти к сбоям и необходимости обслуживания многих клиентов одновре­менно. Для использования таких транзакций не обязательно работать с одной базой данных или на одном компьютере. В распределенной тран­закции могут одновременно участвовать несколько баз данных, работа­ющих под управлением разных серверов.
Enterprise JavaBean (EJB) представляют собой многократно исполь­зуемые Java EJB, подобные обычным Bean, которые могут совмещать в себе другие enterprise beans или другие распределенные Java EJB тре­хуровневых приложений. Чаще всего EJB создаются и распространяют­ся как jar-архивы. EJB достаточно просто разрабатывать, они просты в управлении и выполняются в системе, поддерживающей Java. Рабочая версия EJB, поставляемая фирмой SUN, имеет номер 1.1, и на настоя­щий момент именно эту версию поддерживают основные производители программного обеспечения для создания e-commerсe приложений. Основными EJB, описанными в EJB спецификации, являются Enterprise Bean. Создавая распределенное приложение, бизнес-логика кодируется в EJB. В отличие от стандартного решения размещения бизнес-логики в базе данных, использование EJB имеет свои преимущества. Во-первых, EJB работают в специальном окружении. Во-вторых, именно окружение отвечает за все действия, производимые как клиентом, так и самими EJB. В-третьих, доступ к базе данных осуществляется при помощи тех же EJB вместо специальных объектов.
Enterprise beans содержат бизнес-логику предприятия. С помощью специального интерфейса клиент получает доступ к методам, храня­щимся в EJB. В-четвертых, различные системные сервисы доступны через использование JTS. JTS является службой, которая входит в со­став Контейнера и используется для управления транзакцией по умол­чанию. JTS предоставляет большие возможности, но содержит и суще­ственные ограничения — она не поддерживает тайм-ауты транзакции. Транзакция может никогда не завершиться вследствие некоторых при­чин. В отсутствие тайм-аута некорректная транзакция может «завис­нуть». Если с такой транзакцией сопоставлен EJB, то EJB Контейнер никогда не сможет удалить его, так как Контейнер не может удалять EJB, связанные с транзакцией. Очевидно, что это существенно ограни­чивает возможности Контейнера по эффективному управлению ресур­сами.
Как сами EJB, так и Контейнеры способны управлять транзакциями. Технология EJB позволяет изменять информацию в нескольких базах данных в контексте одной транзакции. Данные могут находиться не только в различных БД, но и на разных компьютерах в сети. Техноло­гия EJB использует стиль управления транзакциями, который отлича­ется от традиционного стиля. EJB устанавливает свои атрибуты тран­закции на стадии поставки. Эти атрибуты транзакции определяют, бу­дет ли управление транзакцией осуществляться Контейнером, или это возьмет на себя сам EJB. При использовании традиционного стиля за все аспекты управления транзакциями отвечает само приложение. Это подразумевает выполнение следующих операций:
1. Создание объекта «транзакция».
2. Явное начало транзакции.
Часть 4. Распределенные компненты EJB 193
3. Передача и отслеживание контекста транзакции.
4. Подтверждение транзакции после внесения всех изменений.
Это требует от разработчика приложения глубоких знаний о том, как управлять транзакциями с начала и до конца.
При декларативном стиле управления транзакциями Контейнер бе­рет на себя выполнение большинства, если не всех, необходимых опера­ций. Контейнер начинает и завершает транзакцию, а также поддержи­вает контекст транзакции в течение ее существования. Это существен­ным образом упрощает задачу разработчика, особенно для транзакций в распределенных средах. Итак ключевыми моментами использования EJB в Web-приложениях можно назвать следующие свойства EJB-тех­нологии:
Все EJB являются серверными приложениями, написанными иск-
лючительно на языке Java. Это значит, что EJB использует все до­стоинства, присущие данному языку программирования. Все EJB описывают только бизнес-логику и бизнес-методы, сис-
темными функциями заведует EJB-сервер. EJB-архитектура поддерживает критерии распределенных систем,
такие, как транзакционность, переносимость, масштабируемость и безопасность.
Все EJB свободно переносимы с одного сервера на другой и с одной операционной системы на другую.
EJB-архитектура поддерживает большое количество различных
транспортных протоколов IIOP, JRMP, HTTP, DCOM.
Нельзя говорить о достоинствах, не упоминая о недостатках. Зная недостатки, легче найти подход или по крайней мере общий язык. А объективный взгляд еще больше привлекает внимание к изучаемому объекту.
Итак, чего не могут делать EJB.
Ниже приведен список программных ограничений, определенных в спецификации EJB 1.1:
1. Экземплярам EJB не разрешается управлять потоками (threads) или группами потоков. EJB не следует создавать новые потоки или ак­тивизировать приостановленные, а также завершать или приостанавли­вать выполняемые. Кроме того, EJB не должны менять приоритеты по­токов или их имена.
2. Экземплярам EJB не разрешено использовать static-поля, за иск­лючением полей «только для чтения». Следовательно, все static-поля должны быть объявлены как final.
3. Экземплярам EJB не разрешено использовать средства синхрони­зации потоков для синхронизации выполнения кода нескольких экземп­ляров EJB.
4. Экземпляры EJB не должны использовать средства Java AWT для вывода информации на экран или воспринимать информацию, вводи­мую с клавиатуры.
5. Экземпляры EJB не могут использовать пакет java.io для работы с файлами или каталогами файловой системы. Для работы с файловыми объектами должен использоваться API JNDI.
194 Часть 4. Распределенные компненты EJB
6. Экземплярам EJB следует избегать использования сокетов: не сле­дует получать информацию из сокетов и отслеживать соединения. Кро­ме того, им не следует взаимодействовать с создателями сокетов, т. е. порожденных от классов ServerSocker и Socket, использующие URL. Опять же в данном контексте предпочтительнее использование JNDI.
7. Экземпляры EJB не должны обращаться к классам или пакетам, а также пытаться получить информацию о классах с использованием способов, не поддерживаемых языком Java, а также пытаться получить доступ к классам, недоступным для EJB.
8. Экземпляр EJB не должен обращаться к функциям и сервисам среды исполнения, взаимодействием с которыми занимается Контейнер EJB, — создавать загрузчики классов или получать доступ к их кон­тексту, устанавливать или создавать менеджеров безопасности, оста­навливать JVM, изменять стандартные потоки ввода-вывода.
9. Экземпляры EJB не должны получать информацию о профилях безопасности для конкретных источников кода.
10. Экземпляры EJB не должны загружать native-библиотеки, испо­льзующие другие языки программирования.
11. Экземпляры EJB не должны добавлять классы в пакеты, так как это (в целях обеспечения безопасности) должны делать Контейнеры.
12. Экземпляры EJB не должны использовать subclass и возможности object substitution Java Serialization Protocol.
13. Следует проявлять осторожность при передаче this в качестве аргументов или при возврате результата. Безопаснее в этом случае ис­пользовать результаты вызовов методов SessionContext.getEJBObject() или EntityContext.getEJBObject().
41. Экземплярам EJB не разрешается получать доступ или изме­нять объекты конфигурации безопасности. Например, им не разрешено изменять свой java.security.Identity. Любые попытки такого рода долж­ны приводить к возникновению исключения java.security. Security­Exception.
Глава 29. Основной пакет компании SUN по работе с EJB
Основные интерфейсы и классы исключительных ситуаций, необхо­димые для создания EJB, поставляются в стандартном расширении ja­vax.ejb набора пакетов Java 2 Enterprise Edition (J2EE). Данный набор пакетов представляет комплект, состоящий из нескольких утилит, базы данных, графического средства разработки и J2EE-сервера, исполняю­щего роль сервера приложений. Используя набор J2EE API, можно пол­ностью отказаться от прикладных пакетов по созданию EJB-приложе­ний. Ограничения при использовании J2EE-сервера и программ из средств разработки с тем же названием связаны с использованием базы данных CLOUDSCAPE, а также с тем, что весь инструмент написан на 100%-ной Java, что накладывает свой отпечаток на скорость разработки приложений. Особенно это касается машин среднего уровня. Для норма­льной работы с J2EE-сервером и API, поставляемым в данном пакете,
Часть 4. Распределенные компненты EJB 195
необходимо минимум 128 Мбайт оперативной памяти и достаточно бы­стрый процессор. Это связано в первую очередь с тем, что JVM доста­точно ресурсоемкое приложение, а также с тем, что приложения, испо­льзующие JVM для своих нужд, также требуют много ресурсов, и нель­зя забывать о том, что количество используемых сервисов или демон­потоков операционных систем, требующих внимания процессора и ис­пользующих оперативную память, также велико.
Так что если предполагается использовать другую базу или другой сервер приложений, то лучше воспользоваться каким-нибудь другим интегрированы средством разработки. Существует множество приклад­ных пакетов, более удобных для разработчика, например VisualAge for Java представленный фирмой IBM, — прекрасный инструмент для со­здания и отладки не только EJB, но и других Java-компонентов.
Архив, содержащий необходимые классы, называется j2ee.jar и яв­ляется общим для большинства пакетов приложений уровня предприя­тий. Обычно данный архив располагается в папке lib установленного продукта J2EE. Некоторые среды разработки, такие, как VisualAge, не требуют установки архивов в переменной CLASSPATH, для этого они используют собственное системное окружение, Visual Age помещает ар­хивы в рабочий репозитарий. В большинстве же других IDE при работе с внешними архивами указываются пути к архивам либо в системном окружении проекта, например в Jbuilder, либо в системной переменной CLASSPATH, со значениями которой и работают средства разработки. В любом случае установленный в системной переменной jar-архив не вызовет никаких побочных эффектов, не считая укорачивания значе­ния переменной CLASSPATH. Напомним, что в системах Windows дли­на значения системной переменной CLASSPATH составляет 512 симво­лов. Поэтому не рекомендуется производить установки различных JDK в директорию Program Files, предлагаемую по умолчанию операционной системой Windows для всех устанавливаемых программ. Тем более, не­обходимо учесть, что и другие архивы используемых Java-классов тоже помещаются в системной переменной, что значительно сокращает ее длину. Одним из решений проблемы нехватки емкости CLASSPATH яв­ляется загрузка необходимых архивов непосредственно перед стартом программы, для чего используется командный файл с директивами SET.
В пакете javax.ejb описаны интерфейсы, содержащие методы, необ­ходимые для создания и управления EJB. Часть интерфейсов, не имею­щих непосредственного отношения к созданию и жизненному циклу EJB, представляют методы системного окружение и получение инфор­мации об исполняемой среде.
Системную информацию о выполняемом EJB можно получить, ис­пользуя методы интерфейса javax.ejb. EJBContext. Одним из полезных методов является метод getEJBHome(), предоставляющий информацию о home интерфейсе bean.
Интерфейс javax.ejb. EnterpriseBean является общим базовым интер­фейсом для остальных интерфейсов и, в свою очередь, наследует ин­терфейс java.io.serializable. Этот интерфейс не содержит объявлений ме­тодов. Каждый создаваемый класс EJB должен наследовать данный ин-
196 Часть 4. Распределенные компненты EJB
терфейс, являющийся к тому же и родительским для SessionBean- и EntityBean-интерфейсов.
Получить информацию о структуре EJB (его метаданные) можно, ис­пользуя методы интерфейса javax.ejv.EJBMetaData. Информация о ho­me- и remote-интерфейсах, а также классах primary key доступна с по­мощью методов данного интерфейса. Полезным методом для определе­ния того, является ли EJB Session bean или Entity bean является isSession(). Метод isStatelessSession() позволяет определить, имеет ли Session bean состояние (т. е. является ли он stateless-session bean или нет). И, наконец, метод getEJBMetaData() возвращает метаданные о EJB.
Идентификатор (handle) представляет собой доступную для удален­ных объектов логическую ссылку на экземпляр EJB или его home-ин­терфейс. Интерфейс javax.ejb.Handle, который должен быть реализован для всех классов Идентификаторов EJB, предоставляет хранимую (per­sistence) ссылку на экземпляр EJB. Handle EJB представляет собой его уникальный идентификатор; для него может быть выполнена операция сериализации Java. Времена существования handle и сопоставленного с ним объекта совпадают. При работе с Entity bean клиент может сохра­нять (с помощью Java-сериализации) значение этого идентификатора с последующим восстановлением в нужный момент. Этот идентификатор может корректно ссылаться даже на различные экземпляры EJB; он остается корректным даже после сбоя на сервере с последующим пере­запуском, а также в случае «перемещения» объектов на другие серверы или компьютеры. Идентификатор может быть использован для долго­временного хранения ссылки на экземпляр EJB путем Java-сериализа­ции экземпляра класса, реализующего handle-интерфейс. Это очень по­хоже на преобразование к строковому виду объектной ссылки CORBA.
Существует также интерфейс javax.ejb. HomeHandle, который позво­ляет использовать хранимую ссылку на home-интерфейс EJB. Этот ин­терфейс должен быть реализован в классах, являющихся представле­нием такой ссылки. Обычно реализацию handle-интерфейсов обеспечи­вает Контейнер.
Для синхронизации данных, в пакете javax.ejb описан интерфейс ja­vax.ejb.SessionSynchronization. Необязательный интерфейс SessionSync­hronization обеспечивает объекту возможность получения уведомлений о транзакционных действиях. Другими словами, экземпляр получает со­общение о том, что какие-либо действия, связанные с транзакциями, либо только что произошли, либо сейчас будут выполнены. Экземпляры EJB могут использовать эти уведомления для выполнения некоторых действий с данными в СУБД. Например, реализация этого интерфейса позволяет объектам выполнить синхронизацию кэшированных в памяти данных с данными в БД в процессе выполнения транзакции. Только sta­teful session-EJB с сохранением, управляемым Контейнером (container­managed persistence, CMP), могут реализовывать интерфейс Session­Synchronization. Ни session bean (stateless), ни Entity bean c сохранени­ем (bean-managed persistence, BMP) не следует пытаться реализовать этот интерфейс.
Часть 4. Распределенные компненты EJB 197
Любой EJB возбуждает исключительные ситуации java.ejb.EJBEx­ception (или java.rmi.RemoteException) для сигнализации о неожидан­ном сбое на системном уровне. Например, такое исключение возбужда­ется, если невозможно установить соединение с базой данных.
При создании EJB очень часто используются классы находящиеся в других пакетах. Наиболее часто употребляемыми являются следующие пакеты:
java.rmi — пакет содержит основные классы, используемые для вы­зова удаленных методов (RMI);
javax.rmi — в этом пакете содержится дополнительный класс Por­tableRemoteObject, необходимый для EJB-объектов;
java.util — пакет содержит различные классы Java утилит, таких, как коллекции, классы по работе с датами и т. д.;
javax.naming — пакет содержит классы и интерфейсы, используе­мые в спецификации Java Naming and Directory Interface (JNDI), слу­жит для получения клиентом необходимых объектов EJB.
Глава 30. Архитектура EJB и основные EJB
Архитектурные EJB-технологии представляют полный цикл от со­здания до управления EJB.
Спецификация Enterprise JavaBean (EJB) определяет несколько основных компонентов (рис. 4.1).
Enterprise JavaBean (server) — сервер, хранящий и загружающий один или более ejb, в которых реализована бизнес-логика и данные, ис­пользуемые клиентами. Взаимодействие между обычным сервером и ejb-сервером осуществляется с помощью низкоуровневых сервисов, та­ких, как потоки и механизмы транзакций.
Источник данных (Data Sourse) определяет два вида enterprise bean: session bean, содержащий клиентские данные и задачи, и entity bean,
4.1. Компоненты Enterprise JavaBean
198 Часть 4. Распределенные компненты EJB
работающий с постоянным данными EJB-клиентов — их тоже два, один из них — HTTP-клиент, взаимодействующий с EJB server посредством servlet и JSP, использующий HTTP-протокол как способ взаимодейст­вия, другой — стандартное Java-приложение, контактирующее с EJB server, используя методы Remote Method Invocation (RMI) удаленного вызова — улучшенного варианта, широко распространенного RPC.
И наконец, интерфейс управления (Administration Interface) — пред­назначен для управления окружением EJB server.
30.1. EJB сервер
Основой в EJB-композиции является особенный сервер. Именно в EJB-сервере и благодаря его свойствам осуществляется весь цикл ра­бот, используемых Web-приложением, основанным на решении EJB. Как и другие серверы, EJB-сервер является носителем информации и одновременно обработчиком запросов к доступным ресурсам. EJB-ser­ver представляет собой встроенную часть Application Server. EJB-сер­вер — это логическое понятие, представляющее собой набор сервисов, таких, как служба имен, сервис транзакций и т. п., необходимых для функционирования всех EJB. Эти сервисы могут быть запущены как в одном адресном пространстве, так и в различных пространствах.
EJB сервер определяет взаимодействие отдельных частей приложе­ний. Для лучшего понимания работы EJB server необходимо рассмот­реть содержимое сервера. EJB server состоит из трех элементов:
1. контейнер EJB (containers);
2. среда выполнения EJB;
3. enterprise bean.
Enterprise bean располагаются на EJB-сервере, взаимодействие меж­ду ними и внешней средой осуществляется при помощи контейнера. EJB-сервер управляет EJB-контейнером и выполняет функцию моста между контейнером и основной платформой, сервером приложений. Контейнер EJB организует доступ к системным ресурсам, таким, как база данных, монитор транзакций и существующим приложениям.
Каждый EJB загружается в специальном системном окружении на­зываемом «контейнер» (container). Контейнер EJB представляет собой специализированный сервис, который непосредственно обслуживает EJB. Передача созданного EJB под управление EJB-серверу называется «установкой» (deploy) EJB. Этот сервис берет на себя управление цик­лом «жизни» установленных в нем EJB, транзакциями, безопасностью, именами объектов, сохранением их состояний и др. в соответствии с требованиями и ограничениями спецификации EJB. Для решения мно­гих из этих задач EJB-контейнер обращается за помощью к серверу EJB. Контейнер управляет Enterprise JavaBean так же, как Web Server управляет servlets, или браузер управляет апплетами. Вне границ кон­тейнера Enterprise JavaBean представляют обычные jar-архивы, кото­рые не работают самостоятельно. Вернее сказать, они могут исполнять­ся на установленной JVM, но правильных действий лучше не ждать. Ejb-jar-архив может содержать один или несколько классов Enterprise
Часть 4. Распределенные компненты EJB 199
Bean. Для каждого объекта EJB в jar-архиве содержатся соответствую­щие классы, интерфейсы и дескрипторы. Контейнер управляет всеми аспектами жизнедеятельности EJB во время выполнения, организуя до­ступ к bean, безопасность, транзакционность и доступ к ресурсам и т. д. Он использует основные сервисы для обеспечения работы EJB:
1. Сервис безопасности — дескриптор, содержит описания доступа методов клиента к различным бизнес-методам, содержащимся в EJB. Контейнер позволяет получать доступ к EJB, находящимся в контейне­ре, только авторизованным клиентам. В дескрипторе описываются все правила доступа к EJB, размещенным в контейнере.
2. Организация удаленного соединения — контейнер управляет низ­коуровневыми взаимодействиями, обычно скрытыми от клиента и раз­работчика EJB точно так же, как если бы система работала в локальной конфигурации, т. е. без использования удаленных вызовов вообще.
3. Управление жизненным циклом EJB — клиент только создает эк­земпляр EJB и удаляет его. Больше клиент не вправе производить ни­каких операций. Однако контейнер управляет всем жизненным циклом EJB, отвечает за нормальное выполнение бизнес-методов и использова­ние системных ресурсов. Контейнер может активировать или дезакти­вировать EJB, сохранить во временном пуле или организовать доступ к данному EJB.
4. Управление транзакциями — дескриптор содержит описания тре­бований, необходимых для осуществления транзакции EJB. Контейнер хранит отдельно данные о транзакциях, периодически обновляя систем­ную базу данных. Транзакцией в терминах СУДБ называется последо­вательный набор SQL-операторов, представляющих неделимую логиче­скую единицу. Это значит, что либо выполняется единица целиком, т. е. буквально все операторы, либо не выполняется ни один оператор вооб­ще. Об успешном выполнении всех SQL-операторов данной единицы со­общает специальный оператор COMMIT, об отсутствии успешного резу­льтата СУБД информирует оператор ROLLBACK.
EJB-сервер и EJB-контейнер совместно организуют доступ к другим
низкоуровневым сервисам.
Совместный уровень безопасности гарантирует доступ к бизнес-ме­тодам только определенных клиентов. В распределенных системах, где производится доступ к различным ресурсам, разбросанным как угодно далеко друг от друга, обеспечению безопасности отводится одна из основных ролей. EJB прекрасно подходит для решения этой задачи. Контейнер и EJB-сервер используют различные методы обеспечения секретности. Авторизация и аутентификация — два прекрасных спосо­ба определения клиента. Аутентификация указывает местоположение пользователя или компьютера, инициировавшего доступ к ресурсу. По­льзовательским идентификаторами обычно служат ID и пароль вводи­мый в момент посещения сайта. Авторизация определяет место, где произошла аутентификация.
Кроме сервиса безопасности, EJB-контейнер и EJB-сервер отвечают за синхронизацию данных, хранимых в системной базе данных. Исполь­зуя сервис транзакции, синхронизация используется для обновления, вставки и удаления данных. Доступ к объектам осуществляется при по-
200 Часть 4. Распределенные компненты EJB
мощи сервиса именований. Для этого используется стандартный API JNDI. Данный набор API предназначен для организации доступа к Ja­va-объектам. Используя JNDI, Java-объекты сохраняют имя любого объекта. В JNDI описаны методы, предназначенные для любой стандар­тной операции работы с объектами, такими, как ассоциация атрибутов с объектами и поиск объектов по атрибутам. В распределенном приложе­нии, таком, каким является Web, клиент должен иметь доступ к раз­личным системам и объектам. Но в различных средах объекты имену­ются по-разному. Для решения этой проблемы используется технология JNDI, в основном с Java-объектами. Сервис именований, описанный в спецификации EJB, основывается непосредственно на JNDI-техноло­гию. Используя JNDI, любые java-объекты могут хранить и получать имя необходимого ресурса или Java-объекта. Системное окружение EJB-сервера описывается в специальном дескрипторе, в котором испо­льзуется JNDI для всех enterprise bean. При старте EJB-сервер исполь­зует JNDI-имена EJB-объектов для инициализации.
Контейнер изолирует Enterprise JavaBean от прямого доступа клиен­та к методам EJB, обеспечивая повышенный уровень безопасности тран­закций. После создания кода и размещения EJB в контейнере, инстру­мент разработки, используемый для создания EJB, должен автоматиче­ски сгенерировать дополнительные классы — это условие спецификации. Эти классы описывают предварительную версию созданного EJB, также генерируются специальные EJB, заглушки и классы скелетонов, пред­назначенные для выполнения методов удаленного вызова (RMI). Для En­tity bean создаются классы обработчики взаимодействий между bean ис­точником данных. Перед размещением EJB на сервере, необходимо со­здать оригинальный описатель (deployment descriptor), описывающий свойства созданного EJB. Если для создания EJB применялась интегри­рованная среда разработки (IDE), например VisualAge, то дескриптор ге­нерируется автоматически средой программирования. Либо для создания дескриптора используются системные утилиты, чаще всего XML-редак­торы с готовыми шаблонами дескриптора серверов приложений.
EJB-контейнер содержит Enterprise bean, к которым клиент обраща­ется через стандартный набор API, описывающий взаимодействие bean и системного окружения среды выполнения. И сам EJB server и EJB­контейнер определяют, как взаимодействуют все участники процесса, клиентский запрос, системное окружение и bean между собой посредст­вом различных сервисов, предоставляемых контейнером. Всякий раз, когда какой-либо EJB создается, удаляется, запрашивается клиентом, контейнер управляет всем механизмом взаимодействия. Когда клиент вызывает удаленный метод EJB, контейнер проверяет несколько пара­метров, контролирует уровень доступа, размещает bean в памяти, вы­зывает методы жизненного цикла. Если bean не используется по каким­либо причинам, контейнер помещает EJB во временный пул до того мо­мента, пока в данном EJB не возникнет потребность, или же просто удаляет из памяти. Чтобы избежать конфликтов при использовании не­скольких сервисов, EJB лишены возможности управлять системными потоками. Доступ к файлам, описанный в EJB-спецификации, запреща­ет использование стандартных потоков ввода-вывода пакета java.io. EJB