МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра ВТ
ОТЧЕТ по лабораторной работе №8
по дисциплине «Распределенные системы» Тема: Enterprise Java Beans
Студенты гр. 8308 |
|
Треско М.Ю. |
|
|
Сергеев В.С. |
Преподаватель |
|
Бекенева Я.А. |
Санкт-Петербург
2022
Цель работы
Познакомиться с EJB, разобрать принцип работы Enterprise приложения.
Основные теоретические положения:
Enterprise JavaBeans (EJB) — спецификация технологии написания и поддержки серверных компонентов, содержащих бизнес-логику. С точки зрения компонента EJB - это всего лишь надстройка над классом, описываемая с помощью аннотации. Существует три типа компонентов EJB:
· session beans - используется для описания бизнесс-логики приложения; · message-driven beans - так же используется для бизнесс-логики;
· entities - используется для хранения данных.
С точки зрения фреймворка EJB - это технология, предоставляющая множество готовых решений (управление транзакциями, безопасность, хранение информации и т.п.) для приложения.
Архитектура Enterprise-приложнеия представлена на рисунке 1.
Рисунок 1 – Архитектура Enterprise-приложнеия
2
EJB-компонента представляет из себя Java-класс, который реализует некоторую бизнеслогику. Все остальные классы в EJB-системе либо реализуют поддержку клиент/сервер взаимодействий между компонентами, либо реализуют некоторые сервисы для компонент.
EJB-контейнер - это то место, где «живет» EJB-компонент. EJB-контейнер управляет жизненным циклом EJB-компонент, разработчик только использует соответствующие методы EJB-контейнера. Как правило, в одном EJBконтейнере живет несколько однотипных EJB-компонент.
Клиентские приложения вызывают методы на удаленных EJBкомпонентах через EJBобъект, который реализует лишь бизнес-интерфейс для EJB-компоненты, являясь, в некотором смысле, «промежуточным» звеном между клиентом и EJB-компонентой (EJBинтерфейс).
В качестве поясняющего примера рассмотрим видеомагнитофон. Предположим, что он является EJB-компонентой. EJB-объект, в таком случае, является аналогом пульта управления этого магнитофона. У пульта управления есть все те же кнопки, что и на передней панели видеомагнитофона. Нажатие кнопки на пульте управления приведет к такому же эффекту, что и нажатие кнопки, расположенной на самом магнитофоне, но в результате только магнитофон, а не пульт управления, начнет выполнять функции.
Приложение-клиент соединяется с EJB-сервером и посылает ему запрос на создание бина для обработки своих запросов. Сервер отвечает на такой запрос созданием объекта на стороне сервера (экземпляр EJB-компоненты) и возвращает клиенту прокси-объект (EJBобъект), чей интерфейс совпадает с интерфейсом созданной EJB-компоненты и чьи методы перенаправляют вызовы собственно экземпляру компоненты. После этого приложение-клиент работает с EJB-объектом как с локальным объектом, даже и не подозревая, что всю работу выполняет не EJB-объект, а удаленная компонента на сервере. Необходимо заметить, что созданием и удалением EJB-компонент на сервере занимается EJB-контейнер.
3
Задание на лабораторную работу
Продемонстрировать работу Enterprise Java Bean.
Код программы
Таблица 1 - Исходный код бина
HelloWorldBean.java
package modules;
import javax.ejb.Stateless;
//Сеансовый компонент без сохранения состояния
@Stateless
public class HelloWorldBean implements IHelloWorld
{
@Override
public String sayHello(String name) { if (name == null)
name = "///Enter your name to see a proper dialog!///";
String a = "- This webpage does truly use Enterprise JavaBeans, and for a reason, you feel it in the air, " + name;
return a;
}
}
IHelloWorld.java
package modules;
import javax.ejb.Local;
4
@Local
public interface IHelloWorld
{
public String sayHello(String name);
}
Таблица 2 - Исходный код веб-приложения
ServletHello.java
package servlets;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException; import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import modules.IHelloWorld;
public class ServletHello extends HttpServlet { @EJB
private IHelloWorld hello;
private static final long serialVersionUID = 1L;
5
public ServletHello() { super();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String answer = hello.sayHello(request.getParameter("name")); request.getSession().setAttribute("answer", answer); RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); rd.forward(request, response);
} catch (Exception e) {
throw new ServletException(e.getMessage());
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub doPost(request, response);
}
}
Index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
6
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>page using EJB</title>
</head>
<body>
- Hello? What does this page do? <br>
<form action="sayHello" method="post">
- Who asks? <br> - <input type="text" name="name" value="" /> <input type="submit" value="OK" /> <br>
<p>${answer}</p> </form>
</body>
</html>
7
Таблица 3 - Исходный код клиентского приложения
Application.xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" id="Application_ID" version="6">
<display-name>lab8-app</display-name> <module>
<web> <web-uri>lab8-web.war</web-uri> <context-root>lab8-web</context-root> </web>
</module>
<module> <ejb>lab8-module.jar</ejb> </module>
</application>
Пример работы
Рисунок 2 – Пример работы программы
8
Рисунок 3 – Пример работы программы при пустом поле
Вывод
В ходе выполнения лабораторной работы были получены навыки написания приложений, построенных по Enterprise модели.
9