Неактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зірка
 

Лекція 24. Технологія EJB для побудови розподілених систем

План

24.1. Компоненти JavaBeans

24.2. Технологія Enterprise JavaBeans

24.2.1. Призначення і цілі Enterprise JavaBeans

24.2.2. Сервіси, що забезпечуються EJB

24.2.3. Базова модель EJB

24.3. JavaBeans і EJB

24.1. Компоненти JavaBeans

JavaBeans — набір класів, написаних мовою Java, що відповідають певному набору правил. Вони використовуються для об'єднання кількох об'єктів в один (bean) для зручної передачі даних.

Сам bean (читається "бін" – боб) є програмним компонентом з визначеним інтерфейсам.

Специфікація SunMicrosystems визначає JavaBeans, як «універсальні програмні компоненти, якими можна візуально керувати за допомого інтерфейсу середовища розробки».

JavaBeans забезпечують основу для багаторазово використовуваних і модульних компонентів ПЗ. Компоненти JavaBeans можуть приймати різні форми, але найбільш широко вони використовуються в елементах графічного інтерфейсу користувача (на стороні клієнта). Одна з цілей створення JavaBeans — взаємодія із схожими компонентними структурами. Наприклад, Windows-програма, за наявності відповідного мосту або об'єкта-обгортки, може використовувати компонент JavaBeans так, ніби він є компонентом COM або ActiveX.

Правила опису JavaBean

Щоб клас міг працювати, як bean, він повинен відповідати певним визначеним угодам про імена методів, конструктор і поведінку. Ці угоди дають можливість створення інструментів, які можуть використовувати, заміняти і з'єднувати JavaBeans.

Клас повинен мати відкритий (public) конструктор без параметрів. Такий конструктор дозволяє інструментам створювати об'єкт без додаткових складностей з параметрами.

Властивості класу повинні бути доступні через методи get, set, is, які відповідають стандартним угодам про імена. Це дозволить інструментам автоматично визначати і оновлювати вміст bean'ів.

Клас повинен бути серіалізованим. Це дає можливість надійно зберігати та відновлювати стан bean незалежним від платформи і віртуальної машини способом.

Він не повинен містити ніяких методів обробки подій.

Нижче наведено приклад на мові Javaстворення класу PersonBean і його виклику з тестової програми TestPersonBean.java

Приклади

  // PersonBean.java

public class PersonBean implements java.io.Serializable

{

     private String name;

     private boolean deceased;

  // Default constructor (takes no arguments).

 public PersonBean() { }

public String getName() { return (this.name); }

public void setName(String name) { this.name = name; }

 // Different semantics for a boolean field (is vs. get)

 public boolean isDeceased() { return (this.deceased); }

 

 public void setDeceased(boolean deceased) { this.deceased = deceased; }

}

Створення об'єкту класу PersonBean:

// TestPersonBean.java

 public class TestPersonBean

 {

   public static void main(String[] args)

  {

   PersonBean person = new PersonBean();    

   person.setName("Bob");    person.setDeceased(true);

   // Output: "Bob [deceased]“

   System.out.print(person.getName());           System.out.println(person.isDeceased() ?    " [deceased]" : "");

   }

}

24.2. Технологія Enterprise JavaBeans

Технологія EnterpriseJavaBeans (EJB) описує модель компонент сторони сервера і стандартні підходи, які дозволяють розробникам створювати бізнес-компоненти, що називаються EJB, які будуть ізольовані від низькорівневого «службового коду», і повністю сфокусовані на забезпеченні бізнес-логіки.

Отже, Enterprise JavaBeans (EJB) — специфікація технології написання і підтримки серверних компонентів, що містять бізнес-логіку. Входить в пакет JavaEnterpriseEdition (JavaEE)

Модель EJB відділяє бізнес-логіку від низькорівневих функцій, дозволяючи розробникам не піклуватися про те, як у тому чи іншому випадку будуть реалізовані стандартні функції, наприклад, для передачі даних або обробки транзакцій.

