Министерство образования
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра экономической информатики
Лабораторная работа №2
Enterprise JavaBeans
Вариант 20
Выполнила студент гр. 972303
Рушева М. В.
Проверил Тумаш Д. Е.
Минск, 2022
Задание
Машины (марка модель, цена, класс, год)
Редактирование информации о машине(кроме марки и года)
Вывод владельца и машине, при введённой марке машины
Код приложения (основные классы)
CarBean.java
package beans; import jakarta.ejb.Singleton; import lombok.Getter; import modules.dataObjects.CarsShop; import modules.plugins.FileHandler; import modules.plugins.JsonHandler; import java.util.ArrayList; import java.util.Objects; @Singleton public class CarBean { @Getter private ArrayList<CarsShop> Cars; private final FileHandler fileHandler = new FileHandler(); { try { Cars = JsonHandler.parseJsonArray(fileHandler.getFile(), ArrayList.class, CarsShop.class); } catch (Throwable throwable) { Cars = null; } } public ArrayList<CarsShop> findCarByField(Object Field) { ArrayList<CarsShop> SearchCarList = new ArrayList<>(); for(CarsShop car : this.Cars) { if(checkForCompliance(car, Field)) { SearchCarList.add(car); } } return SearchCarList; } private boolean checkForCompliance(CarsShop Car, Object Field) { return Objects.equals(Car.getTsena(), Field.toString()) || Objects.equals(Car.getCategory(), Field.toString()) || Objects.equals(String.valueOf(Car.getGod()), Field.toString()) || ((Car.isStatus() && Objects.equals(Field.toString(), "В наличии")) || (!Car.isStatus() && Objects.equals(Field.toString(), "Нет в наличии"))); } }
HTMLGenerator.java
package modules.plugins; import modules.dataObjects.CarsShop; import java.util.ArrayList; public class HTMLGenerator { public static String getHtmlTable(ArrayList<CarsShop> CarList) { StringBuilder htmlText = new StringBuilder((CarList.size() == 0) ? SpecialNames.ErrorFlag.get() : ""); for (CarsShop car : CarList) { htmlText.append("<tr id = '").append(CarList.indexOf(car)).append("'>") .append("<td>").append(car.getCategory()).append("</td>") .append("<td>").append(car.getTsena()).append("</td>") .append("<td>").append(car.getGod()).append("</td>") .append("<td>").append(car.getClasss()).append("</td>") .append("<td>").append(car.getMarka()).append("</td>") .append("<td>").append((car.isStatus()) ? "В наличии" : "Нет в наличии").append("</td>") .append("</tr>"); } return htmlText.toString(); } }
CarServlet.java
package servlets; import beans.CarBean; import jakarta.ejb.EJB; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import modules.plugins.HTMLGenerator; import modules.plugins.Paths; import modules.plugins.SpecialNames; import java.io.IOException; public class CarServlet extends HttpServlet { @EJB CarBean bean; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute(SpecialNames.CarCatalogAttribute.get(), HTMLGenerator.getHtmlTable(bean.getCars())); getServletContext().getRequestDispatcher(Paths.CarWebPage.Name).forward(request,response); } @Override protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { bean.getCars().remove(Integer.parseInt(request.getParameter(SpecialNames.IdParameter.get()))); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); String answer = HTMLGenerator.getHtmlTable(bean.findCarByField(request.getParameter(SpecialNames.FieldParameter.get()))); response.getWriter().println((answer.equals(SpecialNames.ErrorFlag.get())) ? SpecialNames.ErrorFlag.get() : answer); } }
Запуск:
http://localhost:8080/Lab2_war_exploded/cars
Результат выполнения программы:
Рисунок 1 - Программа
Рисунок 2 – Вводим марку машины
Рисунок 3 - Вывод владельца и машине, при введённой марке машины
Теоретические сведения
Enterprise JavaBeans (также часто употребляется в виде аббревиатуры EJB) – спецификация технологии написания и поддержки серверных компонентов, содержащих бизнес-логику. Является частью Java EE.
Session beans - используется для построения бизнес-логики, которая может быть вызвана программным клиентом через локальный, удаленный или веб-интерфейс обслуживания клиентов.
Stateful-бины автоматически сохраняют свое состояние между разными клиентскими вызовами. Типичным примером stateful-бина является корзина в интернет-магазине.
В качестве session bean может выступать обычный класс Java, но он должен удовлетворять следующим условиям:
1. Он должен иметь как минимум один метод;
2. Он не должен быть абстрактным;
3. Он должен иметь конструктор по-умолчанию;
4. Методы не должны начинаться с «ejb» (например ejbBean, ejbGoAtHome);
5. Свойства класса должны быть объявлены примитивами или реализовывать интерфейс Serializable.
Entities – это сущности каких то объектов и в EJB оно является хранилищем данных на период жизненного цикла Entity.
Entities является свое-родным отображением таблиц в БД.
Stateless - говорит контейнеру, что класс будет stateless session bean. Для него контейнер обеспечит безопасность потоков и менеджмент транзакций. Дополнительно, вы можете добавить другие свойства, например прозрачное управление безопасностью и перехватчики событий;
Local - относится к интерфейсу и говорит, что bean реализующий интерфейс доступен локально
Remote - относится к интерфейсу и говорит, что bean доступен через RMI (Remote Method Invocation)
EJB - применятеся в коде, где мы используем bean.
Stateful - говорит контейнеру, что класс будет stateful session bean.
Remove - опциональная аннотация, которая используется с stateful бинами. Метод, помеченный как Remove говорит контейнеру, что после его исполнения нет больше смысла хранить bean, т.е. его состояние сбрасывается. Это бывает критично для производительности.
Entity - говорит контейнеру, что класс будет сущностью БД
Table(name="...") - указывает таблицу для маппинга
Id, Column - параметры маппинга
В качестве session bean может выступать обычный класс Java удовлетворяющий следующим условиям:
иметь как минимум один метод
не должен быть абстрактным
иметь конструктор по-умолчанию
методы не должны начинаться с "ejb" (например ejbCreate, ejbDoSomething)
| 2371 |
| В амбарах памяти не отделить зерна от плевел |