Использование клиентской банки в EJB 3 и шаблонах проектирования

Я новичок в EJB 3 и довольно смущен некоторыми сомнениями, которые Google не предоставил удовлетворительный ответ.

Я пытаюсь создать структуру с некоторыми базовыми классами и некоторыми полезными методами, которые могут использовать другие мои приложения. Все приложения должны быть развернуты на одном сервере.

Когда я пытаюсь создать новый проект EJB 3.0 в eclipse, он спрашивает, хочу ли я также создать клиентскую банку. Какую цель выполняет эта клиентская банка? Мой ejbmodule добавлен как часть файла EAR. Так я действительно нуждаюсь в этом банке клиента? Нужно ли создавать как локальные, так и удаленные интерфейсы? Или просто удаленные интерфейсы будут делать?

Я решил сохранить все интерфейсы в проекте с именем projCommon и bean в projApps. Удаленные интерфейсы, которые реализуют классы bean, находятся в projCommon. Поэтому projApps зависит от projCommon.

Я планирую использовать метод делегата, определенный в projCommon, для вызова классов bean. Это будет означать, что projCommon также зависит от projApps, rt? И привести к круговой зависимости.

Как точно вводится EJB?

Было бы очень полезно, если бы вы любезно предоставили объяснение моим сомнениям.

Ответ 1

Когда я пытаюсь создать новый EJB 3.0 в eclipse, он спрашивает, хочу ли я также создать клиентскую банку. Какие Это делает клиентская банка?

JAR файл JJB-клиента является дополнительным файлом JAR, который может содержать все файлы классов, которые клиентская программа должна использовать в представлении клиента для предприятия beans, которые содержатся в файле JJB JAR. Если вы решили не создавать JAR файл клиента для модуля EJB, все классы интерфейса клиента будут находиться в файле JJB JAR

Мой ejbmodule добавлен как часть EAR файл. Так мне действительно нужно это клиентская банка?

Вам действительно не нужен клиент EJB, он просто предоставляет более легкую упаковку для использования EJB от клиента.

Нужно ли создавать как локальные, так и удаленные интерфейсы? Или просто удаленный интерфейсы будут делать?

Если все ваши EJB находятся в одном EAR, вы можете использовать локальные интерфейсы, если вам не нужны удаленные интерфейсы. Локальные интерфейсы более эффективны, звонки выполняются как ссылка.
Некоторые контейнеры (т.е. WebSphere) оптимизируют это во время выполнения для вас и автоматически вызывают локальные интерфейсы, если это возможно.

Я решил сохранить все интерфейсы в проекте под названием projCommon и bean определения в projApps. удаленные интерфейсы, которые beanклассы реализуются в projCommon. Таким образом, projApps зависит от projCommon.

Я бы сохранил свои проекты, организованные по функциональным областям. Выполнять локальные вызовы внутри функциональных областей и удаленных объектов вне функциональных областей. Это позволяет вам разделить функциональность, которая будет развернута на разных серверах, для ее масштабирования. Он также сохраняет код более модульным. Это также позволяет избежать любых круговых зависимостей.

Как именно непосредственно EJB впрыскивается?

Как это работает, не имеет значения, это будет сделано контейнером. Весь смысл J2EE состоит в том, чтобы абстрагироваться от того, как.

По http://www.developer.com/print.php/3650661:

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

С помощью аннотаций или дескрипторов развертывания могут быть введены ресурсы, которые пытается использовать сеанс без состояния bean. Ресурсы могут быть получены путем аннотации переменных экземпляра или аннотации методов сеттера.

Ответ 2

Подробнее см. здесь. Надеюсь на эту помощь.