Ця технологія переважно застосовується, коли бізнес-логіка потребує як мінімум один з наступних сервісів, а часто всі з них:

-                підтримка збереження даних; дані не повинні втратити цілісності навіть після зупинки програми; частіше за все досягається з допомогою використання бази даних;

-                підтримка розподілених транзакцій;

-                підтримка конкурентної зміни даних і багато поточність;

-                підтримка подій;

-                підтримка іменування і каталогів (JNDI);

-                безпека і обмеження доступу до даних;

-                підтримка автоматизованої установки на сервер;

-                віддалений доступ.

Кожний компонент EJB є набором Java класів із строго регламентованими правилами іменування методів. Бувають трьох основних типів:

об'єктні (Entity Bean);

сесійні (Session Beans), які бувають:

          - без стану (stateless);

          - з підтримкою поточного стану сесії (stateful);

керовані повідомленнями (Message Driven Beans) — їх логіка є реакцією на події в системі.

Пакети javax.ejb і javax.ejb.deployment є стандартними розширеннями платформи Java 2 і містять класи, необхідні для створення і впровадження EJB. Архітектура EJB також взаємодіє з інтерфейсами JNDI та іншим стандартним розширенням - Java Transaction Services (JTS).

24.2.1. Призначення і цілі EJB

Технологія EJB (Enterprise JavaBeans) є компонентною моделлю проміжного рівня для розробки розподілених програмних застосувань для мови Java. За допомогою цієї технології розробникові досить програмувати лише бізнес-логіку застосування і можна не займатися стандартними речами, такими, як обробка транзакцій.

До її конкурентів можна віднести RMI (remote method invocation - виклик віддалених методів), CORBA (common object request broker architecture), DCOM (distributed component object model) і деякі інші. Треба сказати, що багато принципів CORBA було свідомо покладено в основу EJB. Більш того, існує стандарт відображення EJB на CORBA, що стосується служби імен, управління транзакціями і безпекою.

Специфікація EnterpriseJavaBeans описує модель компонентів сторони сервера. Вона визначає шість ролей, які використовуються для виконання задач при розробці і розгортанні, також визначає компоненти системи. Ці ролі використовуються в розробці, розгортанні і запуску розподілених систем.

