Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Краденные лабы / 8308_Треско_Сергеев_ЛР№8

.pdf
Скачиваний:
1
Добавлен:
08.04.2023
Размер:
239.63 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра ВТ

ОТЧЕТ по лабораторной работе №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