Материал: лаба 2 отчет Рушева

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Министерство образования

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра экономической информатики

Лабораторная работа №2

Enterprise JavaBeans

Вариант 20

Выполнила студент гр. 972303

Рушева М. В.

Проверил Тумаш Д. Е.

Минск, 2022

Задание

  1. Машины (марка модель, цена, класс, год)

    1. Редактирование информации о машине(кроме марки и года)

    2. Вывод владельца и машине, при введённой марке машины

Код приложения (основные классы)

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="...") - указывает таблицу для маппинга

  • IdColumn - параметры маппинга

В качестве session bean может выступать обычный класс Java удовлетворяющий следующим условиям:

  • иметь как минимум один метод

  • не должен быть абстрактным

  • иметь конструктор по-умолчанию

  • методы не должны начинаться с "ejb" (например ejbCreate, ejbDoSomething)