Компиляция / запуск кода EJB в NetBeans (для начинающих) - PullRequest
4 голосов
/ 28 декабря 2011

Я очень новичок в Java EE / EJB, с очень небольшими знаниями об этом.

Я скачал NetBeans (7.01) и GlassFish (3.01).Но, поскольку я понятия не имею об EJB, я не понимаю, как запускать код в NetBeans, который включает в себя простой Session Bean без сохранения состояния, JSP и некоторые сервлеты.

Я нашел хороший пример кода Пример калькулятора .Может ли кто-нибудь помочь мне, дав пошаговую процедуру, как запустить пример NetBeans?Заранее спасибо.

1 Ответ

6 голосов
/ 28 декабря 2011

Я бы посоветовал вам , а не , чтобы использовать связанный учебник.Похоже, что он с 2011 года, но он по-прежнему говорит о большом количестве дескрипторов развертывания и домашних интерфейсов (которые старые, плохие, некрасивые и ненужные в настоящее время).

Вы можете обратиться к этому Учебное пособие по JBoss о EJB 3.0.

NetBeans прекрасно поддерживают разработку Java EE.Просто очень быстрый учебник (в Java EE 6):

1.Создайте свой проект EJB (модуль EJB)

Создайте новый проект: Shift + Ctrl + N -> Java EE -> EJB Module -> Next.Выберите любое имя, которое вам подходит, и нажмите Next.Выберите целевой сервер приложений (NetBeans должен предложить вам Glassfish Server 3.x) и версию Java EE (выберите Java EE 6) -> Finish.

2.Добавьте EJB в ваш проект

Теперь у вас есть созданный проект EJB.Щелкните правой кнопкой мыши имя проекта на вкладке Projects с левой стороны.Выберите New -> Session Bean.Выберите любое имя, которое вам подходит, определите свой пакет и выберите Singleton (если вы используете EJB 3.0, вы не можете создавать одноэлементные EJB - просто выберите другой тип).Убедитесь, что локальный и удаленный интерфейсы не проверены .Нажмите Finish.

Вы только что создали свой первый EJB; -)

3.Вызов бизнес-метода EJB

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

  • сервлет,
  • автономный клиент,
  • a @PostConstruct метод.

I 'Я покажу вам, как использовать последний вариант, который кажется наиболее простым, если вы можете использовать Singleton EJB.Все, что вам нужно знать о @PostConstruct аннотированном методе, это то, что он будет вызван, когда контейнер приложения создаст ваш компонент.Это похоже на специальный тип конструктора.

Дело в том, что вы обычно не имеете никакого контроля над инициализацией EJB.Однако, если вы использовали @Singleton EJB, вы можете заставить контейнер инициализировать ваш компонент во время запуска сервера.Таким образом, вы будете знать, что ваш метод @PostConstruct будет вызываться во время запуска сервера.

На этом этапе у вас должен быть код, подобный следующему:

package your.package;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.LocalBean;
import javax.ejb.Startup;

@Singleton
@Startup
public class NewSessionBean {

    // This method will be invoked upon server startup (@PostConstruct & @Startup)
    @PostConstruct
    private void init() {
        int result = add(4, 5);
        System.out.println(result);
    }

    // This is your business method.
    public int add(int x, int y) {
        return x + y;
    }
}

После запуска этого примерного кода (большая зеленая стрелка на панели инструментов) вы должны увидеть журналы GlassFish, подобные этой:

INFO: Имена переносимых JNDI для EJB NewSessionBean: [java: global / EJBModule1 /NewSessionBean! Sss.NewSessionBean, java: global / EJBModule1 / NewSessionBean]
INFO: 9
INFO: EJBModule1 успешно развернут за 78 миллисекунд.


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

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


В соответствии с просьбой ниже вы можете найти мини-учебник для EJB <-> Servlet <-> JSP:

1.Создание веб-проекта

