Что такое EJB и что он делает?


пытался узнать, что EJB бобы, что это значит, что их экземпляры управляются в пуле, бла-бла. Действительно не могу получить хороший захват из них.

можете ли вы объяснить мне, что они на самом деле (практически для программиста Java)? Что они делают? Каковы их цели? почему на самом деле использовать их? (Почему бы просто не придерживаться POJO?) возможно, пример приложения?

пожалуйста, обратитесь только к обновленной информации, то есть EJB 3.1. Информация о дате о EJB может ввести в заблуждение.

для начинающих EJB обучения обратите внимание:

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

5 133

5 ответов:

Почему на самом деле использовать их? (Почему бы просто не придерживаться POJO?)

Если вам нужен компонент, который обращается к базе данных или обращается к другим ресурсам подключения/ каталога, или доступен из нескольких клиентов, или предназначен в качестве службы SOA, EJBs сегодня обычно "больше, сильнее, быстрее (или, по крайней мере, более масштабируемый) и проще", чем POJOs. Они наиболее ценны для обслуживания большого количества пользователей через интернет или корпоративную сеть и несколько менее ценно для небольших приложений в отделе.

  1. повторное использование / совместное использование логики в нескольких приложениях / клиентах с ослабленной связью.
    EJBs могут быть упакованы в свои собственные банки, развернуты и вызваны из многих мест. Они являются общими компонентами. Правда, POJOs может быть (осторожно!) разработанный как библиотеки и упакованы в баночки. Но EJBs поддерживает как локальный, так и удаленный доступ к сети - в том числе через локальный интерфейс java, прозрачный RMI, JMS async веб-служба сообщений и SOAP/REST, сохранение из зависимостей cut-and-paste jar с несколькими (несогласованными?) развертывания.
    Они очень полезны для создания SOA-сервисов. При использовании для локального доступа они Поджус (бесплатный контейнер, дополнительные услуги). Акт о разработке отдельного объекта EJB слой повышает дополнительную заботу для увеличивать заключение, свободное соединение и сцепление, и способствует чистому интерфейсу (фасаду), защищая абонентов от сложной обработки и данных модели.

  2. масштабируемость и надежность Если вы применяете огромное количество запросов от различных вызывающих сообщений / процессов / threads, они сначала распределяются по доступным экземплярам EJB в пуле а потом встали в очередь. Это означает, что если количество входящих запросов в секунду больше, чем сервер может обрабатывать, мы деградируем изящно - всегда есть некоторые запросы обрабатываются эффективно, а избыточные запросы заставляются ждать. Мы Не reach server "meltdown" - где все запросы испытывают ужасное время отклика одновременно, плюс сервер пытается получить доступ к большему количеству ресурсов, чем оборудование и ОС может обрабатывать и, следовательно, сбои. EJBs может быть развернут на отдельном уровне, который может быть clustered-это дает надежность за счет отработки отказа от одного сервера к другому, плюс оборудование можно добавить к маштабу линейно.

  3. Управление Параллелизмом. Контейнер гарантирует, что EJB-компонент экземпляры будут автоматически доступны безопасно (серийно) несколькими клиентами. Контейнер управляет EJB с бассейном, пул потоков, в очередь вызова и автоматически выполняет блокировку записи на уровне метода (по умолчанию) или блокировка чтения (через @Lock (READ)). Это защищает данные от повреждения через одновременная запись-запись конфликтует и помогает последовательно считывать данные, предотвращая столкновения чтения и записи.
    Это в основном полезно для @ Singleton session beans, где Боб манипулирует и совместное использование общего состояния через абонентов-клиентов. Это можно легко преодолеть вручную настройка или программное управление расширенными сценариями для параллельного выполнения кода и доступ к данным.

  4. автоматическая обработка транзакций.
    Ничего не делайте, и все ваши методы EJB будут запущены в транзакции JTA. Если вы обращаетесь к базе данных с помощью JPA или JDBC, это происходит автоматически зачислен в сделку. То же самое для вызовов JMS и JCA. Указывать @TransactionAttribute (someTransactionMode) перед методом, чтобы указать, если / как это конкретный метод участвует в транзакции JTA, переопределяя режим по умолчанию:"требуется".

  5. очень простой доступ к ресурсам / зависимостям через инъекцию.
    Контейнер будет искать ресурсы и устанавливать ссылки на ресурсы как поля экземпляра в данный объект: например, как JNDI, хранящиеся соединений JDBC, JMS-соединений/темы/очереди, другие Компоненты EJB, транзакции JTA, JPA для лица диспетчере сохраняемости контексты, JPA entity manager блоки персистентности фабрики, и ресурсы переходника JCA. например, чтобы настроить ссылку на другую транзакцию EJB & A JTA и менеджер объектов JPA & фабрика соединений JMS и очередь:

    @Stateless
    public class MyAccountsBean {
    
        @EJB SomeOtherBeanClass someOtherBean;
        @Resource UserTransaction jtaTx;
        @PersistenceContext(unitName="AccountsPU") EntityManager em;
        @Resource QueueConnectionFactory accountsJMSfactory;
        @Resource Queue accountPaymentDestinationQueue;
    
        public List<Account> processAccounts(DepartmentId id) {
            // Use all of above instance variables with no additional setup.
            // They automatically partake in a (server coordinated) JTA transaction
        }
    }
    

    сервлет может вызвать этот компонент локально, просто объявив переменную экземпляра:

    @EJB MyAccountsBean accountsBean;    
    

    а затем просто вызывая его ' методы по желанию.

  6. интеллектуальное взаимодействие с JPA. По умолчанию, данный EntityManager вводят как выше используется персистентность в области транзакций контекст. Это идеально подходит для безгосударственных сеансовых компонентов. Когда (без состояния) метод EJB вызывается, новый контекст персистентности создается в новой транзакции, все экземпляры объекта сущности, полученные / записанные в БД, видны только в пределах этого вызов метода и изолированы от других методов. Но если другие компоненты EJB без гражданства вызванный методом, контейнер распространяется и совместно использует один и тот же компьютер для них, так же сущности создаются автоматически совместно используется последовательным образом через ПК в том же торговая операция.
    Если объявлен компонент сеанса @Stateful, то равное интеллектуальное сродство с JPA достигается путем объявление entityManager расширенной областью действия: @PersistentContent (unitName="AccountsPU, type=EXTENDED). Это существует для жизни сеанс bean, через несколько вызовов bean и транзакций, кэширование копий в памяти ранее извлеченных/записанных объектов БД, поэтому они не должны быть повторно проверено.

  7. Управление Жизненным Циклом. Жизненный цикл EJB-компонентов является управляемой контейнером. По мере необходимости, это создает EJB в случаях, очищает и инициализирует состояние сеансового компонента с отслеживанием состояния, пассивирует и активирует, а также вызывает методы обратного вызова жизненного цикла, поэтому код EJB может участвовать в операциях жизненного цикла получение и освобождение ресурсов или выполнение других действий по инициализации и завершению работы. Он также захватывает все исключения, регистрирует их, откатывает транзакции по мере необходимости и при необходимости создает новые исключения EJB или @ApplicationExceptions.

  8. Управление Безопасности. Управление доступом на основе ролей к EJBs можно настроить с помощью простой аннотации или XML установочный. Сервер автоматически передает аутентифицированные данные пользователя вместе с каждым вызов как контекст безопасности (вызывающий принципал и роль). Это гарантирует, что все управление доступом на основе ролей правила соблюдаются автоматически, так что методы не могут быть незаконно называют не та роль. Это позволяет компоненты EJB в легкий доступ к сведениям о пользователе / роли для дополнительного программного обеспечения проверочный. Это позволяет подключать дополнительную обработку безопасности (или даже инструменты IAM) к контейнер в стандартном образе.

  9. Стандартизация И Переносимости. Реализации EJB соответствуют стандартам Java EE и соглашениям о кодировании, повышая качество и легкость понимания и обслуживания. Это также способствует переносимости кода на новый серверы приложений поставщиков, гарантируя, что все они поддерживают одни и те же стандартные функции и поведения, и отговаривая разработчиков от случайного принятия проприетарных
    непортативные функции поставщика.

  10. Настоящий Кикер: Простота. Все вышеперечисленное можно сделать с помощью очень упрощенный код-либо с использованием настроек по умолчанию для EJBs в Java EE 6 или добавление нескольких аннотаций. Кодирование предпринимательство / промышленные характеристики прочности в вашем собственном POJOs были бы будь путь более объемный, сложный и подверженный ошибкам. Когда-то ты начните кодирование с EJBs, они довольно просты в разработке и дают отличный набор преимуществ "free ride".

В оригинале и EJB спецификации 10 лет назад, компоненты EJB являются главной проблемой производительности. Они были раздуты, нуждались в большом количестве артефактов кода и конфигурации и обеспечивали около 2/3 вышеперечисленных преимуществ. Большинство веб-проектов фактически не использовали их. Но это значительно изменилось с 10 лет настройки, капитального ремонта, функционального улучшения и развития ручей-подкладка. В Java EE 6 они обеспечивают максимальный уровень промышленной прочности и простоты использования.

что не нравится?? : -): -)

