Когда я закончил первую часть, посвященную EJB, то понял, что чудо, которое Вы наблюдали, могло завести в тупик. Я и сам такое не очень люблю. Чтобы там всякого не генерилось – надо понимать, что это и где. Потому что искать ошибки придется все равно. И искать их надо осознанно. А для сознательного поиска надо понимать что и где искать. И исправлять что-то надо будет.

 

Поэтому здесь мы постараемся более глубоко покопаться в недрах GlassFish и EJB – чтобы просто чудесные первращения стали более понятны и прозрачны для Вашего понимания.

Application Server, Connection Pool и DataSource

Давайте начнем с того, что покопаемся в том, как наши усилия по созданию коннекта к базе данных отразились на состоянии сервераGlassFish.
Откройте среду NetBeans и выберите пунтк меню – Windows->Services. Перед Вам откроется окошко, где перечислены ресурсы, которые зарегестрированы в NetBeans. Я специально вырезал нужную часть и открыл все нужные нам ветки в дереве. Посмотрите на него внимательно.

Во-первых под узлом Databases Вы можете наблюдать коннект к базе, который мы с Вами создавали – а именноjdbc:mysql://localhost:3306/students.
Этот пункт конечно занимательный. Но еще более занимательным выглядит ветка – GlassFish V2->Resources.

Здесь мы наблюдаем две части:
1.    JDBC->Connection Pools.
Посмотрите внимательно и Вы увидите, что у нас есть пул коннектов mysqlPool. Он создался автоматически тогда, когда мы создавали коннект к базе. Application Server использует пулы коннектов – т.е. некоторый массив (коллекцию) уже готовых к употребелению коннектов к базе данных. Как Вы скорее всего уже знаете, подсоединение к базе достаточно долгий процесс и поэтому используется технология пулов – т.е. заранее создаются несколько коннектов к базе, которые по мере надобности используются. Как только потребовался коннект к базе пул мгновенно выдает требуемое.

2.    JDBC->JDBC Resources
Здесь мы видим тот DataSource, имя которому мы давали сами – jdbc/Students. Кликните на нем правой кнокпой мыши и выберите пункт Properties. Перед Вами откроется окно, в котором Вы сможете увидеть, что данный DataSource использует пул коннектовmysqlPool.

 

Надеюсь, что Вам стало несколко веселее и более понятно. Еще более приятно то, что на самом деле все эти пулы коннектов и сами коннекты Вы можете создавать сами с помощью административной консоли для сервера. Запустите наше приложение (или используйте правую кнопку мыши на GlassFish – там вы увидите пункт Start – если сервер не запущен). А чуть ниже в выпавшем меню Вы увидите пункт “View Admin Console”. Если сервер запущен и мы выбираем этот пункт, то перед Вами откроется броузер, в котором надо будет ввести логин и пароль, которые в моем случае я предлагал оставить по умолчанию – admin/adminadmin.

И вот перед нами пульт управления нашим Application Server’ом.

Побродите по этим экранам – там можно найти много интересного. На рисунке я специально открыл и наше приложение – StudetnsApp. И список коннектов и пулов.

Если Вы любите копать еще глубже, то зайдите в директорию с установленным GkassFish. По умолчанию он уставнолен в директории

C:\Program Files\glassfish-v2\

Зайдите еще ниже – вот сюда – domains\domain1\. Здесь лежит интересный файл config\domain.xml. Поищите там строку Studetns.
Вы найдете приложение «StudentsApp» в очень любопытном месте

<applications>
<j2ee-application … name=»StudentsApp»>

Посмотрите в этой  строке куда указывает полный путь до приложения. У меня например сюда:

C:\Documents and Settings\ASaburov\My Documents\NetBeansProjects\StudentsApp\dist\gfdeploy

Зайдем ? Мне было очень любопытно – что там знакомого можно найти.
А там мы найдем два каталога с приложениями для EJB и для WEB. Не знаю как на счет EJB, но WEB по своей структуре Вам должен быть очень знаком.

Вернемся к файлу domain.xml
Чуть ниже предыдущей строки найдем такое

<jdbc-resource enabled=»true» jndi-name=»jdbc/Students» object-type=»user» pool-name=»mysqlPool»/>

Да вот же он родимый DataSource.
А еще ниже

<jdbc-connection-pool …>
<property name=»databaseName» value=»students»/>
<property name=»serverName» value=»localhost»/>
<property name=»User» value=»root»/>
<property name=»Password» value=»root»/>
<property name=»URL» value=»jdbc:mysql://localhost:3306/students»/>
<property name=»portNumber» value=»3306″/>
<property name=»driverClass» value=»com.mysql.jdbc.Driver»/>
</jdbc-connection-pool>

Вот они где все спрятались. Это те самые конфигурационные файлы, в которых все хранится – наш пулы, коннекты, приложения.

Также я Вам советую посмотреть в директорию generated\xml\j2ee-apps\StudentsApp

И там, о чудо, найдется файл web.xml (чуть глубже по директориям). И ejx-jar.xml – это файл описания нашего бина. Давайте посмотрим на него чуть ближе

<?xml version=»1.0″ encoding=»UTF-8″ standalone=»no»?>

<ejb-jar xmlns=»http://java.sun.com/xml/ns/javaee» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» metadata-complete=»true» version=»3.0″ xsi:schemaLocation=»http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd»>

<enterprise-beans>
<session>
<display-name>ManagementSystemBean</display-name>
<ejb-name>ManagementSystemBean</ejb-name>
<business-local>students.logic.ManagementSystemLocal</business-local>
<ejb-class>students.logic.ManagementSystemBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<persistence-context-ref>
<persistence-context-ref-name>students.logic.ManagementSystemBean/em</persistence-context-ref-name>
<persistence-context-type>Transaction</persistence-context-type>
<injection-target>
<injection-target-class>students.logic.ManagementSystemBean</injection-target-class>
<injection-target-name>em</injection-target-name>
</injection-target>
</persistence-context-ref>
<security-identity>
<use-caller-identity/>
</security-identity>
</session>
</enterprise-beans>
</ejb-jar>

Посмотрите, как интересно – здесь сгенерилось именно та информация, которая раньше набиралась вручную. Разве что часть <persistence-context-ref> в новинку. А все остальное – это тот самый ejb-jar.xml, о котором я упоминал в предыдущей части.
Давайте немного подробнее рассмотрим некоторые параметры.

<ejb-name> — это имя нашего бина, но не имя класса, а имя, по которому клиент будет искать его на AppServer’е.
По умолчанию имя совпадает с именем класса интерфейса. Но Вы можете сделать сове имя. Для этого достаточно рядом с аннотацией @Stateless написать параметр name. Вот так:

И теперь нам надо будет указать в сервлете, что ищем мы бин по такому вот имени. А значит в классе MyServlet.java будет вот такая строка

Если Вы остановите свое приложение, пересоберете и перезапустите с такими параметрами, то новый ejb-jar.xml будет содержать новое имя бина – ManagementSystem.
Посмотрите на таги <business-local> и <ejb-class>. Надо ли тут много объяснять ? Это же наш интерфейс, по которому будет обращаться клиент. А второй тэг указывает на реальный класс.
Я не знаю, как Вы относитесь к таким «похождениям» — но я лично люблю покопаться.
Это дает ощущение понимая того, как построена система изнутри. Что от нее можно ожидать. И как можно влиять на нее.
И теперь мы перейдем к заключительной части нашего знакомства с технологией EJB — Часть 13 — «Студенческий отдел кадров» в виде Enterprise-приложения

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.