Технології розробки корпоративних застосувань

Лектор:Подрубайло Олександр Олександрович
Сайт курсу:Технологія Java EE

Лекція 1. JDBC. Servlets.

date: 2016-09-28 12:29:32 +0300

Вы – жертвы экспериментальной программы

© Подрубайло О. О.

JDBC

JDBC – Java Database Connectivity. JDBC – паттерн моста (bridge). Тут у ролі реалізації виступають класи JDBC, а у ролі абстракції – застосунок, який пише програміст.

Клієнт працює з базою в рамках транзакцій. Транзакції є атомарними операціями. Транзакції задовольняють принципу ACID:

  • Atomic
  • Consistency
  • Isolation
  • Durability

На практиці ACID є доволі накладним, тому сучасні системи, що працюють з розоділеними даними відовідають принципам BASE

  • Basicaly Availabile
  • ще щось там
  • Eventual Consistency

JDBC – це доволі проста і тупа штука, і вже не входить у склад JEE.

Схема роботи з JDBC:

  1. Встановити з’єднання
  2. Створити запит (statement)
    • Statement – просто текст запиту
    • PreparedStatement – готує запит із параметрами.
    • CallableStatement – заздалегідь заготовані процедури. Ці процедури використовуються в базі, щоб оптимізувати виконання спеціальних запитів.
  3. Отримати ResultSet

Як працювати із з’єднаннями

З’єднання – канал зв’язку користувача з базою. На одного користувача виділяти одне з’єднання – погано. На одного клієнта (застосунок) треба виділяти декілька з’єднань. Точна кількість з’єднань залежить від великої кількості різних факторів. Зазвичай для реалізації декількох з’єдннь використовується пул з’єднань (Connection pool).

Коли іде робота тільки з одним з’єднанням – це не дуже правильно. З’єднання можуть перериватися по різних причинах.

Варіанти

  • на кожну транзакцію використовувати своє з’єднання і після транзакції закривати.
  • моніторити стан з’єднань і закривати вбиті
+-----------------+
|ConnectionManager|
+-----------------+
|+getConnection() |
+-----------------+
         |
         |
+-----------------+
|       DAO       |
+-----------------+
|+findById()      |<---- // connManager.getConnection()
+-----------------+

Правильно у getConnection ловити помилки і у блоці catch кидати RuntimeException, який кладе увесь застосунок. Логіка створення з’єднання (можливого перестворення у випадку помилок, тощо) повинна бути у менеджері з’єднань. Цей підхід застосовний тільки для синхронних операцій.

Servlet

Сервлет – краєугольный камень веб-разработки на Java

Веб-контейнер – фігня, яка вміє прийняти war, правильного його встановити і запустити.

Коли Java тільки з’явилася і почала працювати з вебом, сервери були слабкі і була точка зору, що Java-аплета буде достатньо. Проблеми аплетів:

  • працюють на стороні клієнта, а значить клієнт при бажанні може їх модифікувати
  • jar-файли великі (особливо, якщо там багато залежностей)

Servlet виконується тільки на сервері, повертає веб-контейнеру ServletResponse, а веб-контейнер повертає читабельну для користувача інформацію без java-коду і java-логіки.

В Java сервлети представлені у вигляді HttpServlet. Сам Servlet реалізовує патерн template method.

Наразі в чистому вигляді сервлети використовуються рідко. Зазвичай – разом із рядом надбудов. Але це все одно ті ж самі севлети з тими ж принципами роботи.





Лекція 7. Авторизація та автентифікація в JavaEE.

date: 2016-11-16 12:20:32 +0200

JAAS

WildFly

Налаштування серверу застосунків

Щоб налаштувати авторизацію і автентикацію у wildfly, необхідно у standalone.xml додати security realm:

<security-domain name="dbdomain">
    <authentication>
        <login-module code="Database" flag="required">
            <module-option name="dsJndiName" value="java:MySqlDS"/>
            <module-option name="principalQuery" value="select password from users where login = ?"/>
            <module-option name="rolesQuery" value="select role,'Roles' from user_roles where login = ?"/>
            <module-option name="hashAlgorithm" value="SHA-256"/>
            <module-option name="hashEncoding" value="BASE64"/>
        </login-module>
    </authentication>
</security-domain>

Також у проекті потрібно описати wildfly-web.xml

Приклад проекту

Приклад JavaEE проекту з використанням JAAS: [github]. Автор проекту: Дмитро

Лекція 11. Моніторинг та оптимізація Java-застосунків.

date: 2016-12-21 12:20:00 +0200

Матеріал підготували: Владислав та Олександр.