Я бы посоветовал вам , а не , чтобы использовать связанный учебник.Похоже, что он с 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 сервлета.).
- Введите ваше приложение
Вы должны знать, какой порт у вашей GlassFishЯ предполагаю, что в NetBeans по умолчанию это 37663
. Следующая вещь - это URL-адрес веб-приложения и имя файла JSP. Объедините все это вместе, и у вас должно получиться что-то вроде:
http://localhost:37663/MyWebApp/calculator.jsp
В двух входных текстах вы вводите операнды и после нажатия «Рассчитать» вы должныувидеть результат.