Технології розробки корпоративних застосувань¶
Лектор: | Подрубайло Олександр Олександрович |
---|---|
Сайт курсу: | Технологія Java EE |
Contents
Лекція 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:
- Встановити з’єднання
- Створити запит (statement)
- Statement – просто текст запиту
- PreparedStatement – готує запит із параметрами.
- CallableStatement – заздалегідь заготовані процедури. Ці процедури використовуються в базі, щоб оптимізувати виконання спеціальних запитів.
- Отримати 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.
Наразі в чистому вигляді сервлети використовуються рідко. Зазвичай – разом із рядом надбудов. Але це все одно ті ж самі севлети з тими ж принципами роботи.
Лекція 2. JSF.¶
date: 2016-10-05 12:29:32 +0300
Лекція 3. JPA.¶
date: 2016-10-12 12:29:32 +0300
Лекція 5. JMS.¶
date: 2016-11-02 12:20:00 +0300
Лекція 7. Авторизація та автентифікація в JavaEE.¶
date: 2016-11-16 12:20:32 +0200
JAAS¶
- JAAS – Java Authentication and Authorization Service
- Присутній як в Java EE, так і в Java SE
- Доволі низькорівневий
- Документація
- автентикація
- авторизація
- JAAS reference guide
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
Лекція 11. Моніторинг та оптимізація Java-застосунків.¶
date: 2016-12-21 12:20:00 +0200
- Слайди лекції. [github], [slideshare]