(Примечание. Вы можете достичь приведенного выше примера - с Singleton EJB - и с веб-проектом. В этом случае нам потребуется веб-проект, поскольку мы создадим сервлет и JSP в одномпакет.)

Ctrl + Shift + N -> Java Web -> Web Application -> Next.Задайте имя вашего приложения -> Next -> по умолчанию все в порядке (запомните контекстный путь - он понадобится вам для доступа к приложению) -> Finish.

2.Создайте свой EJB

В этот раз это будет EJB без состояния, поскольку он лучше отражает, каким должен быть bean-компонент калькулятора.

Вы делаете это точно так, как описано выше - просто выберите Stateless вместо Singleton в соответствующем окне.

3.Поместите бизнес-логику в свой EJB

Найдите приведенный ниже пример:

package com.yourpckg;

import javax.ejb.Stateless;

// Stateless EJB with LocalBean view (default when no interface is implementated)
@Stateless
public class Calculator {

    // Business method (public) that may be invoked by EJB clients
    public int add(int x, int y) {
        return x + y;
    }
}

4.Создайте сервлет, который будет вызывать вашу бизнес-логику

RMB в вашем проекте или Ctrl + N -> Web -> Servlet -> Next -> определить имя сервлета и его пакет ->Next -> определить его шаблон URL (запомните его - он понадобится вам для доступа к сервлету) -> Finish.

5.Определите зависимость между вашим сервлетом и EJB.

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

@EJB
Calculator calculator;

Вы помещаете это как поле в свой класс сервлета, поэтому оно должно быть примерно таким:

@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
public class MyServlet extends HttpServlet {

    @EJB
    Calculator calculator;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // ...
}

6.Поместите логику контроллера в свой сервлет

NetBeans по умолчанию делегирует все запросы метода HTTP в один метод - processRequest(-), так что это единственный метод, который вы должны изменить.
Найдите пример ниже:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    try {
        // Fetch the user-sent parameters (operands)
        int operand1 = Integer.parseInt(request.getParameter("operand1"));
        int operand2 = Integer.parseInt(request.getParameter("operand2"));

        // Calculate the result of this operation
        int result = calculator.add(operand1, operand2);

        // Put the result as an attribute (JSP will use it)
        request.setAttribute("result", result);
    } catch (NumberFormatException ex) {            
        // We're translating Strings into Integers - we need to be careful...
        request.setAttribute("result", "ERROR. Not a number.");
    } finally {            

        // No matter what - dispatch the request back to the JSP to show the result.
        request.getRequestDispatcher("calculator.jsp").forward(request, response);
    }
}

7.Создайте файл JSP

Ctrl + N в своем проекте -> Web -> JSP -> Next -> введите имя файла (в моем случае это calculator, какКод сервлета использует это имя (обратите внимание на часть getRequestDispatcher. Оставьте входное значение папки пустым. -> Finish.

8. Заполните файл JSP кодом интерфейса пользователя

Это должна быть простая форма, которая определяет два параметра: operand1 и operand2 и отправляет запрос на сопоставление URL вашего сервлета. В моем случае это что-то вроде следующего:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form action="MyServlet">
            <input type="text" name="operand1" size="3" value="${param['operand1']}" /> +
            <input type="text" name="operand2" size="3" value="${param['operand2']}" /> = 
            <input type="submit" value="Calculate" />
        </form>

        <div style="color: #00c; text-align: center; font-size: 20pt;">${result}</div>
    </body>
</html>

Просто посмотрите форму action значение атрибута (это должно быть ваше сопоставление URL сервлета.).

  1. Введите ваше приложение

Вы должны знать, какой порт у вашей GlassFishЯ предполагаю, что в NetBeans по умолчанию это 37663. Следующая вещь - это URL-адрес веб-приложения и имя файла JSP. Объедините все это вместе, и у вас должно получиться что-то вроде:

http://localhost:37663/MyWebApp/calculator.jsp

В двух входных текстах вы вводите операнды и после нажатия «Рассчитать» вы должныувидеть результат.

...