| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
По сути да, только вместо Http+SOAP там TCP+CORBA |
| Автор: Vasay 4.2.2012, 01:01 | ||||
troglodit42
JPA это совсем не тоже самое, что Hibernate. Это библиотека дающая стандартные методы для общения с разными ORM, такими как Hibernate, TopLink, EclipseLink... Сама по себе она работать не может, ей нужен ORM. В идеале, при использовании JPA замена одного ORM на другой - вопрос одной строчки в конфиг файле. Entity Beans - это не технология. Так называют классы предназначенные для отображения неких сущностей. JPA вполне может использоваться отдельно не только от EJB но и от JavaEE - в SE проектах. 4epT
Очень грубо и поверхностно: Вы можете создать некий EJB для выполнения определенных задач. Задеплоить его на Java Applicateon Server. И из других приложений обращаться к его интерфейсам. Причем, эти приложения могут находиться на том же сервере, на другом сервере, или вообще быть JavaSE приложениями. |
| Автор: 4epT 4.2.2012, 01:47 | ||
| А можно немного разъяснить насчет JPA ? Hibernate это просто реализация JPA (если я правильно понимаю). Вчера из нет бинса создавал EJB Entity Beans, а затем при помощи EntityManager делал запросы в БД (не написав не одной строчки на SQL) ... Пример:
В данном случае какая реализация JPA используется ? или это можно только в конфиге глянуть ? |
| Автор: Vasay 4.2.2012, 01:58 | ||
Нет. Hibernate поддерживает работу с JPA.... Грубо говоря - Hibernate - это телевизор. JPA - это универсальный пульт от телевизора, который может работать как с телевизорами марки Hibernate так и с другими телевизорами
Какой ORM используется можно глянуть в конфиге ( persistence.xml ). Если память не изменяет по умолчанию NetBeans использует EclipseLink |
| Автор: 4epT 4.2.2012, 15:13 |
| Дело в том что у меня нету файла persistence.xml =) И такой вопрос ... JPA можно использовать без всяких ORM ? или JPA это как интерфейс ? =) |
| Автор: Skynin 4.2.2012, 15:49 | ||||||||
JPA как и EJB - это НЕ фреймворк а спецификация. Причем спецификация как раз для ORM фреймворков. По другому: JPA никак не возможно использовать без ORM, потому что это описание одного из способов как должна быть устроена работа ORM.
Так его ни у кого вначале нет. Как нет ни строчки кода.
Не совсем так. Идеи которые авторы Hibernate принесли в Java сообщество так понравились, что их решили стандартизиривовать. Причем, вначале, до JPA уже были попытки - JDO. Вобщем советую вам погуглить. А то придется сюда копипастить много, начиная с соответствующих разделов в википедии.
Неизвестно. Какую в проект включите - такая и будет. |
| Автор: 4epT 4.2.2012, 15:58 | ||
Но у меня уже настроена работа с БД ... Entity замапены, все запросы работают. К этому времени уже должна быть подключена какая нибудь ORM ... |
| Автор: troglodit42 4.2.2012, 17:52 |
Нетбинс кладет этот фаил в папку "Файлы настройки" |
| Автор: Vasay 4.2.2012, 18:08 | ||
Я говорил про 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 перешел на JPA, отсюда и путаница ... Отвечая на вопрос "Какую роль играет EJB" я бы вообще не упоминал JPA - это разные вещи. |
| Автор: 4epT 6.2.2012, 00:51 |
| ага ) то есть из mvc паттерна DAO (слой доступа к данным) слой это какая нибудь реализация JPA, а собственно EJB бизнес логика (controller) ? Правильно ?) Нашел в настройках persistence что используется EclipseLink =) |
| Автор: troglodit42 6.2.2012, 10:00 |
Можно создать DAO на основе EJB, но это не единственное применение EJB. Может быть слойка, когда есть уровень DAO на EJB, а над ним еще один уровень EJB, который реализует логику, используя нижний DAO уровень. А часть бинов верхнего уровня может вообще не использовать DAO. Например, функционал чата, отправка почты. ИМХО Session EJB они вообще немного в стороне от MVC. Model - Entity Beans View - jsf страницы Controller - jsf бины А Session EJB - это отдельные бизнес процессы. |