Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Какую роль играет EJB


Автор: 4epT 2.2.2012, 11:45
Всем привет. Подскажите пожалуйста какую роль играет EJB ? Для чего эта технология предназначена ?

И в какой связке чаще всего используют их ?

Спасибо!

Автор: Skynin 2.2.2012, 16:12
Гуглили?

На каком уровне стало непонятно?

Я к тому что ответ на подобный вопрос может получится как в анекдоте:
-- Папа, а почему, когда яблоко откусишь, оно делается коричневым?
-- Дело в том, сынок, что в яблоке имеются различные химические вещества. Одно из них -- железо. Так вот, когда железо вступает с кислородом, находящимся в воздухе, в химическую реакцию, получается окисление. В результате образуется вещество, которое и окрашивает яблоко в коричневый цвет.
-- Папа, а с кем ты сейчас разговаривал?


Конкретизируйте и свой опыт программирования и сам вопрос по EJB

Автор: 4epT 2.2.2012, 16:42
Опыт в java уже более 5 лет. Знаком с spring, hibernate, jsf, servet, jsp, jdbc.

гуглил ) прочитал пару статей ... так как у меня не получается читать на английском, сам не смог до конца понять роль EJB.

Попробую уточнить вопрос.

Вот есть например проекты где используется spring, struts и hibernate. Тут hibernate берет на себя работу с БД, spring управление транзакциями и управление коннектом. Struts в свою очередь обрабатывает action и отдает какой то ответ пользователю.

Вот хотелось бы примерно в таком виде услышать ответ по EJB =) Например используется в такой то свзяке, где выполняет такие то действия и отвечает за это.

Если не правильно что то понимаю, поправьте пожалуйста.



P.S. Видел статью где описывали взаимодействие jsp - servlet - ejb - jdbc. Какая тут архитектура, зачем тут прослойка из ejb ? почему сервлет не может работать напрямую с БД через jdbc ?

Автор: ecologist 2.2.2012, 22:56
EJB - это в какой-то степени Spring с возможностью Dependency Injection, с возможностью управления транзакциями, с возможностью интерсепторов.

Автор: COVD 2.2.2012, 23:12
EJB - спецификация, определяющая стандарт для серверных приложений. На практике оказалось, что она избыточна во многих случаях, слишком сложна и громоздка. Появились и стали популярны как альтернатива EJB упрощенные технологии для конкретных нужд - spring для инициализации, hibernate для маппинга. Но они тоже стали превращаться в монстров, расширяя круг решаемых ими задач. В свою очередь, эта конкуренция способствовала совершенствованию EJB. 

Автор: 4epT 3.2.2012, 00:40
Тогда в каких случаях лучше применить ejb, а в каких spring + hibernate ?

В ejb разве есть маппинг сущностей на базу ? (как в хибернейте)

Автор: troglodit42 3.2.2012, 12:35
EJB состоит из трех частей

Session Beans - предназначены для инкапсуляции логики. Есть Dependency Injection. Есть шедулер задач. Есть управление транзакциями. Есть контейнерный ConcurrencyManagement для Singleton.
Но самое на мой взгляд главное - это Remoting. Т.е. несколько компонетов могут находиться на совершенно разных физических машинах. И все выше перечисленные ососбенности, в том числе и транзакции будут также прозрачно работать, как если бы все были на одном сервере.
Сам использую Сессионные бины в связке с JSF.В них у меня лежит бизнес-логика и коммуникации между модулями. JSF бины только для уровня презентации

Entity Beans - еще эта технология называется JPA. Примерно тоже самое что Hibernate. (Вернее JPA выросла под влиянием Hibernate). javax.persistence аннотации и прочее.

ManagedDriven Beans - JMS. Система асинхронной рассылки сообщении по стратегиям: от пункта к пункту и издатель-подписчик (http://ru.wikipedia.org/wiki/Java_Message_Service). Удобно для гетерогенных систем, когда нет возможности иметь общий интерфейс взаимодействия (если этот интерфейс есть, то имхо удобнее Session EJB)

Сам активно пользовался первыми двумя. Получалась такая прослойка:
JSF - GUI
Session EJB -
   Local - бизнес-логика, управление данными, 
   Remote - для коммуникации между шардами.
Entity EJB - работа с БД.

Также есть возможность написания "JEE Клиента". Это десктоп приложение, которое может распространятся через Java Web Start. Данное приложение может работать напрямую с удаленными EJB компонентами сервера. Вызывая методы удаленных интерфейсов.

Автор: Skynin 3.2.2012, 12:37
hibernate для ejb не помеха. 

так же и как для spring - это отдельная вещь
поэтому вопрос нужно бы так ставить:
Тогда в каких случаях лучше применить ejb + hibernate, а в каких spring + hibernate ?

Кроме хибера и там и там применяются другие JPA фреймворки. Или парсеро-мапперы типа myBatis

Далее, spring стал популярен ввиду неудобств ejb 2.x
После выхода ejb 3.x нередко можно услышать мнение что spring не нужен, не имеет преимуществ.

Поэтому ответ на "а в каких случаях"
считайте что в любых случаях где уместен spring будет уместен и ejb и наоборот.

Выбирают же по разнообразным "политическим" причинам, не связанными напрямую с техническими преимуществами/недостатками этих подходов (ejb НЕ фреймворк, а спецификация, которую реализуют некоторые сервера приложений. Референсная реализована в GlassFish. А также обычно с отставанием в JBoss и Apache Geromino - а на Geromino основан IBM WebSphere)
Если же сервер приложения в проекте не требуется, а достаточно jsp - spring mvc - jdbc(JPA, ...) то пожалуй и EJB ни к чему для такого проекта

Автор: 4epT 3.2.2012, 13:09
Спасибо за ответы )

