Как указано в нескольких других ответах, EJB идеально подходят для реализации уровня обслуживания.Это очень современный и легкий вид бобов в Java EE.Несмотря на название, вы не можете сравнить их с драконовскими тяжеловесными зверями EJB2, которые были в J2EE.Все согласны с тем, что те были катастрофой, но это уже не 2002 год.
С тех пор, как EJB3 (2006), EJB-бобы стали совершенной технологией.
Они помогают много здесь, предоставляя декларативные транзакции (каждый метод ввода автоматически запускает транзакцию, если она еще не выполняется, хотя это можно изменить при желании), пул, безопасность, блокировка, удаленное взаимодействие и затем некоторые.См. Следующие ответы для некоторых дополнительных деталей:
Транзакции были объяснены здесь, но добавим к этому: это не то, что нужно только для очень сложных, очень безопасных систем.Я бы сказал, что это базовое требование, даже когда речь идет только о базах данных.Если я обрабатываю простой заказ, я хочу, чтобы инвентарь и заказ обновлялись или оба не обновлялись вообще.Это так же просто, как наличие PK и FK в вашей базе данных для обеспечения целостности.
EJB упрощают управление транзакциями.Без EJB есть много стандартного кода для запуска, фиксации или отката tx.
Не следует также недооценивать преимущества объединения и заглушки, которые предоставляет EJB.Это означает, что в боб может быть введено много EJB-компонентов, и вам не нужно беспокоиться о том, что они создаются каждый раз, когда создается такой боб.В противном случае это было бы особенно проблематично, когда не все EJB-компоненты использовались бы каждый раз.
Из-за объединения, однако, вводятся только очень легкие заглушки, которые больше похожи на URL-адреса, которые указывают на фактический экземпляр.Они практически ничего не стоят с точки зрения затрат памяти или ресурсов процессора для внедрения.
EJB-компоненты также содержат аннотации для объявления их синглетонами, организации их поведения блокировки (блокировки записи / чтения), объявление о том, что их следует инициировать при запускеразрешить им управлять так называемым расширенным контекстом постоянства (контекстом постоянства, не ограниченным областью передачи) и т. д.
Это все проблемы, которые вам не нужны в ваших slim сущностях,Например, во многих архитектурах объект User представляет собой простой объект данных, который я хочу передавать по слоям.Я не хочу, чтобы мой экземпляр User имел метод sendMsg () и имел JMS-ресурс в качестве зависимости, так что отправка сообщения могла внезапно выполняться с какого-либо клиента.Я не совсем уверен, почему люди думают, что это как-то «естественно» и «ООП».
В реальном мире я также не вызываю операцию sendMsg для моего друга Джо, когда я хочу отправить ему открытку.Вместо этого я обращаюсь к карточке и доставляю ее в почтовое отделение или помещаю в почтовый ящик.
Я также не вызываю операцию bake () для торта.Вместо этого я ставлю торт в духовку и т. Д.