Application server і enterprise java beans

Я дуже сподівався, що зможу обійтися без установки будь-якого IDE, але на жаль, час не стоїть на місці і не користуватися такого роду системами вже не виходить. Для такого роду додатків доводиться робити дуже багато ручної роботи, яка може бути охарактеризована таким виразом «за деревами лісу не видно».

Я постараюся не залишати вас у невіданні щодо деяких питань - навіть повністю згенерований код вимагає розуміння. Але це вже як вийде.

Я пропоную закачати достатньо потужний пакет - (добре, що він безкоштовний) - IDE NetBeans 6.0. Закачати пакет можна за ссилкеNetBeans 6.0

Дуже раджу (і наполегливо прошу) закачувати повну версію. Так, вона не маленька - 169 Мб - але Ви не пошкодуєте. До того ж я все приклади буду проводити саме під такою версією.

В принципі можна закачати варіант «Web Java EE », але все-таки цикл статей буде постійно зростати. І можливо ми дійдемо до SOA (Service Oriented Architecture). Це зовсім молода технологія, яка буде розвиватися в найближчі роки. І якщо Ви встигнете зрозуміти основні принципи і ознайомитеся з основними моментами, то Ваш професійний ріст зробить різкий стрибок.

Установка NetBeans не повинна викликати у вас проблем, тому на цьому моменті я не буду зупинятися. Єдине зауваження по установці - БУДЬТЕ уважні при завданні параметрів для GlassFish - я маю на увазі логін / пароль. В принципі може взяти парметри за замовчуванням:

Application server і enterprise java beans

GlassFish - це Application Server, який йде разом з NetBeans і є розробкою Sun. GlassFish - цілком современнийApplication Server, який підтримує новітні технології Ісам останні специфікації від Sun. Так що користуйтеся і отримуйте задоволення.

І ще одне - моя вам порада - створіть пароль для користувача root в MySQL - це не складно. Треба буде запустити ніжепріведеннийSQL і більше ніяких турбот.

GRANT ALL ON students. * TO 'root' @ '%' IDENTIFIED BY 'root';

Пароль став = root

Я вже не раз стикався. що деякі системи не дуже розуміють ситуацію, коли пароль відсутній. Так що щоб уникнути проблем зробимо це нескладне дію.

А тепер ми поговоримо про те, що ж таке Application Server.

Саме таке завдання бере на себе Appication Server. На сьогодні Java є напевно найрозвиненішою системою, під яку создажются такого роду Application Server'а.

Компанія Sun створила специфікацію, яка описує ті сервіси й ті правила, за якими AppServer повинен працювати.

На перших порах я Вам раджу сприймати AppServer як якесь сховище класів, які просто зареєстровані на ньому спеціальним чином під іменами (так-так, це той самий JNDI з яким ми стикалися деякий час назад). Раніше для реєстрації потрібно створювати спеціальний XML-файл - ejb-jar.xml. Вже тоді існували спеціальні засоби для автоматизації цього процесу. Для нової специфікації все стало ще простіше. У чому Ви скоро переконаєтеся.

Клієнтську програму запитує у AppServer'а клас по імені, отримує його (якщо він звичайно є) і використовує.

І виконується цей клас під керуванням AppServer'а. Саме AppServer бере на себе задачу запуску класу в окремому тред, бере на себе задачу поставки всіляких ресурсів - коннект до бази даних, виклики Web-Services і багато іншого. Клієнт отримує посилання на інтерфейс, за яким ховається справжній клас. І це посилання клієнт отримує у ApplicationServer'а.

Можливо ми ще повернемося до обговорення можливостей AppServer'ов, але тут слів поки достатньо.

Настав час поговорити трохи про додатки, які виконуються під управлінням AppServer'а. А саме про Enterprise JavaBeans - EJB.

Ми будемо працювати з EJB 3.0. Специфікація для EJB 3.0 стала більш зрілою і більш зручною для роботи. Якщо Вам захочеться ознайомитися з більш старими специфікаціями, то заходите на сайти в Інтернеті і шукайте інформацію. Але це вже виходить за рамки даного циклу статей.