Заинтересовал JSF + EJB + Entity EJB ...

То есть JSF бины "дергают" Session EJB бины, в свою очередь Session EJB бины используют Entity EJB для доступа к БД. Можете немного подробнее рассказать про Local и про Remote ?

Ммм Remoting это не что то вроде Web сервиса ?

Автор: troglodit42 3.2.2012, 13:21
Цитата(4epT @  3.2.2012,  11:09 Найти цитируемый пост)
Ммм Remoting это не что то вроде Web сервиса ? 

По сути да, только вместо Http+SOAP там TCP+CORBA

Автор: Vasay 4.2.2012, 01:01
troglodit42
Цитата

Entity Beans - еще эта технология называется JPA. Примерно тоже самое что Hibernate. (Вернее JPA выросла под влиянием Hibernate). javax.persistence аннотации и прочее.


JPA это совсем не тоже самое, что Hibernate. Это библиотека дающая стандартные методы для общения с разными ORM, такими как Hibernate, TopLink, EclipseLink... Сама по себе она работать не может, ей нужен ORM.  В идеале, при использовании JPA замена одного ORM на другой - вопрос одной строчки в конфиг файле.

Entity Beans - это не технология.  Так называют классы предназначенные для отображения неких сущностей.

JPA вполне может использоваться отдельно не только от EJB но и от JavaEE - в SE проектах.


4epT
Цитата

Подскажите пожалуйста какую роль играет EJB ? Для чего эта технология предназначена ?

И в какой связке чаще всего используют их ?


Очень грубо и поверхностно:

Вы можете создать некий EJB для выполнения определенных задач. Задеплоить его на Java Applicateon Server.  И из других приложений обращаться к его интерфейсам. Причем, эти приложения могут находиться на том же сервере, на другом сервере, или вообще быть JavaSE приложениями. 

  

Автор: 4epT 4.2.2012, 01:47
А можно немного разъяснить насчет JPA ? Hibernate это просто реализация JPA (если я правильно понимаю). Вчера из нет бинса создавал EJB Entity Beans, а затем при помощи EntityManager делал запросы в БД (не написав не одной строчки на SQL) ...

Пример:

Код

@Stateless
public class ManagementSystemBean implements ManagementSystemLocal
{
    @PersistenceContext
    private EntityManager em;
 
    public Students getStudents(int studentId)
    {
        return em.find(Students.class, studentId);
    }
 
    public void persist(Object object)
    {
        em.persist(object);
    }
}


В данном случае какая реализация JPA используется ? или это можно только в конфиге глянуть ?

Автор: Vasay 4.2.2012, 01:58
Цитата(4epT @  4.2.2012,  01:47 Найти цитируемый пост)
Hibernate это просто реализация JPA (если я правильно понимаю).


Нет. Hibernate поддерживает работу с JPA....

Грубо говоря - Hibernate - это телевизор. JPA - это универсальный пульт от телевизора, который может работать как с телевизорами марки Hibernate так и с другими телевизорами  smile  

Цитата

В данном случае какая реализация JPA используется ? или это можно только в конфиге глянуть ?


Какой ORM используется можно глянуть в конфиге ( persistence.xml ). Если память не изменяет по умолчанию NetBeans использует EclipseLink

Автор: 4epT 4.2.2012, 15:13
Дело в том что у меня нету файла persistence.xml =)

И такой вопрос ... JPA можно использовать без всяких ORM ?  или JPA  это как интерфейс ? =)

Автор: Skynin 4.2.2012, 15:49
Цитата

JPA можно использовать без всяких ORM

JPA как и EJB - это НЕ фреймворк а спецификация. Причем спецификация как раз для ORM фреймворков.
По другому: JPA никак не возможно использовать без ORM, потому что это описание одного из способов как должна быть устроена работа ORM.

Цитата

Дело в том что у меня нету файла persistence.xml