Специфікація EJB визначає наступні цілі:

  1. Полегшити розробникам створення застосувань, позбавивши їх від необхідності реалізовувати з нуля такі служби, як транзакції (transactions) та інші. Розробники можуть концентруватися на описі логіки своїх застосувань, залишаючи турботи про зберігання, передачу і безпеку даних на EJB-систему. При цьому все одно є можливість самому контролювати і описувати доручені системі процеси.
  2. Описати основні структури EJB-системи, описавши при цьому інтерфейси взаємодії  між її компонентами.
  3. EJB переслідує мету стати стандартом для розробки клієнт-серверних застосувань  на Java. Так само, як компоненти JavaBeans від різних виробників можна було збирати з допомогою відповідних RAD-систем, отримуючи в результаті працездатні клієнти, так само серверні компоненти EJB від різних виробників також можуть бути використані разом. EJB-компоненти, будучи Java-класами, повинні працювати на будь-якому EJB-сумісному сервері навіть без перекомпіляції.
  4. EJB сумісна з Java API, може взаємодіяти з іншими (не обов'язково Java) застосуваннями, а також сумісна з CORBA.

Основна ідея, що лежала в розробці технології Enterprise JavaBeans, - створити таку інфраструктуру для компонентів, щоб вони могли легко "вставляться"' (`"plug in'') і видалятися з серверів, тим самим збільшуючи або зменшуючи функціональність сервера. Кожен компонент в середовищі EJB повинен функціонувати усередині контейнера, що ізолює його від ОС сервера.

Контейнер автоматично виділяє компоненту потік процесів і управляє від його імені службами підтримки паралелізму, захисту, довготривалого зберігання, транзакційної обробки і іншими службами, що надаються застосуванням з боку серверного середовища.

24.2.2. Сервіси, що забезпечуються EJB

У складі сервісів (служб) серверного середовища EJB є:

1. Протокол видаленого зв'язку. Java Beans має доступ до протоколу віддаленого виклику методів (Remote Method Invocation, RMI), що входить до складу Java і TCP/IP, що працює безпосередньо поверх мережевих протоколів.

2 Служба каталогів. Ця служба забезпечується через незалежний від реалізації API-інтерфейс Java Naming & Directory Interface (JNDI) компанії Sun Microsystems, що дозволяє застосуванням, написаним на мові Java, користуватися наявними службами каталогів, наприклад, DNS.

3. Служба безпеки. Платформа EJB може використовувати всі сервіси захисту, що надаються стандартним пакетом Java-security від Sun Microsystems. До них відносяться: аутентифікація із застосуванням відкритого і секретного ключів, шифрування, управління цифровими ключами і списками контролю доступу.

4. Служба системного адміністрування. Ця служба забезпечується через API-интерфейс Java Management API (JMAPI) компанії Sun Microsystems. Він надає набір служб моніторингу, управління і адміністрування, а також опис призначеного для користувача інтерфейсу консолі системного адміністратора.

5. Служба транзакцій. У середовищі EJB визначена модель обробки транзакцій, в основу якої покладена специфікація Object Transaction Service, розроблена Object Management Group (OMG) (API-інтерфейс Java Transaction Service, JTS, в цьому середовищі не використовується).

У моделі Java Beans передбачені засоби, що дозволяють упакувати компоненти Java Beans для вкладення в контейнери, що підтримують модель DCOM, у тому числі в контейнери для MS Visual Basic, MS Internet Explorer, MS Office, Lotus Notes. Для цього служить спеціальний комунікаційний міст, технологічною основою якого служить утиліта упаковки. Ця утиліта для вибраних компонентів JavaBeans генерує бібліотеку OLE Type Library і реєстрову інформацію для інтерфейсу Win32 ОС Windows. Отримані в результаті дані дозволяють контейнерам DCOM правильно аналізувати, представляти і обробляти компоненти Java Beans, наприклад, перехоплювати події компонента, ініціювати методи його служб, створювати сторінки властивостей для налаштування компонентів.

24.2.3. Базова модель EJB

Базова структура EJB складається з п'яти частин:

  • сервери EJB;
  • контейнери EJB, які працюють усередині сервера;
  • об'єкти типа home, remote, EJBObjects і EJB, які працюють в контейнерах;
  • клієнти EJB;
  • допоміжні служби, наприклад, JNDI, JTS, служби безпеки тощо.

Рис. 24.1. Базова модель EJB

Сервер EJB забезпечує середовище для виконання - в ньому можуть працювати контейнери EJB. Сервер робить EJB-контейнери видимими для зовнішнього світу. Він додатково може надавати функції, залежні від постачальника, наприклад, інтерфейс оптимального доступу до даних, SSL-підтримку, JNDI-доступну службу імен і службу управління транзакціями.

Контейнер EJB - це абстракція, яка управляє одним або більше класами EJB, в той же час роблячи необхідні служби доступними класам EJB через стандартні інтерфейси, як вказано в специфікації EJB. Розробник контейнера також може надати додатковий сервіс, що виконується як на рівні контейнера, так і на рівні сервера.

Клієнт EJB ніколи не має прямого доступу до " bean" (компоненту). Будь-який доступ до bean виконується за допомогою методів контейнерно-генеруємих класів, які у свою чергу викликають методи цього компонента.

Методи для знаходження, створення і видалення екземплярів класів EJB визначаються в home-інтерфейсі, реалізацією якого виступає home-об'єкт. Розробник EJB спочатку повинен визначити home-інтерфейс для свого bean-компонента. Розробник контейнера EJB надає засоби, які автоматично генерують код-реалізацію для home-інтерфейса, визначеного розробником EJB.

Remote-інтерфейс перелічує бізнес-методи, доступні для EJB. EJBObject - це клієнтське представлення об'єкту EJB, що реалізує remote-інтерфейс. В той час як розробник EJB визначає remote-інтерфейс, виробник контейнера надає засоби, що дозволяють згенерувати код для відповідного об'єкту EJBObject.

Справжній об'єкт EJB міститься в контейнері EJB і ніколи не має бути безпосередньо доступний нікому, окрім контейнера. Хоча прямий доступ в принципі можливий, застосовувати його не рекомендується, оскільки це розриває зв'язок ("контракт") між bean і контейнером. Контейнер EJB повинен служити сполучною ланкою між всіма зверненнями до EJB. З цієї причини розробник EJB не реалізує remote-інтерфейс в самому EJB.

Клієнти EJB знаходять певний контейнер EJB, який містить об'єкт EJB, через протокол JNDI (Java Naming and Directory Interface, Java-інтерфейс іменування і каталогів). Потім вони використовують контейнер EJB для викликів методів bean-компонента. Клієнт EJB отримує посилання лише на екземпляр EJBObject - він ніколи насправді не отримує посилання на поточний екземпляр власне EJB. Коли клієнт викликає метод, екземпляр EJBObject приймає запит і перенаправляє його відповідному екземпляру bean, надаючи всю необхідну додаткову функціональність. Клієнт використовує home-об'єкт для знаходження, створення або руйнування екземплярів EJB. Потім він використовує екземпляр EJBObject для виклику бізнес-методів екземпляра bean.

Enterprise beans

Одне з основних понять в Enterprise JavaBeans - компонент EJB, який по суті є фрагментом коду, що має поля і методи для реалізації кожного модуля бізнес-логіки. Вони можуть бути постійними або непостійними.

Розробникові, проте, не потрібно самому реалізовувати EJB-об'єкт. Цей клас створюється спеціальним кодогенератором, що поставляється разом в EJB-контейнером. EJB- об'єкт (створений за допомогою сервісів контейнера) і EJB-компонент (створений розробником), реалізують один і той же інтерфейс. В результаті, коли застосування-клієнт хоче викликати метод в EJB-компонента, то спочатку викликається аналогічний (по імені) метод в EJB-об'єкта, що знаходиться на стороні клієнта, а той, у свою чергу, зв'язується з віддаленим EJB-компонентом і викликає у нього цей метод (з тими ж аргументами).

Існує два різні типи ``бінів''.

  1. Session bean є EJB-компонент, пов'язаним з одним клієнтом. ``Біни'' цього типу, як правило, мають обмежений термін життя (хоча це і не обов'язково), і рідко беруть участь у транзакціях. Зокрема, вони зазвичай не відновлюються після збою сервера. Як приклад session bean можна узяти ``бін'', який живе в Web-сервері і динамічно створює HTML-сторінки клієнту, при цьому стежачи за тим, яка саме сторінка завантажена у клієнта. Коли ж користувач покидає Web-вузол, або після закінчення деякого часу, session bean знищується. Не дивлячись на те, що в процесі своєї роботи, session bean міг зберігати деяку інформацію в базі даних, його призначення полягає у виконанні деяких функцій на стороні сервера від імені одного клієнта.
  2. Entity bean, навпаки, є компонентом, що працює з постійною (persistent) інформацією, що зберігається, наприклад, в базі даних. Entity beans асоціюються з елементами баз даних і можуть бути доступні одночасно декільком користувачам. Оскільки інформація в базі даних є постійною, то і entity beans живуть постійно. Наприклад, entity bean може бути рядком якої-небудь таблиці з бази даних, або навіть результат операції SELECT. У об'єктно-орієнтованих базах даних, entity bean може бути окремим об'єктом, зі всіма його методами і властивостями.