EJB-это компонент Java, содержащий бизнес-логику, который вы развертываете в контейнере, и который извлекает выгоду из технических служб, предоставляемых контейнером, обычно декларативно, благодаря аннотациям:

  • управление транзакциями: транзакция может быть запущена автоматически перед вызовом метода EJB и зафиксирована или откатана после возврата этого метода. В этом контексте транзакции распространяется на звонки на другие объекты EJB.
  • безопасность управление: можно проверить, что вызывающий объект имеет необходимые роли для выполнения метода.
  • инъекция зависимостей: другие EJBs или ресурсы, такие как JPA entity manager, источник данных JDBC и т. д. смогите быть впрыснуто в EJB.
  • параллелизм: контейнер гарантирует, что только один поток одновременно вызывает метод вашего экземпляра EJB.
  • распределение: некоторые компоненты EJB могут быть вызваны удаленно, из другой JVM.
  • отказоустойчивость и балансировка нагрузки: удаленный клиенты вашего EJBs могут автоматически перенаправить свой вызов на другой сервер, если это необходимо.
  • управление ресурсами: компоненты с сохранением состояния могут автоматически пассивироваться на диск, чтобы ограничить потребление памяти вашего сервера.
  • ... Я, наверное, забыл некоторые моменты.

надеюсь, что это из Oracle doc поможет кому-то вроде меня понять тему EJB простым способом.

