EJB, да или нет? - PullRequest
       32

EJB, да или нет?

2 голосов
/ 28 августа 2011

Я занимаюсь разработкой простого веб-приложения на JSP, которое имеет доступ к базе данных MySQL. Я использую библиотеки Hibernate для подключения и использования базы данных. Итак, мой вопрос: нужно ли мне использовать Enterprise Java Beans (EJB) для этого вопроса (учитывая, что это веб-сайт, к которому, вероятно, будет обращаться более одного пользователя одновременно, и все они хотели бы использовать базу данных на в то же время)?

Ответы [ 5 ]

3 голосов
/ 28 августа 2011

Основным преимуществом EJB является то, что он позволяет декларативно разграничивать транзакции.Вместо того, чтобы снова и снова писать один и тот же шаблонный код для начала транзакции, фиксации ее в конце, отката в случае возникновения исключения и т. Д., Это делается для вас стеком EJB.Кстати, Spring предлагает такую ​​же возможность.

Но самое главное, прочитав ваш вопрос и предыдущие комментарии, это правильно спроектировать ваше приложение.Не помещайте никакой код Java в свои JSP.Используйте только JSP EL, JSTL и другие пользовательские теги в ваших JSP, которые предназначены для генерации разметки.

Бизнес-логика должна быть помещена в классы Java (EJB или нет), и эти классы Java должны бытьвызывается из сервлета, который затем отправляет JSP для генерации разметки.Существует множество веб-фреймворков, которые помогут вам правильно спроектировать приложение, а также помочь с проверкой, i18n, шаблонами и т. Д. Посмотрите на Stripes, Spring MVC, Struts и т. Д.

2 голосов
/ 28 августа 2011

Начиная с Java EE 6 вы должны различать EJB и JPA

  • Enterprise Java Beans (javax.ejb) определяет стандарт для распределенной, управляемой контейнером бизнес-логики. Это включает асинхронный обмен сообщениями (JMS), декларативное управление транзакциями и т. Д. «Уровень бизнес-логики».
  • Java Persistence API (javax.persistence) определяет стандарт для доступа / изменения постоянных объектов в системе управления реляционными базами данных - уровень персистентности.

В текущих выпусках Hibernate реализован API JPA . Поэтому, если вы используете Hibernate, вы можете использовать его собственный API или JPA API. Последнее обеспечивает то преимущество, что вы можете переключаться между различными реализациями JPA, такими как OpenJPA, EclipseLink, Hibernate. Запатентованный Hibernate API более мощный, поскольку он предоставляет больше возможностей.

Вы не обязаны использовать EJB, вы можете создать свой собственный уровень бизнес-логики на основе стандартных функций Java или использовать другой контейнер, такой как Spring.

1 голос
/ 29 августа 2011

Я бы сказал Да.

EJB очень просты в использовании bean-компонентов, которые значительно упрощают работу с JPA (Hibernate).

Без них вам нужно вручную отслеживать транзакции и очищать их в блоках try / catch / finally. Вам также необходимо вручную создать фабрику диспетчера сущностей при запуске приложения и затем сохранить ее где-нибудь. Это не очень сложно, но это утомительная работа, которая делает ваш код очень многословным.

С EJB все исчезает. Все, что вам нужно сделать, это что-то вроде этого:

@Stateless
public class MyService {

    @PersistenceContext
    private EntityManager entityManager;

    public Customer getCustomer(Integer customerId) {
        return entityManager.find(Customer.class, customerId);
    }
}

Нет ручной обработки транзакций, нет кода для хранения и хранения менеджера сущностей.

В дополнение к этому, EJB также автоматически поточнобезопасны и экземпляры объединяются в пул. Это означает лучшую производительность и автоматическое регулирование, которое предотвращает перегрузку вашей системы.

В EJB есть еще несколько функций, но я лично обнаружил, что в большинстве случаев вы чаще всего используете что-то подобное.

EJB-компонентам не требуется никакой конфигурации (см. Минимальное 3-уровневое приложение Java EE, без какой-либо конфигурации XML ), и они поддерживаются многими серверами (Resin, GlassFish, TomEE, JBoss КАК). Вы также можете добавить EJB на серверы, которые еще не поддерживают его через OpenEJB, но гораздо проще начать с сервера, который его уже поддерживает.

0 голосов
/ 07 декабря 2014

Если ваше приложение работает под Apache Tomcat, вы должны использовать hibernate или чистый JPA. Я думаю, что для простого приложения вам не нужен JBoss или нужен?

Если ваше приложение работает под управлением JBoss или Glassfish, вы можете использовать EJB3 без удаленных вызовов. Если ваш бэкэнд и внешний интерфейс разделены, вы можете использовать EJB3 через удаленные вызовы.

В общем, если вы можете использовать EJB3 / 3.1 / 3.2 - используйте его!

0 голосов
/ 28 августа 2011

ORM Hibernate достаточно для этой цели.Насколько я понимаю, EJB более полезны в многоуровневых приложениях (где вы общаетесь через интерфейс со средним уровнем, содержащим EJB, который, в свою очередь, обращается к базе данных), и в результате EJB ужасно перепроектированы для более простых целей (но EJB3это не мерзость, что были в предыдущих версиях, поэтому возьмите это с крошкой соли).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...