Сам по собі бін не представляє з себе будь-яких складнощів - це просто клас, який зареєстрований на AppServer'е і володіє певним набором характеристик.

Існує три види бінов:

  1. Entity Bean - раніше саме вони відповідали за збереження даних у базі даних. Але сьогодні вони не змогли довести свою необхідність. Їх замінили на більш зручні варіанти. Назва в общем-то ще залишилося, але воно показує вже на класи. які є «відображенням» даних з таблиці в поля класу. Це дуже нагадує Hibernate за своєю ідеологією (для тих, хто знайомий з Hibernate)
  2. Session Bean - це класи, які виконують логіку. Вони дуже важливі і потрібні.
  3. Message-Driven Bean - ці біни викликаються тоді, коли приходить якесь повідомлення. Про них ми поки говорить не будемо. Може бути в майбутньому.

Application Server також включає в себе інтерфейс, який реалізує бін. І саме інтерфейс буде представлений клієнту. А сам бін буде захований в надрах сервера.

Що ще важливо зрозуміти, так це способи виклику бінов. Адже по суті вони всі тихо і мирно лежать в межах AppServer'а, який їх і викликає за завданням від клієнтів. У найпершій специфікації було прийнято рішення, що кожен клієнт є окремою Java-машиною. Але такий виклик дуже «дорогий». Він вимагає якогось механізму, який дозволить передавати дані з однієї JAVA-машини в іншу. Дуже ресурсномістке рішення. Тому було прийнято рішення, що треба створити два типи викликів - локальний і віддалений (Local і Remote).

Локальний виклик відбувається тоді, коли клієнт теж є по суті біном на тому ж AppServer'е. Віддалений - як і раніше, це інша Java-машина.

У цій статті не ставиться завдання детально розповісти про можливості і теоретичних побудовах - тут ми зосередимося на практиці. Тому відкладемо поки складні книжки по EJB в сторону і напишемо наше перше додаток.

РазработкаEnterpriseпріложенія

Ми з вами почнемо фактично з нуля. Так Так. Ви можете забути про свій чудовий код і залишити тільки базу даних MySQL, яка нам знадобиться.

Можливо у нас вийде використовувати JSP і деяку логіку з наших сервлетів. Все інше зміниться досить сильно.

На сьогодні в якійсь мірі деяке поняття Enterprise-додатки склалося. Звичайно, вміст таблиць та й самі таблиці, бізнес-логіка - справа суто особиста. Але є кілька моментів, які є загальними. Їх ми і розглянемо. А трохи пізніше і увідмі в нашому «Відділі кадрів».

Основними складовими Enterprise-додатки є:

У цій частині ми не будемо створювати додаток цілком. По-перше - занадто багато матеріалу. А по-друге - у мене є таємне бажання, щоб Ви самі спробували щось зробити. Можливо, що на той час як буде написана частина де ми зробимо наше додаток більш-менш робочим, Ви самі вже його напишете. Мені буде дуже приємно про це почути.

Ну, давайте запустимо NetBeans.

Якщо Ви зробили це перший раз, то перед Вами з'явиться чудова картинка.

Application server і enterprise java beans

Не будемо довго обговорювати переваги і недоліки NetBeans. Візьмемо бика за роги.

1. Вибираємо пункт меню File-> New Project ...

У діалоговому вікні в дереві Categories вибираємо Enterprise. У списку Projects Вибираємо перший пункт -Enterprise Application. Тиснемо кнопку Next

Application server і enterprise java beans

2. Вводимо ім'я проекту StudentsApp і тиснемо кнопку Finish.

Зверніть увагу на шлях до проекту і відмічені пункти "Create EJB Module" і "Create Web Application Module".

Як Ви можливо вже здогадалися це ті самі частини, про які я згадував вище - Application Server і Web Server.

Application server і enterprise java beans

3. У вас повинен з'явитися ось такий екран. Я Вам раджу походити по дереву проекту. Просто з цікавості.

