T.M. SoftStudio

feci quod potui, faciant meliora potentes

Купить полную версию книги "Среда разработки Eclipse 4: Руководство разработчика"

Разработка Web-приложений на основе платформы WTP

Web + EJB

Создадим EJB-компонент, который вместо сервлета будет взаимодействовать с базой данных.

Для развертывания EJB-компонента необходим EJB-контейнер, поэтому изменим среду выполнения с сервера Tomcat на сервер GlassFish v3. Для этого в представлении Server среды Eclipse нажмем правой кнопкой мышки и в контекстном меню выберем команду New | Server. В окне мастера нажмем на ссылку Download additional server adapters и выберем пункт GlassFish Tools, нажмем кнопки Next и Finish.

После установки GlassFish-адаптера в представлении Server среды Eclipse нажмем правой кнопкой мышки и в контекстном меню выберем команду New | Server.

В окне мастера в разделе GlassFish выберем сервер GlassFish и нажмем кнопку Next.

Нажмем на ссылку Installed JRE preferences и кнопкой Add добавим устаовленный набор JDK, флажок которого отметим, нажмем кнопку OK и в списке JRE выберем добавленный набор JDK, кнопкой Browse определим каталог для установки сервера GlassFish и нажмем кнопку Install Sever.

После установки сервера GlassFish нажмем кнопки Next и Finish.

Создадим проект Web-приложения с помощью мастера Dynamic Web Project с целевой средой выполнения GlassFish.

В представлении Data Source Explorer создадим соединение с базой данных HSQLDB.

Создадим таблицу HSQLDB-базы данных, используя SQL-файл (листинг 14.4).

В разделе Project Facets добавим свойство JPA к проекту Web-приложения и создадим Entity-компонент из таблицы базы данных.

Изменим конфигурационный файл persistence.xml согласно листинга 14.5 и добавим библиотеку hsqldb.jar, содержащей драйвер базы данных, в папку WebContent\WEB-INF\lib проекта.

Для создания EJB-компонента в окне Project Explorer среды Eclipse нажмем правой кнопкой мышки на узле Java-пакета проекта и в контекстном меню выберем команду New | Other | EJB | Session Bean (EJB 3.x), нажмем кнопку Next, введем имя класса и нажмем кнопку Finish (рис. 14.12).

Рис. 14.12. Мастер создания EJB-компонента

Изменим код EJB-компонента согласно листинга 14.9.

Листинг 14.9. Код класса ApplicationEJB

package application;

import java.util.List;

import javax.ejb.LocalBean;

import javax.ejb.Stateless;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

@Stateless

@LocalBean

public class ApplicationEJB {

public ApplicationEJB() {

}

public List<Item> getItems() {

EntityManagerFactory emf = Persistence.createEntityManagerFactory("WebApplication");

EntityManager em = emf.createEntityManager();

List<Item> itemList = em.createNamedQuery("Item.findAll", Item.class).getResultList();

em.close();

emf.close();

return itemList;

}}

Создадим сервлет ApplicationServlet с кодом согласно листинга 14.10.

Листинг 14.10. Код класса ApplicationServlet

package application;

import java.io.IOException;

import java.util.Map;

import javax.ejb.EJB;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/ApplicationServlet")

public class ApplicationServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

@EJB ApplicationEJB ejb;

public ApplicationServlet() {

super();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

Map<String, String[]> parameters = request.getParameterMap();

String key="data";

String value=parameters.get(key)[0];

if (value.equals("undefined")){

response.getWriter().write("<h1>What do you want?</h1>");

}

if (value.equals("data")){

request.setAttribute("items", ejb.getItems());

request.getRequestDispatcher("/data.jsp").forward(request,response);

}}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}}

Создадим JSP-страницы index.jsp и data.jsp с кодом согласно листингов 14.1 и 14.8.

Теперь при запуске Web-приложения командой Run As | Run on Server и выборе переключателя My Data на странице приветствия приложения, после нажатия кнопки Submit, с базой данных будет взаимодействовать EJB-компонент ApplicationEJB приложения.

Другой способ соединения EJB-компонента с базой данных – использование источника данных сервера GlassFish.

Сервер GlassFish будет установлен вместе с базой данных Derby, соединение с которой отобразится в представлении Data Source Explorer.

Для запуска базы данных Derby воспользуемся инструментом startNetworkServer.bat каталога glassfish4\javadb\bin.

В представлении Data Source Explorer нажмем правой кнопкой мышки на узле Database Connections | A Sample JavaDB Database и выберем команду Connect.

Затем выберем команду Open SQL Scrapbook и создадим таблицу базы данных sun-appserv-samples, используя листинг 14.4.

Отсоединимся от базы данных и в представлении Server среды Eclipse нажмем правой кнопкой мышки на узле сервера GlassFish и в контекстном меню выберем команду Start.

После запуска сервера в контекстном меню выберем команду GlassFish | View Admin Console.

На Web-странице консоли сервера (http://localhost:4848/common/index.jsf) в разделе JDBC | JDBC Connection Pools можно будет увидеть уже созданный пул соединений DerbyPool (рис. 14.13).

Рис. 14.13. Конфигурация соединения с базой данных Derby в сервере GlassFish

В разделе JDBC | JDBC Resources увидим, что источник данных jdbc/__default относится к соединению DerbyPool.

Теперь для соединения с базой данных библиотека derbyclient.jar, содержащая драйвер соединения, в папке WebContent\WEB-INF\lib проекта не нужна.

Изменим конфигурационный файл persistence.xml и код класса ApplicationEJB согласно листингов 14.11 и 14.12.

Листинг 14.11. Конфигурационный файл persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="WebApplication" transaction-type="JTA">

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

<jta-data-source>jdbc/__default</jta-data-source>

<class>application.Item</class>

</persistence-unit>

</persistence>

Листинг 14.12. Код класса ApplicationEJB

package application;

import java.util.List;

import javax.ejb.LocalBean;

import javax.ejb.Stateless;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import javax.persistence.PersistenceContext;

@Stateless

@LocalBean

public class ApplicationEJB {

@PersistenceContext (unitName = "WebApplication")

private EntityManager em;

public ApplicationEJB() {

}

public List<Item> getItems() {

List<Item> itemList = em.createNamedQuery("Item.findAll", Item.class).getResultList();

return itemList;

}}


Application Client