Каков предпочтительный способ использования EJB и сервлетов для веб-приложений? - PullRequest
4 голосов
/ 26 июня 2011

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 26 июня 2011

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

Я настоятельно рекомендую вам потратить время на создание примера приложения, особенно если высовершенно новый для 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, часто испытывают желание использовать сессионные компоненты с сохранением состояния для поддержания состояния, которым лучше управлять в постоянном хранилище.В этом руководстве вы узнаете о различных типах бинов и их назначении.

1 голос
/ 26 июня 2011

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

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

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

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

0 голосов
/ 15 апреля 2013

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

Создать EAR instread двух разных проектов, таких как EJB Jar и Web Application 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){
        }
    }
...