Application server і enterprise java beans

Вже добре видно, що наше Enterprise-програма включає в себе два модулі - EJB і WEB. Я дуже раджу звикати думати про них постійно
Поїхали далі. Тепер ми створимо два класи (Entity) які будуть «відображенням» наших таблиць - groups і students. Для цього клацніть правою кнопкою миші на проекту StudentsApp-ejb, вибирайте New-> Entity Classes from Database. У вас відкриється діалогове вікно в якому треба буде вибрати DataSource. Потрібного нам DataSource звичайно ж поки немає, тому вибираємо пункт NewData Source (див. На малюнок)

Application server і enterprise java beans

У цьому випадку нам знову запропонують діалогове вікно, де потрібних нам параметрів знову ж немає і знову ж нам треба вибрати NewDatabase Connection.

Application server і enterprise java beans

І знову NetBeans допомагає нам показуючи чергове віконце. Тут ми встановимо вже потрібні нам параметри для з'єднання.

УВАГА. Встановіть прапорець на чекбоксі "Remember password" - інакше під'єднання не вийде.

Application server і enterprise java beans

Якщо Ви не помилилися з набором, то повинно бути видано ось таке вікно (вірніше це те ж саме вікно, просто наступна закладка)

Application server і enterprise java beans

Натиснемо OK, потрапимо в віконце створення Data Source, де будуть вказані параметри для нашого джерела даних. Знову тиснемо OK.

Якщо Ви не допустили помилок, то перед Вами дожно з'явитися ось таке ось віконце

Application server і enterprise java beans

Переносимо обидві таблиці направо і тиснемо Next.

Тепер перед Вами ось така ось інформація. Зверніть увагу - я не зняв галочку в чекбоксі "Generate Named Query Annotation for Persistent Fields".

Нам такого роду запити не будуть потрібні (у всякому разі поки що), але від нас не убуде J

Також зверніть увагу на ім'я пакета, которе я ввів. Ви можете звичайно ж використовувати своє власне, але тоді Вам доведеться це враховувати.

Не раджу також змінювати назву класів - проблема в тому, що слово Group має важливе значення і використовувати його не рекомендується. Тому залишаємо у множині. До речі це нагадування нам (вже вкотре) не використовувати «підозрілі» слова для імен. «Підозрілі» - це значить. що вони можуть бути використані як keywords в якомусь мові. Загалом, використовуйте префікси панове

Application server і enterprise java beans

Тиснемо кнопку Finish і бачимо, що у нас з'явилося два класи - Groups і Students. Я не буду приводити їх код. По-перше не хочеться захаращувати текст статті, а по-друге - так в общем-то нам він поки мало цікавий. Він згенерувати і поки цього достатньо.

Також я звернув би Вашу увагу на файл sun-resources.xml (пошукайте його в дереві) - там ви побачите наші чудові параметри. Якщо уважно подивитися, то ми побачимо і URL для з'єднання, і логін і пароль.

Але це ще не все, що нам необхідно для роботи з базою даних. У EJB 3.0 з'явилося таке поняття як Persistence Unit. По суті це XML файл, який описує параметри для під'єднання до бази даних. Після того, як ми його створимо поговоримо і про нього.

Отже, знову натискаємо праву кнопку миші на StudentsApp-ejb, вибираємо New-> Other (швидше за все у Вас не буде пункту PersistenceUnit, але якщо він є - вибирайте його відразу). У віконці, що з'явилося вибираємо Persistence і Persistence Unit. Тиснемо Next.

Application server і enterprise java beans

У наступному вікні візарду ми побачимо картинку, яка представлена ​​нижче. Зверніть увагу на встановлені параметри. По-перше це Data Source. Він вибирається зі списку і дорівнює тому, який ми створили раніше. По-друге група "Table Generation Strategy" встановлена ​​в None. Таблиці у нас вже є, так що нам не потрібно їх створювати заново.

Для тих, хто вже знає, що таке Hibernate - він теж є в списку Persistence Provider. Але про нього іншим разом. Поки візьмемо варіант за замовчуванням - TopLink.