Что такое корпоративный компонент? Написанный на языке программирования Java, корпоративный компонент является серверным компонентом, который инкапсулирует бизнес-логику приложения. Бизнес-логика-это код, который выполняет цель приложения. Например, в приложении управления запасами корпоративные компоненты могут реализовывать бизнес-логику в методы называются checkInventoryLevel и orderProduct. Вызывая эти методы, клиенты могут получить доступ к службам инвентаризации, предоставляемым приложением.

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

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

В-третьих, потому что фасоли предпринимательства портативные компоненты, ассемблер приложений может создавать новые приложения из существующих компонентов. Эти приложения могут работать на любом совместимом сервере Java EE что они используют стандартные API.

когда использовать корпоративные компоненты вы должны рассмотреть возможность использования enterprise фасоль, если ваше приложение имеет любое из следующих требований:

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

транзакции должны обеспечивать целостность данных. Поддержка корпоративных компонентов транзакции, механизмы, которые управляют параллельным доступом разделяемый объект.

приложение есть множество клиентов. Только с несколькими строками конечно, удаленные клиенты могут легко найти корпоративные компоненты. Эти клиенты могут быть тонкими, разнообразными и многочисленными.

вопрос, который интересует меня больше всего, как и где я могу использовать их. Чтобы понять это, нам нужно сначала увидеть, какие типы EJB существуют. Есть 2 большие категории:

  1. сессии бобы
  2. управляемые сообщением бобы

давайте рассмотрим сеансовые бобы. Они бывают 3-х видов:

  1. Stateful - эти компоненты поддерживают состояние и специфичны для клиента по нескольким запросам. Рассматривайте это как сеанс. Этот немедленное использование они могут быть помещены в is магазин телегах или другой тип сеансов (сеанс входа в систему и так далее)
  2. без гражданства - это автономные компоненты, которые не сохраняют информацию между запросами, но они уникальны для пользователя. Немедленное использование, которое приходит на ум -классы обслуживания на уровне сервиса. Представьте себе OrderService. Еще одно большое использование для них-это предоставление веб-сервисов. Опять же, это будет на уровне сервиса или полностью отделять.
  3. Синглтон - это бобы, которые существуют для каждого приложения и создаются один раз и могут быть повторно использованы / доступны несколько раз. Немедленно Configuration компонент приходит на ум-где вы можете хранить конфигурации уровня приложения и получить к ним доступ, когда они вам нужны из любого места.

теперь остальные возможности или объекты могут быть использованы в любом таком слое ситуации:

  • безопасность - вы можете проверить наличие разрешений с аннотацией на вызываемый метод. Это может произойти на уровне сервиса, а также в контроллере, если вы этого хотите.
  • управление сделками - это очевидный кандидат на уровне сервиса или уровне персистентности
  • Инъекции Зависимостей - снова будет использоваться везде

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

и так далее. Теперь большой недостаток заключается в том, что вы становитесь очень зависимыми от контейнера EJB, и хотя вы можете переключаться между двумя ссылочными реализациями, вы не сможете переключиться на что-то более легкое-Tomcat для образец. Но почему вы хотите пожертвовать всеми преимуществами?

EJBs - это просто специализированные объекты java, которые обрабатывают

1.балансировки нагрузки и отказоустойчивости 2.управление транзакциями и сохраняемость 3.безопасность Разница в том, что EJBs работает внутри контейнера EJB - сервера, который фактически предоставляет вышеуказанные возможности. Мы используем аннотации, чтобы сообщить контейнеру о предоставлении этих возможностей.

простой EJB без состояния может выглядеть так:

@Stateless
public class MyEJB {
public String hello(){
return "Hello World";
    }
}

и вы будете вызывать его как:

@EJB
MyEJB ejb

 public void sayHello(){

    System.out.println(ejb.hello());
}

вот именно. Там нет" новых " операторов. Контейнер EJB заботится о создании экземпляров и управлении потоками для вас, чтобы вы могли быстрее создавать корпоративные приложения.