Каков предпочтительный способ использования EJB и сервлетов для веб-приложений?

Я пытаюсь ознакомиться с JavaEE. Я немного смущен тем, какова цель каждого «компонента» (из-за отсутствия лучшего слова): сеансовые компоненты и сервлеты, и как они должным образом взаимодействуют с веб-приложением (клиентский JavaScript).

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

  1. Пользователь посещает страницу «Вход»
  2. Пользователь вводит данные и нажимает «Отправить». Затем я отправляю запрос с помощью AJAX для входа пользователя.
  3. Затем серверная сторона проверяет ввод пользователя и «регистрирует» пользователя (возвращает профиль пользователя и т. д.).

При отправке запроса я отправляю его сервлету (который использует EJB) или сеансовому компоненту через WSDL? Как мне поддерживать «состояние» для этого пользователя, используя любой метод? Я предполагаю, что с Session Beans это так же просто, как аннотировать его с помощью @Stateful.

Кроме того, я предполагаю, что запросы, отправляемые со стороны клиента, должны быть в формате SOAP. Насколько легко использовать что-то более легкое (например, JSON)? Хотя я бы предпочел использовать что-то легкое, в этом нет необходимости, если SOAP ускоряет/упрощает разработку.


person Level9000    schedule 25.06.2011    source источник
comment
кажется, вы не совсем уверены, что именно хотите спросить? Я предлагаю прочитать учебник по java ee: download.oracle.com/javaee/6 /tutorial/doc Это довольно хорошо для начинающих, и после прочтения вы будете знакомы со всеми компонентами и будете знать, как создать свое примерное приложение.   -  person peshkira    schedule 26.06.2011
comment
(сессионный компонент является дочерним компонентом в EJB) запрос не говорите с сеансовыми компонентами напрямую (модель), они могут общаться через сервлет (контроллер), если вы хотите изучить EJB. В любом случае в типичном сервлете приложения JEE будет получен ваш запрос от браузера, и если вы хотите использовать EJB, вы можете использовать. Это еще один вариант, который можно сделать с помощью JSP и сервлета с запросом к базе данных и возвратом ответа через сервлет в браузер для этого варианта использования. WSDL и SOAP совершенно неуместны.   -  person static void main    schedule 12.09.2014


Ответы (3)


В руководстве по Java Enterprise Edition рассматриваются почти все затронутые вами темы; какова цель различных типов bean-компонентов, как реализовать веб-сервисы, как реализовать аутентификацию и т. д.

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

Следует иметь в виду, что, хотя Java EE, безусловно, пытается поддерживать лучшие практики и позволяет проектировать и разрабатывать безопасные корпоративные приложения, которые хорошо работают и масштабируются, она не предписывает и не ограничивает корпоративные приложения для использования одного конкретного протокола, формата данных и шаблон проектирования корпоративных приложений. Некоторые протоколы и форматы лучше поддерживаются базовыми реализациями фреймворка «из коробки», а некоторые варианты зависят от поставщика, но очень немногие конкретные технологические варианты зафиксированы в спецификации.

Чтобы ответить на некоторые из ваших конкретных вопросов, Java EE отлично поддерживает SOAP, но не отдает предпочтение и не ограничивает веб-службы протоколом SOAP. С помощью JAXB и JAX-RS так же легко разрабатывать веб-службы RESTful, которые принимают и возвращают XML или JSON, или и то, и другое. Вам решать, нужно ли вам использовать SOAP, REST или другой протокол.

Это также ваш выбор, хотите ли вы использовать такие платформы, как JAX-RS, или явно разрабатывать сервлеты для обработки HTTP-запросов и ответов. Во многих случаях JAX-RS будет иметь все, что вам нужно, а это означает, что вы сможете реализовать свои веб-сервисы как простые старые методы Java с несколькими аннотациями, даже не беспокоясь о сортировке и десортировке содержимого и параметров.

Точно так же с JAXB вам решать, хотите ли вы использовать WSDL или нет. Хорошо, если у вас есть определения WSDL, но нет проблем, если их нет.

Во многих случаях вы обычно будете поддерживать состояние, используя структуру Java Persistence Architecture (JPA), а также получать доступ к таким данным и управлять ими через сеансовые компоненты без сохранения состояния. Разработчики, плохо знакомые с Java EE, часто испытывают искушение использовать сеансовые компоненты с отслеживанием состояния для поддержания состояния, которым лучше управляют в постоянном хранилище. Учебное пособие познакомит вас с различными типами бобов и их назначением.

person Kim Burgaard    schedule 25.06.2011

Веб-службы (WSDL, SOAP и т. д.) обычно используются для связи между приложениями.

Внутри одного веб-приложения вы обычно делаете простые запросы GET/POST, используя AJAX или нет, и получаете либо полную HTML-страницу, либо фрагмент HTML (AJAX), либо данные XML или JSON (AJAX). Браузер обычно взаимодействует с сервлетом, но редко использует сервлеты напрямую.

Обычный способ — использовать фреймворк поверх сервлетов. Фреймворки можно разделить на две большие категории: основанные на действиях (Stripes, Spring MVC, Struts и т. д.) или основанные на компонентах (JSF, Wicket, Tapestry и т. д.).

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

person JB Nizet    schedule 25.06.2011

Вы можете создать базовую архитектуру следующим образом:

Создайте EAR вместо двух разных проектов, таких как EJB Jar и WAR веб-приложения.

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

 ServletClass {   
     do/post(){
     DelegateClass d = new DelegateClass();
     d.callMethod(withParam);
   }
  }


    DelegateClass   {
       @EJB
       EJBlocalinterface  ejbintance;
       void callMethod(DefinPrarm){
          ejbinstance.callEJBMethod();
       }
    }



    @Statelss
    EJBbeanClass implements EJBlocalinterface{
        void callEJBmethod(someParam){
        }
    }
person JavaSun    schedule 15.04.2013