Засоби захисту EJB

Модель Enterprise JavaBeans використовує служби захисту на Java, передбачені в Java Development Kit. Засоби захисту Java-платформи підтримують сервіси аутентифікації і авторизації, що обмежують доступ до захищених об'єктів і методів.

Крім того, технологія EJB автоматизує процес використання засобів захисту Java-платформи. Правила захисту для кожного bean визначені декларативно в пакеті об'єктів AccessControlEntry в об'єкті deployment descriptor.

Транзакції

Технологія EJB вимагає розподіленої системи управління транзакціями, яка підтримує протоколи двохфазової фіксації розподілених транзакцій. Специфікація Enterprise JavaBeans передбачає, але не вимагає здійснення транзакцій, заснованих на інтерфейсі Java Transaction Service (JTS) API.

JTS є Java-технологією, пов'язаною з механізмом CORBA Object Transaction Service (OTS). Ця технологія підтримує розподілені транзакції, які можуть охоплювати безліч баз даних на багаточисельних системах, що координуються багатьма менеджерами транзакцій. При використанні JTS сервер Enterprise JavaBeans гарантує, що його транзакції здатні охопити багато серверів Enterprise JavaBeans.

Перевагиі недоліки EJB:

Переваги

  1. Швидке і просте створення
  2. Java-оптимізація
  3. Кросплатформність
  4. Динамічне завантаження компонент-перехідників
  5. Можливість передачі об'єктів за значенням
  6. Вбудована безпека