Application server і enterprise java beans

Відразу після створення Ви можете подивитися на файл, який створився - подивіться, пошукайте знайомі риси.

давайте поміркуємо над тим, що ж ми таке створили. У двох словах ми зробили наступне:

  1. Створили файли, в яких зберігається інформація для підключення до бази даних. Що дуже важливо. Тепер ця інформація буде використовуватися AppServer'ом для роботи з базою. І нам про це більше хвилюватися не треба.
  2. Створили два класи, завдання яких - зберігати дані з таблиці. Тобто кожен рядок з таблиці groups буде пердставлена ​​об'єктом класу Groups до якого ми можемо звертатися по полях. Пам'ятайте нашу роботу зі створення set / get методів. Тепер це все сдалал автоматично. І хоча це заслуга NetBeans, а не EJB, все одно приємно.

Що нам залишилося для того, щоб повністю відновити логіку нашого застосування. Я вважаю. що вже болшинство з вас здогадалося - треба створити клас managementSystem в якому будуть потрібні нам методи по редагуванню і отримання даних. Давайте і створимо його.

Правда тепер це буде не просто клас, а клас SessionBean, який буде працювати під управлінням AppServer'а. І користуватися всіма благами цього.

Знову перша кнопка на StudentsApp-ejb, вибираємо New-> Session Bean ...

Знову перед нами діалогове вікно, в якому ми наберемо ім'я класу ManagementSystem. За замовчуванням нам буде запропоновано вибрати тільки Local-інтерфейс. Пропоную поки залишити як є - може у нас вистачить пороху дістатися до створення окремого удаленногоJava-клієнта, але тоді нам ніхто не завадить його створити.

Application server і enterprise java beans

Ми отримаємо відразу два файли:

  1. Безпосередньо Session Bean - ManagementSystemBean.java, який реалізує (реалізовуватиме нашу логіку)
  2. Локальний інтерфейс ManagementSystemLocal.java

Давайте тепер створимо один метод - getStudents. Він буде повертати нам одного студента по його ID.

З'явитися чергове діалогове вікно, в якому ми введемо ім'я методу, тип значення і додамо вхідний параметр (Використовуйте кнопку Add праворуч). Введіть ім'я та тип нашого параметра.

Application server і enterprise java beans

Але поки коду для звернення до бази даних у нас немає. Так як же ми будемо отримувати нашого гарного студента. Виявляється це теж дуже нескладно.

І ось тепер я представлю код нашого класу ManagementSystemBean.java

Анотація @PersistenceContext по суті створює контекст в рамках якого може бути проведена робота з базою даних. Sunпостарался якнайдалі «відсунути» розробників від писанини коду і замінив всілякі виклики для підключення на таку ось просту форму.

Клас EntityManager - це інтерфейс (якщо Ви подивіться в JEE API). Як ми вже знаємо інтерфейс не може нічого робити. А значить за ним криється справжній клас. Який вміє працювати з базою даних.

Значить наша анотація робить досить багато речей: вона створює і ініціалізує об'єкт певного класу (причому цей об'єкт створюється шляхом звернення до AppServer'у), який реалізує інтерфейс EntityManager. Якщо ви уважно подивитеся файлpersistence.xml (дивіться варіант не коду XML, а Design), то побачите пункт Persistence Provider - то реалізація інтерфейсу. За замовчуванням використовується TopLink.

В общем-то основні кроки для того, щоб запустити наш додаток на AppServer'у ми зробили. Залишилося тільки додати WEB-інтерфейс у вигляді простого сервлета - так хто нам заважає?

Давайте зробимо дуже просте WEB-додаток. Нехай у нас на головній сторінці буде форма для введення studentID і кнопка для виклику сервелета, який покаже нам дані про студента.

Відкрийте проект StudentsApp-war і знайдіть там файл index.jsp. Ми внесемо в нього трохи змін.

Тепер він буде виглядати ось так:

<%@page contentType=»text/html» pageEncoding=»UTF-8″%>