Так его ни у кого вначале нет.
Как нет ни строчки кода.

Цитата
Hibernate это просто реализация JPA (если я правильно понимаю)

Не совсем так. Идеи которые авторы Hibernate принесли в Java сообщество так понравились, что их решили стандартизиривовать.
Причем, вначале, до JPA уже были попытки - JDO.

Вобщем советую вам погуглить. А то придется сюда копипастить много, начиная с соответствующих разделов в википедии.

Цитата

В данном случае какая реализация JPA используется

Неизвестно. Какую в проект включите - такая и будет.

Автор: 4epT 4.2.2012, 15:58
Цитата

Так его ни у кого вначале нет.
Как нет ни строчки кода.


Но у меня уже настроена работа с БД ... Entity замапены, все запросы работают. К этому времени уже должна быть подключена какая нибудь ORM ...

Автор: Vasay 4.2.2012, 16:18
Цитата(4epT @  4.2.2012,  15:13 Найти цитируемый пост)
Дело в том что у меня нету файла persistence.xml =)


Если Вы пользовались мастером НетБинса, то он должен был создать persistence.xml в проекте. Причем при клике на него, НетБин, по умолчанию, открывает не xml файл, а диалог настроек. Там в выпадающем списке можно выбрать один из нескольких ORM фреймворков (по умолчанию EclipseLink). 


Цитата

Не совсем так. Идеи которые авторы Hibernate принесли в Java сообщество так понравились, что их решили стандартизиривовать.


На самом деле JPA создавался на базе оракловскиого TopLink. Hibernate уже подстраивался под спецификацию.

Добавлено через 6 минут и 20 секунд
Цитата(4epT @  4.2.2012,  15:58 Найти цитируемый пост)
Но у меня уже настроена работа с БД ... Entity замапены, все запросы работают. К этому времени уже должна быть подключена какая нибудь ORM ...


Если Вы пользовались мастером для создания сущностей из БД в SE проекте, то НетБинс должен был добавить либы ЭклипсЛинка. 

В папке META-INF должен был быть создан persistence.xml

Автор: troglodit42 4.2.2012, 17:52
Цитата(Vasay @  4.2.2012,  14:18 Найти цитируемый пост)
В папке META-INF должен был быть создан persistence.xml 

Нетбинс кладет этот фаил в папку "Файлы настройки"

Автор: Vasay 4.2.2012, 18:08
Цитата(troglodit42 @ 4.2.2012,  17:52)
Цитата(Vasay @  4.2.2012,  14:18 Найти цитируемый пост)
В папке META-INF должен был быть создан persistence.xml 

Нетбинс кладет этот фаил в папку "Файлы настройки"

Я говорил про SE проект, а Вы скриншот из web приводите...

Впринципе, в собранном web проекте persistence.xml тоже окажется в META-INF


Так же по умолчанию в web проекте не будет добавлено никаких новых Jar-ов, так как либы ЭклипсЛинк и реализация JPA уже есть среди либ JavaEE.

Автор: 4epT 5.2.2012, 19:00
Можно сказать что EJB бины в MVC шаблоне это DAO слой ?)

persistence.xml нашел в проекте, но что то так и не нашел там строки с указанием какой именно ORM используется.

Почему Hibernate является самым используемым ORM ? Например то что мне сделал NetBeans гораздо легче использовать ... даже не читая документацию, все интуитивно понятно.

Автор: Vasay 5.2.2012, 21:07
4epT, 

Цитата

Можно сказать что EJB бины в MVC шаблоне это DAO слой ?)


Нет! 

К сожалению в этой теме у нас разговор с EJB перешел на JPA, отсюда и путаница ...  

Отвечая на вопрос "Какую роль играет EJB" я бы вообще не упоминал JPA - это разные вещи.

Автор: 4epT 6.2.2012, 00:51
ага ) то есть из mvc паттерна DAO (слой доступа к данным) слой это какая нибудь реализация JPA, а собственно EJB бизнес логика (controller) ? Правильно ?)

Нашел в настройках persistence что используется EclipseLink =)

Автор: troglodit42 6.2.2012, 10:00
Цитата(4epT @  5.2.2012,  17:00 Найти цитируемый пост)
Можно сказать что EJB бины в MVC шаблоне это DAO слой ?)

Можно создать DAO на основе EJB, но это не единственное применение EJB.
Может быть слойка, когда есть уровень DAO на EJB, а над ним еще один уровень EJB, который реализует логику, используя нижний DAO уровень.
А часть бинов верхнего уровня может вообще не использовать DAO.
Например, функционал чата, отправка почты.

ИМХО Session EJB они вообще немного в стороне от MVC.
Model - Entity Beans
View - jsf страницы
Controller - jsf бины
А Session EJB - это отдельные бизнес процессы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)