Недоліки

  1. Підтримка лише однієї мови - Java
  2. Складність інтеграції з існуючими застосуваннями
  3. Погана масштабованість
  4. Продуктивність
  5. Відсутність міжнародної стандартизації

Завдяки своїй легко використовуваній Java-моделі, EJB є найпростішим і найшвидшим способом створення кросплатформних розподілених систем.

24.3. JavaBeans і EJB

Через схожість назв часто путаються між моделлю компонент JavaBeans і специфікацією Enterprise JavaBeans.

Стандарт, визначений в моделі компонент JavaBeans призначений для створення повторного використання компонент, які звичайно використовуються в інтегрованому середовищі розробки і часто, але не завжди, є візуальними компонентами.

Специфікація Enterprise JavaBeans визначає модель компонентів для розробки Java коду сторони сервера. Оскільки EJB можуть запускатися потенційно на різних серверних платформах – включаючи центральні машини, які не мають візуальних дисплеїв – EJB не може використовувати графічні бібліотеки, типу AWT або Swing.

Enterprise JavaBeans - це серверний аналог JavaBeans. Enterprise JavaBeans (EJB) являє собою компонентну модель для реалізації бізнес логіки і бізнес даних. Програмна модель з "тонким" клієнтом припускає винесення бізнес-логіки з клієнтської частини на сервер або проміжний рівень (middle tier) і дозволяє створювати більш гнучкі корпоративні застосування. Але при цьому, реалізація бізнес логіки пов'язана з необхідністю підтримки коду, який би обробляв транзакції, взаємодіяв б з мережею і забезпечував би засоби захисту інформації.

Висновки

JavaBeans і специфікація Enterprise JavaBeans поділяють однакові цілі: впровадження повторного використання, компактність Java коду при розробці і інструменти розробки з використанням стандартних шаблонів, але мотиви специфікації більш підходять для розв’язання різних проблем.

Технологія Enterprise JavaBeans спрощує процес розробки застосувань, автоматизуючи використання розподілених транзакцій. Всі функції транзакцій можуть виконуватися безпосередньо EJB-контейнером і EJB-сервером. Окремим beans не обов'язково створювати оператори розмежування транзакцій, включаючи їх в код. І оскільки код транзакцій потрібний для логіки застосувань, beans простіше писати і переносити за допомогою різних менеджерів транзакцій.

Контрольні запитання і завдання для самостійного виконання

1. Яке призначення компонентів JavaBeans?

2. Де використовуються компоненти JavaBeans: на стороні сервера чи клієнта?

3. Правила опису JavaBeans?

4. Які основні служби (сервіси) входять до EJB?

5. Яке призначення і основні служби EJB?

6. Яка різниця між моделлю компонент JavaBeans і специфікацією Enterprise JavaBeans?

7. Які складові формують структуру EJB?

8. Базова модель EJB?

9. Яка принципова різниця між Entity Bean і Session Beans?

10. Основні сервіси EJB?

(Для ознайомлення з повним текстом статті необхідно залогінитись)