EJB2 против EJB3
EJB (Enterprise JavaBeans) - это Java API (интерфейс прикладного программирования), входящий в спецификацию Java EE (Java Platform, Enterprise Edition). EJB описывает архитектурную модель для разработки корпоративных приложений. Это управляемая серверная модель, способная отражать бизнес-логику корпоративного приложения. IBM является первоначальным создателем EJB, который разработал его в 1997 году. Sun Microsystems приняла его в 1999 году.
До введения EJB было обнаружено, что решения проблем, найденных во внутреннем бизнес-коде, часто повторно реализовывались программистами. В результате EJB был введен для решения таких общих проблем, как сохраняемость, целостность транзакций и безопасность. EJB предоставляет стандартные способы решения этих внутренних проблем, указывая, как сервер приложений должен обрабатывать транзакции, интегрироваться со службами JPA (Java Persistence API), обрабатывать управление параллелизмом, обрабатывать события JMS (Java Message Service), решать проблемы с именами с помощью JNDI (Интерфейс именования и каталогов Java), разработка безопасных программ с помощью JCE (расширение криптографии Java) и JAAS (служба аутентификации и авторизации Java), развертывание компонентов, удаленная связь с RMI-IIOP (интерфейс вызова удаленного метода Java через Интернет-протокол Inter-Orb), разрабатывать веб-службы, вызывать асинхронные методы и использовать службу Timer.
EJB2
EJB2 (EJB 2.0) был выпущен 22 августа 2001 года. Он описывает спецификацию для разработки распределенных объектно-ориентированных приложений на Java путем объединения инструментов, разработанных разными поставщиками. Одна из основных целей EJB2 заключалась в том, чтобы упростить программистам разработку корпоративных приложений без необходимости разбираться в низкоуровневых деталях, таких как многопоточность и пул соединений. Другая цель состояла в том, чтобы позволить программистам написать «Бин» один раз и запустить где угодно без перекомпиляции (придерживаясь лозунга языка программирования Java «написать один раз, запустить где угодно»). Кроме того, EJB2 предназначался для того, чтобы позволить компонентам, разработанным разными поставщиками, легко взаимодействовать, а поставщики могли писать расширения для своих продуктов, которые могут поддерживать EJB.
EJB3
EJB3 (EJB 3.0) был выпущен 11 мая 2006 года. EJB3 значительно облегчил жизнь программистам, позволив им использовать аннотации вместо дескрипторов развертывания, которые использовались в предыдущих версиях. EJB3 содержит бизнес-интерфейс и специальный объектный компонент, который может реализовать этот бизнес-интерфейс, устраняя необходимость в использовании домашних/удаленных интерфейсов и файла ejb-jar.xml. Общая производительность EJB3 значительно улучшена по сравнению с EJB2, и в этом выпуске EJB значительно улучшена конфигурируемость, гибкость и переносимость.
В чем разница между EJB2 и EJB3?
EJB3 имеет заметное улучшение конфигурации и производительности по сравнению с EJB2. Одной из причин такого улучшения производительности является использование EJB3 POJO (обычный старый объект Java) с метаданными и дескрипторами развертывания XML вместо JNDI-поисков, используемых в EJB2 для ссылок на объекты. Конфигурация EJB3 намного проще, потому что программисту не нужно реализовывать интерфейсы Home/Remote и другие (например, SessionBean), что избавляет от необходимости использовать методы обратного вызова контейнера (такие как ejbActivate и ejbStore).
Кроме того, EJB3 лучше, чем EJB2, в плане гибкости и переносимости. Например, легко преобразовать сущности EJB3 в DAO (объект доступа к данным) и наоборот, потому что сущности EJB3 легкие (в отличие от тяжелых сущностей EJB2, которые реализуют вышеупомянутые интерфейсы). Запросы к базе данных, написанные на EJB3, очень гибкие, поскольку в нем используется усовершенствованный EJB-QL вместо старой версии EJB-QL, имевшей ряд ограничений. EJB3 устраняет все проблемы переносимости EJB2 (который использует компоненты управления данными для доступа к базе данных), поддерживая более обобщенный JPA для всех транзакций данных.
В отличие от EJB2, для выполнения которого требуется контейнер EJB, EJB3 может выполняться в независимой JVM (виртуальная машина Java) без использования контейнеров (это возможно, поскольку он не реализует стандартные интерфейсы). В отличие от EJB2, EJB3 легко подключается к поставщикам сохраняемости, предлагаемым третьими сторонами. Другое важное различие между EJB3 и EJB2 заключается в том, что EJB3 может использовать безопасность на основе аннотаций, тогда как EJB2 использует безопасность на основе дескрипторов развертывания. Это означает, что задачи конфигурации и настройки в EJB3 намного проще, а накладные расходы на производительность значительно снижены по сравнению с EJB2.